-
Docker集群管理
-
Swarm基礎
Swarm在Docker1.12版本之前屬於一個獨立的項目,在Docker1.12版本發布之后,該項目合並到了Docker中,成為Docker的一個子命令,即Swarm集群模式。目前,Swarm是Docker社區提供的唯一的一個原生支持Docker集群管理的工具。它可以把多個Docker主機組成的系統轉換為單一的虛擬Docker主機, 使得容器可以組成跨主機的子網網絡。
在Docker1.12版本之前,Docker在集群管理上一直依靠第三方工具。以前的Docker服務自身只能在單台主機上進行操作, 官方並沒有真正意義上的集群管理方案。 直到Docker 1.12版的發布,Docker引擎在多主機 、多容器的集群管理上才有了進一步的改進和完善,該版本的Docker內嵌了Swarm mode集群管理模式。從Docker 1.13版開始,DockerSwarm又有了更豐富的功能,比如正式 支持DockerStack等。
原理如下圖所示,swarm 集群由管理節點(manager)和工作節點(work node)構成。
-
swarm mananger:負責整個集群的管理工作包括集群配置、服務管理等所有跟集群有關的工作。
-
work node:即圖中的 available node,主要負責運行相應的服務來執行任務(task)。
-
Docker Swarm命令
1.Swarm初始化docker swarm init
初始化集群的子命令docker swarm init
2.加入集群docker swarm join
-
管理添加節點的口令docker swarm join-token
swarm添加節點時需要管理節點生成一個口令,待添加的子節點需要憑借這個口令才能加入集群,這個子命令docker swarm join-token更加簡單,主要用於管理集群口令,該子命令只能用於管理節點。
--rotate表示持續輸出口令
-
離開集群docker swarm leave
docker swarm leave用於退出當前集群
-
解鎖集群docker swarm unlock
解鎖集群的命令docker swarm unlock,用於解除鎖定的swarm集群。
-
管理解鎖密鑰docker swarm unlock-key
docker swarm unlock-key這個命令的選項與docker swarm join-token一致
-
更新集群docker swarm update
-
-
Docker Node命令
-
docker node demote
將一個或多個節點從群集中的管理器降級。
-
docker node inspect
在一個或多個節點上顯示詳細信息
3.docker node ls
列出群中的節點
4.docker node promote
將一個或多個節點提升為群集中的管理器。
5.docker node ps
列出在一個或多個節點上運行的任務,默認為當前節點
6.docker node rm
從群中刪除一個或多個節點
7.docker node update
更新節點
-
-
Docker Stack命令
-
部署Docker棧docker stack deploy
-
查看所有棧docker stack ls
3.列出堆棧中的任務docker stack ps
4.移除一個或多個堆棧docker stack rm
5.列出堆棧中的服務docker stack services
-
-
Docker集群網絡
搭建一個Docker集群網絡,為了方便演示跨主機網絡,我們需要用到一個工具--Docker Machine,這個工具與Docker Compose,Docker Swarm一起稱為Docker三劍客。
安裝machine
base=https://github.com/docker/machine/releases/download/v0.16.2 &&curl -L $base/docker-machine-$(uname -s)-$(uname -m) >/tmp/docker-machine && mv /tmp/docker-machine /usr/local/bin/docker-machine &&
chmod +x /usr/local/bin/docker-machine
這是因為沒有安裝virtualbox虛擬機,如下,先設置yum源,生成緩存。
yum安裝virtualbox
在創建虛擬機的時候報錯
輸入/sbin/vboxconfig檢查配置,可以發現內核一些模塊未安裝,按照提示中的指引按照。
yum install gcc make perl
yum install kernel-devel-3.10.0-1160.31.1.e17.x86_64
如果你的宿主機上的軟件為vmware要勾選下圖選項
然后再到https://github.com/boot2docker/boot2docker/releases/
下載boot2docker.iso文件放到/root/.docker/machine/cache下。
首先使用docker machine創建一個虛擬機作為manager節點
目前兩台虛擬機是沒有聯系的,實際生產中是使用物理機或者是雲主機作為集群機器的,在這里使用的時machine創建的,還可以使用docker-machine ssh命令連接虛擬機。
用--listen-addr指定監聽的IP與端口,實際的Swarm命令格式如下:
docker swarm init --listen-addr <MANGER-IP>:<PORT>
上面在join命令中可以添加—listen-addr $WORKER1_IP:2377作為監聽設備,因為有時候可能會遇到把一個work節點提升為manager節點的可能,在這里就不需要了。
注意:在遇到雙網卡的時候。可以指定使用一個IP,不然可能會報錯。
初始化成功后。現在我們新建了一個有兩個節點的"集群",進入其中一個管理節點,使用Docker Node命令來查看節點信息:
現在每個節點都歸屬於swarm,並都處在待機狀態。Manager1是領導者,work1是工人。
我們繼續創建虛擬機manager2,worker2,worker3,現在共有五個虛擬機,使用docker-machine ls查看
注意manager2是作為manager的級別加入集群,需要獲取manager的token,如果是作為worker節點就需要獲取worker節點的token。如下
可以看到宿主機作為manager加入集群了,意味着在宿主機上就可以去管理集群了,不用再使用docker-machine ssh了。
可以看到在swarm上默認已經有了一個名為ingress的overlay網絡,默認在swarm里使用,我們新建一個overlay網絡。
使用docker-machine ssh manager1 docker pull nginx:alpine
可以看到nginx運行在worker1和manager2節點上。
首先使用machine進入manager2節點,然后使用docker exec -i命令進入容器中去ping運行在worker1的容器。
還可以在虛擬機ping另外虛擬機上的容器,不過延遲明顯變高。
-
現在訪問9000端口。自行設置密碼大於8位,然后連接本地環境即可,如下
左邊列表是資源欄,鏡像,容器,等都可以查看。功能還是可以的,可以查看swarm集群,遠程docker的資源,還可以拉取鏡像,一般的維護功能是夠的。