一.swam簡介
Swram是Docker公司推出的官方容器集羣平臺,基於go語言實現,代碼開源在 https://github.com/docker/swarm .2016年2月對架構進行重新設計,推出了v2版本,支持超過1千個節點。作爲容器集羣管理器,Swarm最大的優勢之一就是100%支持標準的Docker API及工具(如Compose,docker-py等),Docker本身就可以很好地與Swarm進行集成。
Manager:接收客戶端服務定義,將任務發送到agnet節點,維護集羣期望狀態和集羣管理功能以及leader選舉。默認情況下manager節點也會運行任務,也可以配置只做管理任務。
agent:接收並執行從管理節點分配的任務,並報告任務當前的狀態,以便Manager節點維護每個服務期望狀態。
二.Swam管理集羣
1.部署集羣
1.清理實驗環境
刪除server1、server2的容器
2.爲server3安裝docker(server1、server2已經安裝好了)
[root@server1 ~]# scp -r docker server3:
[root@server3 ~]# ls
docker
[root@server3 ~]# cd docker/
[root@server3 docker]# ls
container-selinux-2.21-1.el7.noarch.rpm
docker-ce-18.06.1.ce-3.el7.x86_64.rpm
libsemanage-2.5-8.el7.x86_64.rpm
libsemanage-python-2.5-8.el7.x86_64.rpm
pigz-2.3.4-1.el7.x86_64.rpm
policycoreutils-2.5-17.1.el7.x86_64.rpm
policycoreutils-python-2.5-17.1.el7.x86_64.rpm
repodata
[root@server3 docker]# yum install *.rpm -y
3.打開server3的docker服務
[root@server3 docker]# systemctl start docker.service
4.初始化server1(管理節點)的swarm集羣
[root@server1 ~]# docker swarm init
5.查看server1的橋接,和網絡信息
[root@server1 ~]# yum install bridge-utils.x86_64 -y ##提供brctl命令
[root@server1 ~]# brctl show
[root@server1 ~]# docker network ls
6.server2、server3加入集羣
[root@server2 docker]# docker swarm join --token SWMTKN-1-5m3v8gviqk7r5e1zs9h8vsr16shhti2mp1o5qa23i7tgml08ut-bqrt2diawswa860qqmabblw4x 172.25.16.1:2377
[root@server2 docker]# docker swarm join --token SWMTKN-1-5m3v8gviqk7r5e1zs9h8vsr16shhti2mp1o5qa23i7tgml08ut-bqrt2diawswa860qqmabblw4x 172.25.16.1:2377
7.在管理節點查看到所有節點信息和狀態
2.部署應用
1.server1中創建網絡webnet,用於容器間通信。
[root@server1 ~]# docker service create --name web --network webnet --publish 80:80 --replicas 3 nginx:1.16
##-replicas 3代表集羣的個數爲3;nginx後面要帶版本號,默認是laster(可以修改標籤)
image nginx:1.16 could not be accessed on a registry to record
its digest. Each node will access nginx:1.16 independently,
possibly leading to different nodes running different
versions of the image.
qchyxe0yjm7005e8rb2l5f9fz
overall progress: 3 out of 3 tasks
1/3: running
2/3: running
3/3: running
verify: Service converged
[root@server1 ~]#
2.查看服務列表
[root@server1 ~]# docker service ls
[root@server1 ~]# docker service ps web
4.給server3加載nginx鏡像
5.擴容(增加到六個負載)
[root@server1 ~]# docker service scale web=6
web scaled to 6
overall progress: 6 out of 6 tasks
1/6: running
2/6: running
3/6: running
4/6: running
5/6: running
6/6: running
verify: Service converged
6.縮減到3個(夠用就行)
[root@server1 ~]# docker service scale web=3
web scaled to 3
overall progress: 3 out of 3 tasks
1/3: running
2/3: running
3/3: running
verify: Service converged
此時每個主機開啓一個nginx服務
7.在三個虛擬機上編寫nginx發佈默認文件,並cp到容器內nginx的html下
測試:
物理機中訪問三臺虛擬機,成功訪問並實現輪詢
[root@foundation60 ~]# for i in {1..10};do curl 172.25.16.2/index.html;done
[root@foundation60 ~]# for i in {1..10};do curl 172.25.16.2/index.html;done
[root@foundation60 ~]# for i in {1..10};do curl 172.25.16.3/index.html;done
3.部署監控
1.在每個節點上導入visualizer.tar鏡像
[root@server1 ~]# docker load -i visualizer.tar
[root@server2 ~]# docker load -i visualizer.tar
[root@server3 ~]# docker load -i visualizer.tar
2.創建swarm的監控容器,使監控和docker連接起來
[root@server1 ~]# docker service create --name=viz --publish=8080:8080/tcp --constraint=node.role==manager --mount=type=bind,src=/var/run/docker.sock,dst=/var/run/docker.sock dockersamples/visualizer
3.查看容器viz和8080端口開啓情況
測試:
瀏覽器輸入:172.25.16.1:8080