Docker Swarm資源管理
Docker Swarm是Docker官方三劍客專案之一,提供Docker容器叢集服務,是Docker官方對容器雲生態進行支援的核心方案。
使用它,使用者可以將多個Docker主機封裝為單個大型的虛擬Docker主機,快速打造一套容器雲平臺。
注意:Docker1.12.0之後版本,Swarm模組已經內嵌入Docker引擎,成為Docker子命令docker swarm,絕大多使用者已經開始使用Swarm模組,Docker引擎API已經刪除Docker Swarm。
基本概念
Swarm是使用SwarmKit構建的Docker引擎內建(原生)的叢集管理和編排工具。使用Swarm叢集之前需要了解以下幾個概念。
節點
執行Docker的主機可以主動初始化一個Swarm叢集或者加入一個已存在的Swarm叢集,這樣執行Docker的主機就成為一個Swarm叢集的節點(node)。
節點分為管理(manager)節點和工作(worker)節點。
- 管理節點用於Swarm叢集的管理,docker swarm集合基本只能在管理節點執行。
- 工作節點是任務執行節點,管理節點將服務(service)下發至工作節點執行。
叢集中管理節點與工作節點的關係
服務和任務
任務(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.1.1
複製程式碼
如果你的Docker主機有多個網段,擁有多個IP,必須使用--advertise-addr指定IP。執行docker swarm init命令的節點自動成為管理節點。
注意:使用docker swarm init
增加工作節點
在另外兩臺伺服器上執行上一步建立管理節點時候的輸出的加入swarm叢集的全集
docker swarm join \
--token SWMTKN-1-3pu6hszjas19xyp7ghgosyx9k8atbfcr8p2is99znpy26u2lkl-1awxwuwd3z9j1z3puu7rcgdbx \
192.168.1.1: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預設頁面。
檢視服務
檢視當前Swarm叢集執行的服務
docker service ls
複製程式碼
檢視某個服務的詳情
docker service ps nginx
複製程式碼
檢視某個服務的日誌
docker service logs nginx
複製程式碼
刪除服務
從Swarm叢集中移除某個服務
docker service rm nginx
複製程式碼
資源管理
前面利用Docker Swarm快速搭建一個最小叢集,也可以在叢集上部署服務,但是會發現swarm中並沒有提供統一入口檢視節點的資源使用情況。這時我們可以用圖形化管理工具Portainer幫我們管理swarm叢集。
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配置
設定管理員帳號密碼
Portainer介面內容
關注【小碼農薛堯】,瞭解更多資訊