1. 程式人生 > >swarm的使用和滾動升級

swarm的使用和滾動升級

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