1.容器生態
容器技術的生態系統自下而上分別覆蓋了IaaS層和PaaS層所涉及的各類問題,包括資源調度、編排、部署、監控、配置管理、存儲網絡管理、安全、容器化應用支撐平臺等。如下圖,其中docker、k8s、consul、etcd等都是此處需要關注的。
docker主要是輕量級容器引擎,起到容器(運行着服務)間隔離的作用,可以充分利用機器資源,自動化部署。
Kubernetes(k8s)主要用於管理容器集羣,
1.1優勢
- 持續部署與測試
- 跨雲平臺支持
- 環境標準化和版本控制
2.Docker使用
2.1 三大核心概念
Image鏡像 | |
---|---|
Container容器 | 輕量級虛擬機 |
Docker registry鏡像倉庫 | 類似與github等代碼倉庫,官方倉庫https://hub.docker.com/ |
2.2 關聯關係
常用流程就是
1.編寫dockerfile,build生成一個鏡像,將鏡像push到倉庫
2.從倉庫pull拉取一個鏡像,run創建一個容器並運行
像上面的流程一樣,3者直接通過docker命令可以交互
2.2.1 命令
分類 |
命令 |
容器生命週期管理 |
run、start/stop/restart、kill、rm、pause/unpause、create、exec |
容器操作 |
ps、inspect、top、attach、events、logs、wait、export、port |
容器rootfs命令 |
commit、cp、diff |
鏡像倉庫 |
login、pull、push、search |
本地鏡像管理 |
images、rmi、tag、build、history、save、load、import |
docker環境 |
info、version |
類別 |
常用子命令 |
樣例&功能 |
---|---|---|
環境
|
docker info
|
Docker環境信息 Containers Images ... |
docker version
|
Client\Server: Version: 18.06.1-ce API version: 1.38 Go version: go1.10.3 Git commit: e68fc7a Built: Tue Aug 21 17:23:18 2018 OS/Arch: linux/amd64 Experimental: false |
|
容器啓動、關閉 |
docker run
|
基於特定的鏡像創建一個容器,並依據選項來控制該容器運行 docker run --name=mysqltest -d -p 3306:3306 mysql/mysql-server:5.7 該命令從mysql-server:5.7鏡像啓動一個容器,並執行echo命令 --name指定容器名字 -d 後臺執行 -p 容器服務端口到主機端口映射 hostPort:container-Port
|
docker start/stop/restart |
對於已經存在的容器,可以通過dockerstart/stop/restart命令來啓動、停止和重啓 |
|
docker rm |
刪除容器 |
|
鏡像倉庫
|
docker pull |
從Docker registry中拉取image或repository docker pull mysql/mysql-server:5.7 從mysql倉庫拉取tag是5.7的mysql-server鏡像 |
docker push |
將本地的image或repository推送到DockerHub的公共或私有鏡像庫
|
|
鏡像管理
|
docker images |
可以列出主機上的鏡像 |
docker build |
用Dockerfile和docker build命令來完成一個新鏡像的構建 |
|
docker commit |
提交容器對鏡像的修改 |
|
docker save |
保存鏡像 |
|
docker rmi |
刪除鏡像 |
|
容器運維 |
docker ps |
查看容器的相關信息,默認只顯示正在運行的容器的信息 |
3.Kubernetes
3.1 集羣架構
用戶通過api發送指令給master,master發信號給Node
master和node的組件如下:
3.1 核心概念
節點 | 組件 | 功能 |
---|---|---|
master | API Server |
對外接口 用戶操作的接口 |
Scheduler |
資源調度 預定的調度策略將Pod調度到相應的機器上(Model) |
|
Controller manager |
管理控制器 負責維護集羣的狀態,比如故障檢測、自動擴展、滾動更新等 |
|
etcd | 用以保存了整個集羣的狀態 | |
Node | Pod |
部署、水平擴展和製作副本的最小單元。 可以有多個容器Container(Docker 容器) Pod內的所有容器共享存儲和網絡。 |
Kubelet | 負責維護容器的生命週期,同時也負責Volume(CVI)和網絡(CNI)的管理 | |
kube-proxy |
負責爲服務Service提供cluster內部的服務發現和負載均衡 監聽 API server 中 service 和 endpoint 的變化情況 |
3.2 開放接口
命令 | 功能 |
---|---|
kubectl create -f xxx.yaml | 創建資源對象 |
kubectl get nodes | 查看node |
kubectl get pods -n <namespace> -o wide | 查看pods |
kubectl describe | 描述資源,如node、pod |
kubectl delete | 刪除資源,如node、pod |
kubectl exec <pod-name> date kubectl exec -it <pod-name> -c <container-name> /bin/bash |
執行pod第一個容器的date命令 執行指定pod、指定容器的bash命令 |
kubectl logs -f <pod-name> -c <container-name> |
查看日誌(相當於tail -f 命令) |