我算是一個極保守的運維, 對於新技術,我會去學習,去研究,但卻很少去使用。運維是一個不斷需要學習的職位,但卻不是一個可以隨意折騰的工種。新的技術,新的方案可能會對我們的工作,對我們的架構有更好的幫助,但我們使用時候,更應該謹慎的實施,我們需要仔細的考慮一些問題,比如現有架構或技術是否有升級的必要;運維人員對新技術的掌握程度;升級帶來多大的風險;在一切都是Yes的情況下,我們又要敢於承擔責任,大膽的實施。
Docker Swarm 包涵兩個集群功能和微服務應用編排引擎兩方面。集群即指由多個Docker節點組成;編排引擎則指swarm自身提供豐富的API來管理微服務。在應用層面來說,簡單來講即是使用命令(api)來部署和管理微服務的swarm集群。
前期你需要注意什麼
1. 服務器將磁盤分為數據盤與系統盤,將Docker swarm 的數據目錄修改為數據盤,嚴禁放入系統盤,否則會造成節點假死
2. 在各個節點之間開放Docker swarm 內部使用端口,否則會造成集群之間通信失敗。即以下端口
- 2377/tcp:用於客戶端與 Swarm 進行安全通信。
- 7946/tcp 與 7946/udp:用於控制面 gossip 分發。
- 4789/udp:用於基於 VXLAN 的覆蓋網絡。
3. 為了安全考慮,最好不要使用Root用戶操作,將普通用戶加入docker組即可。
4. Docker Swarm 使用Raft共識算法來實現管理節點的HA, 所以管理節點需要部署奇數個,建議3或5個。請自行查看Raft共識算法的一些知識。
5. Docker Swarm管理命令只可以在管理節點執行,工作節點不可使用。
Docker Swarm集群操作
切換到Swarm模式,並將此服務器設置為第一個管理節點
[xcc@xcc ~]$ docker swarm init
查看節點序列
[xcc@xcc ~]$ docker swarm join --token xxxxxxx xx.xx.xx.xx:2377
查看加入集群的token, worker為使加入節點作為工作節點, manager為使加入節點作為管理節點
[xcc@xcc ~]$ docker swarm join-token worker|manager
如:
[xcc@xcc ~]$ docker swarm join --token xxxxxxx xx.xx.xx.xx:2377
將節點加入集群
[xcc@xcc ~]$ docker swarm join --token xxxxxxx xx.xx.xx.xx:2377
如
docker swarm join \\
--token SWMTKN-1-5ibimzdof5ez8ej6sdudinmm8s79urmm6h28x1pnu02rasiyxa-1j9bsv6feebnumq386sngy647 \\
192.168.0.103:2377
離開(退出)此集群
離開(退出)此集群[xcc@xcc ~]$ docker swarm leave
DockerSwarm 服務操作
服務是Docker Swarm中最小的調試單元, 即使用docker service create創建的單元,它是基於容器進行封裝,被稱為副本或任務,服務中包括擴縮容,滾動升級及回滾等特性。
創建一個新的服務
[xcc@xcc ~]$ docker service create
如
[xcc@xcc ~]$ docker service create --name test_1-p 8080:8080 --replicas 5 nginx
即創建一個有5個副本,名稱為test_1的Nginx集群,集群將內部8080端口映射為外部此端口。
注:
- 此命令有豐富 的參數,如: --network 指定網絡
- Docker swarm會輪詢檢查各個服務,如果狀態不一致,則其會自動調整,如某個副本退出,則swarm會自動啟動一個副本,以達到配置的要求
- 默認為副本模式,也可使用全局模式,此模式下一個docker節點固定的只啟動一個副本
查看所有的服務
[xcc@xcc ~]$ docker service ls
查看服務副本列表及各副本的狀態。
[xcc@xcc ~]$ docker service ps test_1
查看服務詳細的信息
[xcc@xcc ~]$ docker service inspect --pretty test_1
通過調整最後的數字,對服務進行擴容或者縮容
[xcc@xcc ~]$ docker service scale test_1=10
滾動升級
[xcc@xcc ~]$ docker service update --imageredis test_1
回退到上一個版本
命令: docker service logstest_1
查看test_1的日誌
[xcc@xcc ~]$ docker service logstest_1
刪除test_1服務
[xcc@xcc ~]$ docker service rm test_1
閱讀更多 感悟運維 的文章