91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

如何進行Docker Swarm 集群環境搭建及彈性服務部署

發布時間:2021-12-10 19:19:57 來源:億速云 閱讀:190 作者:柒染 欄目:大數據

如何進行Docker Swarm 集群環境搭建及彈性服務部署,相信很多沒有經驗的人對此束手無策,為此本文總結了問題出現的原因和解決方法,通過這篇文章希望你能解決這個問題。

集群搭建

環境準備

如何進行Docker Swarm 集群環境搭建及彈性服務部署

  • 五臺安裝了 Docker 的 CentOS 機器,版本為:CentOS 7.8.2003

  • Docker Engine 1.12+(最低要求 1.12,本文使用 19.03.12)

  • 防火墻開啟以下端口或者關閉防火墻:

    • TCP 端口 2377,用于集群管理通信;

    • TCP 和 UDP 端口 7946,用于節點之間通信;

    • UDP 端口 4789,用于覆蓋網絡。

機器分布

角色IPHOSTNAMEDocker 版本
Manager192.168.10.101manager119.03.12
Manager192.168.10.102manager219.03.12
Manager192.168.10.103manager319.03.12
Worker192.168.10.10worker119.03.12
Worker192.168.10.11worker219.03.12
  • 可以通過 hostname 主機名 修改機器的主機名(立即生效,重啟后失效);

  • 或者 hostnamectl set-hostname 主機名 修改機器的主機名(立即生效,重啟也生效);

  • 或者 vi /etc/hosts 編輯 hosts 文件,如下所示, 給 127.0.0.1 添加主機名(重啟生效)。

127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4 manager1
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6

創建集群

  在任意節點下通過 docker swarm init 命令創建一個新的 Swarm 集群并加入,且該節點會默認成為 Manager 節點。根據我們預先定義的角色,在 101 ~ 103 的任意一臺機器上運行該命令即可。

  通常,第一個加入集群的管理節點將成為 Leader,后來加入的管理節點都是 Reachable。當前的 Leader 如果掛掉,所有的 Reachable 將重新選舉一個新的 Leader。

[root@localhost ~]# docker swarm init --advertise-addr 192.168.10.101
Swarm initialized: current node (clumstpieg0qzzxt1caeazg8g) is now a manager.

To add a worker to this swarm, run the following command:

    docker swarm join --token SWMTKN-1-5ob7jlej85qsygxubqypjuftiwruvew8e2cr4u3iuo4thxyrhg-3hbf2u3i1iagurdprl3n3yra1 192.168.10.101:2377

To add a manager to this swarm, run 'docker swarm join-token manager' and follow the instructions.

如何進行Docker Swarm 集群環境搭建及彈性服務部署

加入集群

  Docker 中內置的集群模式自帶了公鑰基礎設施(PKI)系統,使得安全部署容器變得簡單。集群中的節點使用傳輸層安全協議(TLS)對集群中其他節點的通信進行身份驗證、授權和加密。

  默認情況下,通過 docker swarm init 命令創建一個新的 Swarm 集群時,Manager 節點會生成新的根證書頒發機構(CA)和密鑰對,用于保護與加入群集的其他節點之間的通信安全。

  Manager 節點會生成兩個令牌,供其他節點加入集群時使用:一個 Worker 令牌,一個 Manager 令牌。每個令牌都包括根 CA 證書的摘要和隨機生成的密鑰。當節點加入群集時,加入的節點使用摘要來驗證來自遠程管理節點的根 CA 證書。遠程管理節點使用密鑰來確保加入的節點是批準的節點。

如何進行Docker Swarm 集群環境搭建及彈性服務部署

Manager

  若要向該集群添加 Manager 節點,管理節點先運行 docker swarm join-token manager 命令查看管理節點的令牌信息。

docker swarm join-token manager

如何進行Docker Swarm 集群環境搭建及彈性服務部署

如何進行Docker Swarm 集群環境搭建及彈性服務部署

  然后在其他節點上運行 docker swarm join 并攜帶令牌參數加入 Swarm 集群,該節點角色為 Manager。

如何進行Docker Swarm 集群環境搭建及彈性服務部署

如何進行Docker Swarm 集群環境搭建及彈性服務部署

Worker

  通過創建集群時返回的結果可以得知,要向這個集群添加一個 Worker 節點,運行下圖中的命令即可。或者管理節點先運行 docker swarm join-token worker 命令查看工作節點的令牌信息。

如何進行Docker Swarm 集群環境搭建及彈性服務部署

  然后在其他節點上運行 docker swarm join 并攜帶令牌參數加入 Swarm 集群,該節點角色為 Worker。

如何進行Docker Swarm 集群環境搭建及彈性服務部署

如何進行Docker Swarm 集群環境搭建及彈性服務部署

查看集群信息

  在任意 Manager 節點中運行 docker info 可以查看當前集群的信息。

如何進行Docker Swarm 集群環境搭建及彈性服務部署

查看集群節點

  在任意 Manager 節點中運行 docker node ls 可以查看當前集群節點信息。

docker node ls

如何進行Docker Swarm 集群環境搭建及彈性服務部署

* 代表當前節點,現在的環境為 3 個管理節點構成 1 主 2 從,以及 2 個工作節點。

  節點 MANAGER STATUS 說明:表示節點是屬于 Manager 還是 Worker,沒有值則屬于 Worker 節點。

  • Leader:該節點是管理節點中的主節點,負責該集群的集群管理和編排決策;

  • Reachable:該節點是管理節點中的從節點,如果 Leader 節點不可用,該節點有資格被選為新的 Leader;

  • Unavailable:該管理節點已不能與其他管理節點通信。如果管理節點不可用,應該將新的管理節點加入群集,或者將工作節點升級為管理節點。

  節點 AVAILABILITY 說明:表示調度程序是否可以將任務分配給該節點。

  • Active:調度程序可以將任務分配給該節點;

  • Pause:調度程序不會將新任務分配給該節點,但現有任務仍可以運行;

  • Drain:調度程序不會將新任務分配給該節點,并且會關閉該節點所有現有任務,并將它們調度在可用的節點上。

刪除節點

Manager

  刪除節點之前需要先將該節點的 AVAILABILITY 改為 Drain。其目的是為了將該節點的服務遷移到其他可用節點上,確保服務正常。最好檢查一下容器遷移情況,確保這一步已經處理完成再繼續往下。

docker node update --availability drain 節點名稱|節點ID

  然后,將該 Manager 節點進行降級處理,降級為 Worker 節點。

docker node demote 節點名稱|節點ID

  然后,在已經降級為 Worker 的節點中運行以下命令,離開集群。

docker swarm leave

  最后,在管理節點中對剛才離開的節點進行刪除。

docker node rm 節點名稱|節點ID
Worker

  刪除節點之前需要先將該節點的 AVAILABILITY 改為 Drain。其目的是為了將該節點的服務遷移到其他可用節點上,確保服務正常。最好檢查一下容器遷移情況,確保這一步已經處理完成再繼續往下。

docker node update --availability drain 節點名稱|節點ID

  然后,在準備刪除的 Worker 節點中運行以下命令,離開集群。

docker swarm leave

  最后,在管理節點中對剛才離開的節點進行刪除。

docker node rm 節點名稱|節點ID

服務部署

注意:跟集群管理有關的任何操作,都是在 Manager 節點上操作的。

創建服務

  下面這個案例,使用 nginx 鏡像創建了一個名為 mynginx 的服務,該服務會被隨機指派給一個工作節點運行。

docker service create --replicas 1 --name mynginx -p 80:80 nginx

如何進行Docker Swarm 集群環境搭建及彈性服務部署

  • docker service create:創建服務;

  • --replicas:指定一個服務有幾個實例運行;

  • --name:服務名稱。

查看服務

  可以通過 docker service ls 查看運行的服務。

[root@manager1 ~]# docker service ls
ID                NAME           MODE              REPLICAS        IMAGE              PORTS
hepx06k5ik5n      mynginx        replicated        1/1             nginx:latest       *:80->80/tcp

  可以通過 docker service inspect 服務名稱|服務ID 查看服務的詳細信息。

[root@manager1 ~]# docker service inspect mynginx
[
    {
        "ID": "k0dbjg1zzy3l3g71kdwa56ect",
        "Version": {
            "Index": 127
        },
        "CreatedAt": "2020-09-16T10:05:55.627974095Z",
        "UpdatedAt": "2020-09-16T10:05:55.629507771Z",
        "Spec": {
            "Name": "mynginx",
            "Labels": {},
            "TaskTemplate": {
                "ContainerSpec": {
                    "Image": "nginx:latest@sha256:c628b67d21744fce822d22fdcc0389f6bd763daac23a6b77147d0712ea7102d0",
                    "Init": false,
                    "StopGracePeriod": 10000000000,
                    "DNSConfig": {},
                    "Isolation": "default"
                },
                "Resources": {
                    "Limits": {},
                    "Reservations": {}
                },
                "RestartPolicy": {
                    "Condition": "any",
                    "Delay": 5000000000,
                    "MaxAttempts": 0
                },
                "Placement": {
                    "Platforms": [
                        {
                            "Architecture": "amd64",
                            "OS": "linux"
                        },
                        {
                            "OS": "linux"
                        },
                        {
                            "OS": "linux"
                        },
                        {
                            "Architecture": "arm64",
                            "OS": "linux"
                        },
                        {
                            "Architecture": "386",
                            "OS": "linux"
                        },
                        {
                            "Architecture": "mips64le",
                            "OS": "linux"
                        },
                        {
                            "Architecture": "ppc64le",
                            "OS": "linux"
                        },
                        {
                            "Architecture": "s390x",
                            "OS": "linux"
                        }
                    ]
                },
                "ForceUpdate": 0,
                "Runtime": "container"
            },
            "Mode": {
                "Replicated": {
                    "Replicas": 1
                }
            },
            "UpdateConfig": {
                "Parallelism": 1,
                "FailureAction": "pause",
                "Monitor": 5000000000,
                "MaxFailureRatio": 0,
                "Order": "stop-first"
            },
            "RollbackConfig": {
                "Parallelism": 1,
                "FailureAction": "pause",
                "Monitor": 5000000000,
                "MaxFailureRatio": 0,
                "Order": "stop-first"
            },
            "EndpointSpec": {
                "Mode": "vip",
                "Ports": [
                    {
                        "Protocol": "tcp",
                        "TargetPort": 80,
                        "PublishedPort": 80,
                        "PublishMode": "ingress"
                    }
                ]
            }
        },
        "Endpoint": {
            "Spec": {
                "Mode": "vip",
                "Ports": [
                    {
                        "Protocol": "tcp",
                        "TargetPort": 80,
                        "PublishedPort": 80,
                        "PublishMode": "ingress"
                    }
                ]
            },
            "Ports": [
                {
                    "Protocol": "tcp",
                    "TargetPort": 80,
                    "PublishedPort": 80,
                    "PublishMode": "ingress"
                }
            ],
            "VirtualIPs": [
                {
                    "NetworkID": "st2xiy7pjzap093wz4w4u6nbs",
                    "Addr": "10.0.0.15/24"
                }
            ]
        }
    }
]

  可以通過 docker service ps 服務名稱|服務ID 查看服務運行在哪些節點上。

如何進行Docker Swarm 集群環境搭建及彈性服務部署

  在對應的任務節點上運行 docker ps 可以查看該服務對應容器的相關信息。

如何進行Docker Swarm 集群環境搭建及彈性服務部署

調用服務

  接下來我們測試一下服務是否能被正常訪問,并且該集群下任意節點的 IP 地址都要能訪問到該服務才行。

  測試結果:5 臺機器均可正常訪問到該服務。

如何進行Docker Swarm 集群環境搭建及彈性服務部署

彈性服務

  將 service 部署到集群以后,可以通過命令彈性擴縮容 service 中的容器數量。在 service 中運行的容器被稱為 task(任務)。

  通過 docker service scale 服務名稱|服務ID=n 可以將 service 運行的任務擴縮容為 n 個。

  通過 docker service update --replicas n 服務名稱|服務ID 也可以達到擴縮容的效果。

  將 mynginx service 運行的任務擴展為 5 個:

[root@manager1 ~]# docker service scale mynginx=5
mynginx scaled to 5
overall progress: 5 out of 5 tasks 
1/5: running   [==================================================>] 
2/5: running   [==================================================>] 
3/5: running   [==================================================>] 
4/5: running   [==================================================>] 
5/5: running   [==================================================>] 
verify: Service converged

  通過 docker service ps 服務名稱|服務ID 查看服務運行在哪些節點上。

如何進行Docker Swarm 集群環境搭建及彈性服務部署

  我們再來一波縮容的操作,命令如下:

[root@manager1 ~]# docker service update --replicas 3 mynginx
mynginx
overall progress: 3 out of 3 tasks 
1/3: running   [==================================================>] 
2/3: running   [==================================================>] 
3/3: running   [==================================================>] 
verify: Service converged

  通過 docker service ps 服務名稱|服務ID 查看服務運行在哪些節點上。

如何進行Docker Swarm 集群環境搭建及彈性服務部署

  在 Swarm 集群模式下真正意義實現了所謂的彈性服務,動態擴縮容一行命令搞定,簡單、便捷、強大。

刪除服務

  通過 docker service rm 服務名稱|服務ID 即可刪除服務。

[root@manager1 ~]# docker service rm mynginx
mynginx
[root@manager1 ~]# docker service ls
ID                NAME              MODE              REPLICAS          IMAGE             PORTS

滾動更新及回滾

  以下案例將演示 Redis 版本如何滾動升級至更高版本再回滾至上一次的操作。

  首先,創建 5 個 Redis 服務副本,版本為 5,詳細命令如下:

# 創建 5 個副本,每次更新 2 個,更新間隔 10s,20% 任務失敗繼續執行,超出 20% 執行回滾,每次回滾 2 個
docker service create --replicas 5 --name redis \
--update-delay 10s \
--update-parallelism 2 \
--update-failure-action continue \
--rollback-monitor 20s \
--rollback-parallelism 2 \
--rollback-max-failure-ratio 0.2 \
redis:5
  • --update-delay:定義滾動更新的時間間隔;

  • --update-parallelism:定義并行更新的副本數量,默認為 1;

  • --update-failure-action:定義容器啟動失敗之后所執行的動作;

  • --rollback-monitor:定義回滾的監控時間;

  • --rollback-parallelism:定義并行回滾的副本數量;

  • --rollback-max-failure-ratio:任務失敗回滾比率,超過該比率執行回滾操作,0.2 表示 20%。

  然后通過以下命令實現服務的滾動更新。

docker service update --image redis:6 redis

如何進行Docker Swarm 集群環境搭建及彈性服務部署

  回滾服務,只能回滾到上一次操作的狀態,并不能連續回滾到指定操作。

docker service update --rollback redis

如何進行Docker Swarm 集群環境搭建及彈性服務部署

常用命令

docker swarm

命令說明
docker swarm init初始化集群
docker swarm join-token worker查看工作節點的 token
docker swarm join-token manager查看管理節點的 token
docker swarm join加入集群

docker node

命令說明
docker node ls查看集群所有節點
docker node ps查看當前節點所有任務
docker node rm 節點名稱|節點ID刪除節點(-f強制刪除)
docker node inspect 節點名稱|節點ID查看節點詳情
docker node demote 節點名稱|節點ID節點降級,由管理節點降級為工作節點
docker node promote 節點名稱|節點ID節點升級,由工作節點升級為管理節點
docker node update 節點名稱|節點ID更新節點

docker service

命令說明
docker service create創建服務
docker service ls查看所有服務
docker service inspect 服務名稱|服務ID查看服務詳情
docker service logs 服務名稱|服務ID查看服務日志
docker service rm 服務名稱|服務ID刪除服務(-f強制刪除)
docker service scale 服務名稱|服務ID=n設置服務數量
docker service update 服務名稱|服務ID更新服務

看完上述內容,你們掌握如何進行Docker Swarm 集群環境搭建及彈性服務部署的方法了嗎?如果還想學到更多技能或想了解更多相關內容,歡迎關注億速云行業資訊頻道,感謝各位的閱讀!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

舟曲县| 老河口市| 嵊泗县| 平邑县| 和田市| 克山县| 如皋市| 新竹县| 防城港市| 东乌珠穆沁旗| 河曲县| 烟台市| 武威市| 赤壁市| 拉孜县| 扶余县| 凭祥市| 石景山区| 永丰县| 古蔺县| 台东县| 富蕴县| 建宁县| 诏安县| 抚松县| 长子县| 广河县| 凤冈县| 防城港市| 民县| 杨浦区| 左权县| 东方市| 桂阳县| 辽源市| 蒲城县| 岱山县| 曲松县| 榆树市| 洪雅县| 高清|