微服務實戰之春雲與刀客(四)——dockerswarm叢集實戰
概述
docker swarm 是一個非常簡單的docker 原生叢集部署環境。在docker swarm 出來之前,要搭建一個docker 叢集需要複雜的網路運維和配置能力,而docker swarm 把這一切都解放了。
簡單來說呢,docker swarm把多個docker節點連線成一個叢集,可以認為是一個可以互通的獨立區域網,通過服務的方式管理應用的生命週期。例如有一個MyService的微服務,在單機的模式需要你分別在兩個節點上啟動相應的docker 容器,而docker swarm直接就有“服務”的概念,只要在某一管理節點上執行建立服務命令,同時指定節點數為2,則叢集自動找兩個節點分別執行你的MyService微服務。當兩個節點扛不住的時候,你要增加到4個節點,則只需要執行一個擴充套件命令就行。
docker 安裝
本文基於centos 版本7.2搭建的docker 叢集,用的是17.09版本的docker。
節點有192.168.0.37和192.168.0.38 兩個節點,分別為管理節點和工作節點。工作節點可以執行服務,管理節點也可以執行服務,但比工作節點多了“管理控制”的功能,即可以建立服務。為了避免腦裂現象,管理節點數量為1,3,5奇數。
分別在0.37和0.38上安裝docker。
介質下載
https://download.docker.com/linux/centos/7/x86_64/stable/Packages/
wget https://download.docker.com/linux/centos/7/x86_64/stable/Packages/docker-ce-17.09.0.ce-1.el7.centos.x86_64.rpm
安裝
yum install docker-ce-17.09.0.ce-1.el7.centos.x86_64.rpm
啟動
systemctl start docker
開機啟動
systemctl enable docker
或者
chkconfig docker on
hostname
vi /etc/hosts 把兩個節點的host和ip加上。
搭建和使用 docker hub私有倉庫
搭建docker hub私有倉庫(0.37)
倉庫是用來存放docker映象的,在建立和啟動服務的時候,多個節點需要從倉庫中拉取映象。
sudo docker run -d -p 5000:5000 -v /root/hub:/var/lib/registry --restart=always --name registry2 registry:2
預設情況下,會將倉庫存放於容器內的/var/lib/registry目錄下,這樣如果容器被刪除,則存放於容器中的映象也會丟失,所以我們一般情況下會指定本地一個目錄掛載。
https://github.com/docker/docker.github.io/blob/master/registry/index.md
配置拉取映象認證(0.37/0.38)
客戶端訪問docker hub拉取映象,預設走https的,會報https://192.168.0.37:5000映象沒找到或不存在(No such image: 192.168.0.37:5000/cehome/operation-service:),解決方式一種是通過nginx 新增https代理,我們採用是另一種是非安全方式:
- 開啟
- /usr/lib/systemd/system/docker.service
- 新增(ExecStart=/usr/bin/dockerd 可能已經有,只需要新增insecure引數)
ExecStart=/usr/bin/dockerd –insecure-registry 192.168.0.37:5000 - 過載
systemctl daemon-reload - 重啟
service docker restart
叢集環境搭建
參考:
https://docs.docker.com/engine/swarm/swarm-mode/
https://docs.docker.com/engine/reference/commandline/service/
https://docs.docker.com/engine/swarm/how-swarm-mode-works/nodes/
https://docs.docker.com/engine/swarm/how-swarm-mode-works/services/#replicated-and-global-services
關閉防火牆(0.37/0.38)
需要互相訪問2377等埠(為方便,直接關閉防火牆,否則可能會有不可意料的事情)
- 檢視
systemctl is-enabled firewalld
- 關閉
systemctl stop firewalld.service
- 禁用服務
systemctl disable firewalld
初始化管理節點(0.37)
docker swarm init –advertise-addr 192.168.0.37
( 多ip的情況:docker swarm init –advertise-addr ,一般要加上,否則會有網路問題)
新增其它節點前檢視token(0.37)
新增其它節點到叢集,必須先在管理節點執行如下命令,它會列印出在其它節點將要執行的包含token的完整指令碼。
1)檢視如何新增work節點
docker swarm join-token worker
2)檢視如何新增manager節點
docker swarm join-token manager
新增work節點(0.38)
通過上面的命令可以查出執行的指令碼,然後拷貝到0.38並執行(即來源於0.37上面執行docker swarm join-token worker的列印結果),執行後0.38就加入了叢集。
docker swarm join
–token SWMTKN-1-3jcd5cjgwy8ct1gfyqqy8oqnokz4jjaul7el97h77qii4e6zw3-1vrjlin1bl5k9whzc4fulqfh2 192.168.0.37:2377
檢視節點(0.37)
必須在管理節點才能執行:
docker node ls
建立overlay網路
為什麼需要overlay 網路?保證多臺機器不同容器之間通訊!
docker network create –attachable –driver overlay tiejia
–attachable 引數為了相容單機的容器可以加入此網路。
tiejia是網路名稱。
管理節點資訊的備份與恢復
由於目前是單管理節點,最好是備份資訊,主要步驟是停止docker,備份目錄/var/lib/docker/swarm/
參考:https://docs.docker.com/engine/swarm/admin_guide/#back-up-the-swarm
移除節點的命令(這裡只是介紹,不要執行)
當你節點不需要的時候可以從叢集剝離,
docker swarm leave -f
例子:部署一個nginx 服務
在manager節點0.37上部署nginx服務,服務數量為3個,公開指定埠是8080對映容器80,使用nginx映象。這裡直接會從官網下載nginx映象,上面部署的私有倉庫還用不上。
docker service create --replicas 3 --name nginx --publish 8080:80 nginx
通過 docker service ps nginx 命令檢視服務分佈情況。
相關文章
- 【轉】微服務實戰微服務
- .NET Core+MongoDB叢集搭建與實戰MongoDB
- SpringCloud微服務實戰——搭建企業級開發框架(三十五):SpringCloud + Docker + k8s實現微服務叢集打包部署-叢集環境部署SpringGCCloud微服務框架DockerK8S
- spring cloud 微服務實戰SpringCloud微服務
- KubeSphere 最佳實戰:Kubernetes 部署叢集模式 Nacos 實戰指南模式
- SpingCloud Alibaba實戰(1:微服務與SpringCloud Alibaba)GCCloud微服務Spring
- 微服務過載保護原理與實戰微服務
- 微服務實戰系列(四)-註冊中心springcloud alibaba nacos微服務SpringGCCloud
- go-zero微服務實戰系列(四、CRUD熱身)Go微服務
- 安裝Greenplum 5.2 叢集實戰
- KubeSphere 部署 Kafka 叢集實戰指南Kafka
- 【Redis叢集實戰】Redis Cluster 部署Redis
- Jenkins叢集下的pipeline實戰Jenkins
- Golang 微服務優化實戰Golang微服務優化
- Spring Cloud Alibaba微服務實戰SpringCloud微服務
- go-zero微服務實戰系列(四、CRUD熱熱身)Go微服務
- 部署rabbitMQ映象叢集實戰測試MQ
- .Net微服務實戰之DevOps篇微服務dev
- .Net微服務實戰之CI/CD微服務
- Go+MongoDB的微服務實戰MongoDB微服務
- Go-kratos 框架商城微服務實戰之使用者服務 (四)Go框架微服務
- SpringCloud微服務實戰——搭建企業級開發框架(三十四):SpringCloud + Docker + k8s實現微服務叢集打包部署-Maven打包配置SpringGCCloud微服務框架DockerK8SMaven
- Nginx 高階篇(十一)叢集搭建實戰Nginx
- 進階的Redis之雜湊分片原理與叢集實戰Redis
- SpringCloud微服務架構開發實戰SpringGCCloud微服務架構
- Spring Cloud微服務基礎元件實戰SpringCloud微服務元件
- 「實戰篇」開源專案docker化運維部署-搭建mysql叢集(四)Docker運維MySql
- Kubernetes實戰:高可用叢集的搭建和部署
- 搞懂分散式技術5:Zookeeper的配置與叢集管理實戰分散式
- 在滴滴雲 DC2 雲伺服器上搭建 ZooKeeper 叢集實戰(一)伺服器
- 微服務實戰(七):落地微服務架構到直銷系統(實現命令與命令處理器)微服務架構
- 微服務實戰系列(五)-註冊中心Eureka與nacos區別微服務
- SpringCloud Gateway微服務閘道器實戰與原始碼分析-上SpringGCCloudGateway微服務原始碼
- Spring Cloud 微服務實戰詳細筆記SpringCloud微服務筆記
- .Net微服務實戰之負載均衡(上)微服務負載
- 微服務閘道器實戰——Spring Cloud Gateway微服務SpringCloudGateway
- .Net微服務實戰之可觀測性微服務
- 從程式碼到部署微服務實戰(一)微服務