Docker Swarm資源管理
-
Docker Swarm是docker官方三劍客專案之一,提供docker容器叢集服務,是docker官方對容器雲生態進行支援 的核心方案。使用它,使用者可以將多個docker主機封裝為單個大型的虛擬docker主機,快速打造一套容器雲平臺。
-
注意:docker 1.12.0+Swarm mode已經內嵌入docker引擎,成為了docker子命令docker swarm,絕大多數使用者已經開始使用swarm mode,docker引擎API已經刪除Docker Swarm。
-
基本概念
-
Swarm是使用SwarmKit構建的docker引擎內建(原生)的叢集管理和編排工具。使用Swarm叢集執勤啊需要了解如下幾個概念:
-
節點
-
執行docker的主機可以主動初始化一個swarm叢集或者加入一個已存在的swarm叢集,這樣這個執行docker的主機就稱為一個swarm叢集的節點。
-
節點分為管理節點和工作節點。管理節點用於swarm叢集的管理,docker swarm命令基本只能在管理節點執行。工作節點是任務執行節點,管理節點將服務下發至工作節點執行。
-
叢集中管理節點與工作節點的關係:
-
-
服務和任務
-
任務(Task)是swarm中的最小的排程單位,目前來說就是一個單一的容器。服務(Services)是指一組任務的集合,服務定義了任務的屬性。
-
服務有兩種模式:
- replicated services:按照一定規則在各個工作節點上執行指定個數的任務;
- global services:每個工作節點上執行一個任務。
-
兩種模式通過
docker service create
的--mode
引數指定。 -
容器、任務、服務的關係:
-
-
-
建立swarm叢集
-
瞭解swarm叢集由管理節點和工作節點組成後,我們來建立一個包含一個管理節點和兩個工作節點的最小swarm叢集。
-
初始化叢集
-
使用
docker swarm init
在本機初始化一個swarm叢集docker swarm init --advertise-addr 192.168.100.249
如果你的docker主機有多個網絡卡,擁有多個IP,必須使用
--advertise-addr
執行
docker swarm init
命令的節點自動成為管理節點。
-
-
增加工作節點
-
在另外兩臺伺服器上執行上一步建立管理節點時輸出的加入swarm叢集的命令
docker swarm join --token SWMTKN-1-49nj1cmql0jkz5s954yi3oex3nedyz0fb0xx14ie39trti4wxv-8vxv8rssmk743ojnwacrr2e7c 192.168.100.24:2377
-
-
檢視叢集
-
在管理節點使用
docker node ls
檢視叢集docker node ls
-
-
-
部署服務
-
使用
docker service
命令來管理swarm叢集中的服務,該命令只能在管理節點上執行; -
新建服務
-
在建立好的swarm叢集中執行一個名為nginx的服務。
docker service create --replicas 3 -p 80:80 --name nginx nginx:latest
現在我們使用瀏覽器,輸入任意節點IP,即可看到nginx預設頁面。
-
-
檢視服務
-
使用
docker service ls
來檢視當前swarm叢集執行的服務docker service ls
使用
docker service ps
來檢視某個服務的詳情docker service ps nginx
使用
docker service logs
來檢視某個服務的日誌docker service logs nginx
-
-
刪除服務
-
使用
docker service rm
來從swarm叢集移除某個服務docker service rm nginx
-
-
-
資源管理
-
前面我們學過了利用docker swarm快速搭建一個最小叢集,也可以在叢集上部署服務,但是會發現swarm中並沒有提供統一入口檢視節點的資源使用情況。這個時候我們急切的希望有一個圖形化管理工具來幫我們管理swarm叢集,portainer就是這樣的一個工具。
-
portainer是docker的圖形化管理工具,提供狀態顯示面板、應用模板快速部署、容器映象網路資料卷的基本操作(包括上傳下載映象,建立容器等操作)、事件日誌顯示、容器控制檯操作、swarm叢集和服務等幾種管理和操作、登入使用者管理和控制等功能。功能十分全面,基本能滿足中小型單位對容器管理的全部需求。
-
portainer叢集執行
-
下載portainer映象
# 查詢當前有哪些portainer映象 docker search portainer docker pull portainer/portainer
-
安裝portainer
docker run -d -p 9000:9000 --name portainer --restart=always -v /var/run/docker.sock:/var/run/docker.sock portainer/portainer
-
-
portainer配置
-