Swarm 搭建Docker集群

2021-08-13 05:43:41 字數 3550 閱讀 2670

docker自誕生以來,其容器特性以及映象特性給devops愛好者帶來了諸多方便。然而在很長的一段時間內,docker只能在單host上執行,其跨host的部署、執行與管理能力頗受外界詬病。跨host能力的薄弱,直接導致docker容器與host的緊耦合,這種情況下,docker容器的靈活性很難令人滿意,容器的遷移、分組等都成為很難實現的功能點。

swarm是docker公司在2023年12月初新發布的容器管理工具。和swarm一起發布的docker管理工具還有machine以及compose。

swarm是一套較為簡單的工具,用以管理docker集群,使得docker集群暴露給使用者時相當於乙個虛擬的整體。swarm使用標準的docker api介面作為其前端訪問入口,換言之,各種形式的docker client(dockerclient in go, docker_py, docker等)均可以直接與swarm通訊。swarm幾乎全部用go語言來完成開發,並且還處於乙個alpha版本,目前在github上發布的版本僅有v0.1.0-rc1。然而swarm的發展十分快速,功能和特性的變更迭代還非常頻繁。因此,可以說swarm還不推薦被用於生產環境中,但可以肯定的是swarm是一項很有前途的技術。

swarm是通過監聽2375埠進行通訊的,所以在使用swarm進行集群管理之前,需要設定一下2375埠的監聽。這裡有兩種方法,一種是通過修改docker配置檔案方式,另一種是通過乙個輕量級的**容器進行監聽。

由於我是使用centos7安裝的docker,所以下面的配置是適用於centos7的。

開啟配置檔案/etc/sysconfig/docker

vim /etc/sysconfig/docker
修改配置項options中的值,若options中沒有值,則直接新增-h tcp: -h unix:///var/run/docker.sock,否則在已有引數後面新增,比如下面這樣:

options='--selinux-enabled --log-driver=journald 

--signature-verification=false

-htcp: -h unix:/

//var

/run/docker.sock'

修改完之後儲存檔案,然後重啟docker服務

systemctl restart docker
注意:需要對所有要加入集群的docker節點都進行上面的修改配置檔案的操作。

預設情況下,docker引擎只偵聽套接字。 我們可以重新配置引擎以使用tls,或者您可以使用**容器。 這是乙個非常輕量級的容器,它只是將請求從tcp**到docker監聽的unix套接字

docker pull docker.io/shipyard/docker-proxy
然後啟動容器:

docker run -ti -d -p 2375:2375 \

--restart=always \

--hostname=$hostname \

--name shipyard-proxy \

-v /var/run/docker.sock:/var/run/docker.sock \

-e port=2375 \

docker.io/shipyard/docker-proxy:latest

注意:該**服務容器也需要在每個要加入集群的docker節點上啟動,同時要保證該容器的正常執行,如果容器停止則無法發現節點。

docker pull docker.io/swarm
在任意的docker節點建立乙個全世界唯一的token(集群id),記住這個token後面需要用到。(這裡用的發現服務是dockhub內建的,當然還有其他的比如etcd、consul等。)

--rm swarm create

rw4d3ac32aa6a86b341e3asd69e2cd0b

執行上面的命令之後,會生成乙個token。

docker run -ti

-d-p

2376:2375

\--restart=always \

--name shipyard-swarm

-manager

\ docker.io/swarm:latest \

manage --host tcp: \

token://rw4d3ac32aa6a86b341e3asd69e2cd0b

swarn manager只需要啟動乙個,所以可選取乙個docker節點進行啟動,我這裡是在我這塊的主機10.0.11.150上啟動的。

啟動swarm agent,將當前docker節點加入到集群中,swarm agent需要在每乙個要加入到集群中的docker節點上啟動。

docker run -ti -d \

--restart=always \

--name shipyard-swarm-agent \

docker.io/swarm:latest \

join --addr [docker node ip]:2375 \

token://rw4d3ac32aa6a86b341e3asd69e2cd0b

注:上面這條命令中的[docker node ip]項需要更換為要加入集群的docker節點的真實ip。

可以使用命令檢視docker節點情況(任意docker節點上都可以執行):

docker run --rm swarm list token://rw4d3ac32aa6a86b341e3asd69e2cd0b
可以使用命令檢視docker集群的詳情(可在任意docker節點上執行,ip位址是裝了swarm master主機的ip):

docker -h 10.0.11.150:2376

info

Docker系列之swarm集群搭建

學習docker很久了,今天分享一下docker的swarm集群的搭建過程很簡單 首先第一步是 每台機器上面都要安裝docker 本人使用的是centos7作業系統,使用3太虛擬機器,3太虛擬機器必須網路互通 廢話 docker早在1.12版本就已經支援原生的swarm集群搭建了不用再用第三方etc...

Docker系列之swarm集群搭建

學習docker很久了,今天分享一下docker的swarm集群的搭建過程很簡單 首先第一步是 每台機器上面都要安裝docker 本人使用的是centos7作業系統,使用3太虛擬機器,3太虛擬機器必須網路互通 廢話 docker早在1.12版本就已經支援原生的swarm集群搭建了不用再用第三方etc...

docker入門實戰(四) swarm 集群

swarm集群就是執行docker的一組機器相連成乙個集群。這些機器可以是物理機也可以是虛擬機器。在加入集群後,這些機器被稱作是是集群中的乙個節點。swarm managers 可以使用幾種策略來執行容器 1 emptiest node 安排容器執行在利用率最低的機器上 2 global 這種情況下...