
解決叢集問題 k8s
官網位址:
https://docs.docker.com/engine/swarm/1.Swarm介紹
Swarm是Docker官方提供的一款叢集管理工具,其主要作用是把若幹台Docker主機抽象為一個整體,并且通過一個入口統一管理這些Docker主機上的各種Docker資源。Swarm和Kubernetes比較類似,但是更加輕,具有的功能也較kubernetes更少一些
管理節點
管理節點處理叢集管理任務:
- 維護叢集狀态
- 排程服務
- 服務群模式 HTTP API 端點
使用
Raft
實作,管理器維護整個 swarm 及其上運作的所有服務的一緻内部狀态。出于測試目的,可以使用單個管理器運作 swarm。如果單管理器群中的管理器出現故障,您的服務會繼續運作,但您需要建立一個新叢集來恢複。
為了利用 swarm 模式的容錯特性,Docker 建議您根據組織的高可用性要求實作奇數個節點。當您有多個管理器時,您可以在不停機的情況下從管理器節點的故障中恢複。
- 三個管理器的群體最多可以容忍一個管理器的損失。
- 一個五管理器群可以容忍最大同時丢失兩個管理器節點。
- 一個
管理器叢集最多可以容忍管理器的丢失N
。(N-1)/2
- Docker 建議一個群最多有七個管理器節點。
工作節點
工作節點也是 Docker 引擎的執行個體,其唯一目的是執行容器。Worker 節點不參與 Raft 分布式狀态,不做出排程決策,也不為 swarm 模式 HTTP API 提供服務。
您可以建立一個由一個管理器節點組成的群,但是如果沒有至少一個管理器節點,您就不能擁有一個工作節點。預設情況下,所有經理也是勞工。在單個管理器節點叢集中,您可以運作類似指令
docker service create
,排程程式将所有任務放在本地引擎上。
為防止排程程式将任務放置在多節點群中的管理器節點上,請将管理器節點的可用性設定為
Drain
。排程器在
Drain
mode 中優雅地停止節點上的任務并排程
Active
節點上的任務 。排程程式不會将新任務配置設定給具有
Drain
可用性的節點。
2.Swarm叢集搭建
環境準備
準備3個節點,通過vagrant新增加兩個節點
需要單獨指定hostname
config.vm.hostname="work01-node"
還有就是每個節點需要具備Docker環境
叢集環境搭建
1> 建立manager節點
進入manager節點,manager node也可以作為worker node提供服務
docker swarm init -advertise 192.168.56.10
注意觀察日志,拿到worker node加入manager node的資訊
docker swarm join --token SWMTKN-1-0a5ph4nehwdm9wzcmlbj2ckqqso38pkd238rprzwcoawabxtdq-arcpra6yzltedpafk3qyvv0y3 192.168.56.10:2377
2>進入兩個Worker
docker swarm join --token SWMTKN-1-0a5ph4nehwdm9wzcmlbj2ckqqso38pkd238rprzwcoawabxtdq-arcpra6yzltedpafk3qyvv0y3 192.168.56.10:2377
3>進入manager node 檢視叢集情況
docker node ls
4>node類型轉換
可以将worker提升成manager,進而保證manager的高可用
docker node promote worker01-node
docker node promote worker02-node
#降級可以用demote
docker node demote worker01-node
線上Swarm示範:
http://labs.play-with-docker.com通過Dock Hub 的賬号密碼登入即可,有效會話4個小時
3.Raft一緻性協定
Raft一緻性協定:保證manager節點半數存活叢集環境可用
一主兩從
還是參考上面的案例直接操作
我們停掉manager節點,那麼整個叢集環境是不可用的
我們将一個work節點提升等級
二主一從
除了上面的
promote
提升到 主的案例意外,我們還可用從新來搭叢集處理
我們可以在init後直接在 manager節點執行如下指令
docker swarm join-token manager
三主0從
停止其中一個整個叢集還是可用
但是停止掉兩個後就不可用使用了
4.Service
(1)建立一個tomcat的service
docker service create --name my-tomcat tomcat
(2)檢視目前swarm的service
docker service ls
(3)檢視service的啟動日志
docker service logs my-tomcat
(4)檢視service的詳情
docker service inspect my-tomcat
(5)檢視my-tomcat運作在哪個node上
docker service ps my-tomcat
日志
ID NAME IMAGE NODE DESIRED STATE CURRENT STATE ERROR PORTS
u6o4mz4tj396 my-tomcat.1 tomcat:latest worker01-node Running Running 3 minutes ago
(6)水準擴充service
docker service scale my-tomcat=3
docker service ls
docker service ps my-tomcat
日志
:可以發現,其他node上都運作了一個my-tomcat的service
[root@manager-node ~]# docker service ps my-tomcat
ID NAME IMAGE NODE DESIRED STATE CURRENT STATE ERROR PORTS
u6o4mz4tj396 my-tomcat.1 tomcat:latest worker01-node Running Running 8 minutes ago
v505wdu3fxqo my-tomcat.2 tomcat:latest manager-node Running Running 46 seconds ago
wpbsilp62sc0 my-tomcat.3 tomcat:latest worker02-node Running Running 49 seconds ago
此時到worker01-node上:docker ps,可以發現container的name和service名稱不一樣,這點要知道
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
bc4b9bb097b8 tomcat:latest "catalina.sh run" 10 minutes ago Up 10 minutes 8080/tcp my-tomcat.1.u6o4mz4tj3969a1p3mquagxok
(7)如果某個node上的my-tomcat挂掉了,這時候會自動擴充
[worker01-node]
docker rm -f containerid
[manager-node]
docker service ls
docker service ps my-tomcat
(8)删除service
docker service rm my-tomcat
5.overlay
Overlay 在網絡技術領域,指的是一種網絡架構上疊加的虛拟化技術模式,其大體架構是對基礎網絡不進行大規模修改的條件下,實作應用在網絡上的承載,并能與其它網絡業務分離,并且以基于IP的基礎網絡技術為主
VXLAN(Virtual eXtensible LAN)技術是目前最為主流的Overlay标準
6.WordPress實戰
1> 建立MySQL service
docker service create --name mysql --mount type=volume,source=v1,destination=/var/lib/mysql --env MYSQL_ROOT_PASSWORD=examplepass --env MYSQL_DATABASE=db_wordpress --network my-overlay-net mysql:5.6
2>建立WordPress的Service
docker service create --name wordpress --env WORDPRESS_DB_USER=root --env WORDPRESS_DB_PASSWORD=examplepass --env WORDPRESS_DB_HOST=mysql:3306 --env WORDPRESS_DB_NAME=db_wordpress -p 8080:80 --network my-overlay-net wordpress
3>通路測試
4>檢視my-overlay-net
搞定~