swarm的使用和滾動升級
阿新 • • 發佈:2018-11-10
1. 開啟 docker
systemctl start docker
2. 建立 swarm 叢集
docker swarm init
Swarm initialized: current node (6sn1m12dlxmaj090ge4b4zf1l) is now a manager. To add a worker to this swarm, run the following command: docker swarm join \ --token SWMTKN-1-2v9j04bc95yfxchueu7zi4fs56w07ob57wr29vk29m6nwiyg4q-9ia9c2xrzfohpa0wx6vd8n0v0 \ 192.168.126.129:2377 To add a manager to this swarm, run 'docker swarm join-token manager' and follow the instructions.
新增節點到叢集
docker swarm join \
--token SWMTKN-1-2v9j04bc95yfxchueu7zi4fs56w07ob57wr29vk29m6nwiyg4q-9ia9c2xrzfohpa0wx6vd8n0v0 \
192.168.126.129:2377
將上面的複製貼上到你要新增的節點(主機)上去執行,這樣就完成了將節點新增到叢集
在manager節點上檢視節點的命令
docker node ls
釋出服務
在 manager 上執行如下命令
[[email protected] ~]$ docker service create --replicas 1 --name helloworld alpine ping docker.com 6gxhvlwx8uqbio7fn2yxnw1yg
或
docker service create --replicas 2 -p 8099:80 --name MyfirstDevops nginx
- docker service create 命令建立一個 service
- –name 標籤命名 service 為 helloworld / MyfirstDevops
- –replicas 標籤來詳細宣告 1 / 2 個執行實體
- 引數alpine ping docker.com定義執行ping docker.com作為alpine容器的服務.
使用docker service ls檢視服務
[[email protected] ~]$ docker service ls
ID NAME SCALE IMAGE COMMAND
6gxhvlwx8uqb helloworld 1 alpine ping docker.com
使用docker service inspect審查服務
[[email protected] ~]$ docker service inspect --pretty helloworld
ID: 6gxhvlwx8uqbio7fn2yxnw1yg
Name: helloworld
Mode: REPLICATED
Replicas: 1
Placement:
Strategy: SPREAD
UpateConfig:
Parallelism: 1
ContainerSpec:
Image: alpine
Args: ping docker.com
使用docker service tasks 檢視服務執行在哪個節點上
[[email protected] ~]$ docker service tasks helloworld
ID NAME SERVICE IMAGE LAST STATE DESIRED STATE NODE
30nkhczhr8g1ot6jh9couixed helloworld.1 helloworld alpine Running 10 minutes Running centos01
[[email protected] ~]$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
8b1e88baadfd alpine:latest "ping docker.com" 10 minutes ago Up 10 minutes helloworld.1.30nkhczhr8g1ot6jh9couixed
docker service scale 修改 service 規模
docker service scale MyfirstDevops=5
開啟 5 個 MyfirstDevops 的 service 規模
刪除 service
docker service rm MyfirstDevops
刪除 MyfirstDevops 服務
離開(刪除)節點
docker swarm leave --force
滾動升級
Swarm 將按照如下步驟執行滾動更新:
1、停止第一個副本。
2、排程任務,選擇 worker node。
3、在 worker 上用新的映象啟動副本。
4、如果副本(容器)執行成功,繼續更新下一個副本;如果失敗,暫停整個更新過程。
docker service ps 檢視更新結果。
預設配置下,Swarm 一次只更新一個副本,並且兩個副本之間沒有等待時間。我們可以通過 --update-parallelism 設定並行更新的副本數目,通過 --update-delay 指定滾動更新的間隔時間。
比如執行如下命令:
docker service update --replicas 6 --update-parallelism 2 --update-delay 1m30s my_web
service 增加到六個副本,每次更新兩個副本,間隔時間一分半鐘。
docker service inspect 檢視 service 的當前配置。
docker service ps 確保6個副本處於正常狀態。
docker service update --image httpd:2.4.16 my_web
Swarm 還有個方便的功能是回滾,如果更新後效果不理想,可以通過 --rollback 快速恢復到更新之前的狀態。
docker service updata -rollback my_web
請注意,--rollback 只能回滾到上一次執行 docker service update 之前的狀態,並不能無限制地回滾。
滾動更新就討論到這裡,下一節我們學習 Docker Swarm 如何管理資料。
node 下線
有些時候需要維護一個節點,此時此節點可能會網路斷開或者需要關機,造成節點上服務可用。使用docker node update --availability drain 將節點下線,swarm會將當前節點上的容器關閉並在其他節點上啟動。當維護完成,需要上線是,將節點狀態修改為active狀態即可,命令如下:docker node update --availability active