原創(chuàng)文章,歡迎轉載。轉載請注明:轉載自IT人故事會,謝謝仗颈!
原文鏈接地址:「走進k8s」Docker三劍客之Docker Swarm(九)
上次說了docker machine和常用的命令。docker machine就是在遠程機器上安裝docker的椎例,雖然實際線上環(huán)境很少使用挨决,在實驗環(huán)境中docker machine還是非常重要的。本次開始說三劍客中的最后一個docker warm订歪。
(一)Docker Swarm介紹
使用SwarmKit構建的 Docker 引擎內置(原生)的集群管理和編排工具脖祈。內置在docker之中的,原生的docker集群編排工具刷晋,docker swarm非常的重要本身也是編排工具和后面要提到的Mesos盖高,k8s慎陵,跟k8s是競爭的關系,但是k8s發(fā)展到現(xiàn)在已經完完全全給其他競爭對手完全的甩開了喻奥。這個系列主要說的k8s席纽,但是docker swarm的使用方法也是一定要提的。
- ①Swarm的架構
1.節(jié)點下面有角色:Worker映凳,Manager
2.Manager 是整個warm集群的大腦,為了避免單點的故障邮破,我們的大腦至少有2個诈豌,狀態(tài)的同步通過raft協(xié)議進行同步。raft協(xié)議可以確保多個Manager之前是同步的抒和。
3.管理節(jié)點用于Swarm集群的管理矫渔,docker swarm命令基本只能在管理節(jié)點執(zhí)行(節(jié)點退出集群命令docker swarm leave可以在工作節(jié)點執(zhí)行)。
4.Manager節(jié)點的也可以是worker節(jié)點摧莽。一個主機可以既是Manager也是worker節(jié)點庙洼。在實際的生產中,為了凸顯manager的調度性能镊辕,manager上不跑worker節(jié)點油够。
- ②Swarm的服務和任務
1.任務是最小的單元,就是一個節(jié)點運行的容器征懈。下圖的node石咬。
2.服務是指一組任務,整個生成的3個nginx被稱為服務卖哎。
- ③如何部署
客戶端的發(fā)起docker命令鬼悠,兩種方式
- 直接ssh到manager節(jié)點,執(zhí)行docker命令亏娜。
- 通過遠程訪問的方式焕窝,通過Remote API調用manager上的docker命令,我們這張圖畫的就是第二種方式维贺。
docker Client 在manager節(jié)點的外邊它掂,假如執(zhí)行了docker service create,先會經過docker Deamon接受這條命令溯泣,傳給Scheduler模塊群发,Scheduler模塊主要實現(xiàn)調度的功能,負責選擇出來最優(yōu)的節(jié)點发乔,里面包含了2個子模塊熟妓,F(xiàn)iter 和Strategy,F(xiàn)iter很明顯是過濾節(jié)點栏尚,用來找出滿足條件的節(jié)點(資源足夠多起愈,節(jié)點正常的),Strategy是過濾出來后選擇出最優(yōu)的節(jié)點(對比選擇資源剩余最多的節(jié)點,或者找到資源剩余最少的節(jié)點)抬虽,當然Fiter 和Strategy都是用戶可以單獨定制的官觅,中間的Cluster是抽象的worker節(jié)點集群,包含了Swarm節(jié)點里面每個節(jié)點的信息阐污,右邊的Discovery是信息維護的模塊休涤,比如Label Health。Cluster最終調用容器的api笛辟,完成容器啟動的流程功氨。
(二)集群演示
- ①主機信息
系統(tǒng)類型 | IP地址 | 節(jié)點角色 | CPU | Memory | Hostname |
---|---|---|---|---|---|
Centos7 | 192.168.66.100 | Manager | 2 | 2G | Nexus |
Centos7 | 192.168.66.101 | Nexus | 2 | 2G | Nexus |
Centos7 | 192.168.66.102 | Nexus | 2 | 2G | Nexus |
- ② manager節(jié)點初始化操作(192.168.66.100)
添加初始化init服務,默認是manager節(jié)點
docker swarm init --advertise-addr 192.168.66.100
- ③ 添加worker節(jié)點(192.168.66.101)
上邊manager初始化的時候手幢,有對應的worker命令捷凄。
docker swarm join --token SWMTKN-1-3gfv7tpeznhwsl7v3y0n9f5g7547lgzo7fjpv0pm5s6uzvdlgg-b0mlie5vhp2ms1xg1tyd7zwc2 192.168.66.100:2377
- ④ 添加worker節(jié)點(192.168.66.102)
上邊manager初始化的時候,有對應的worker命令围来。
docker swarm join --token SWMTKN-1-3gfv7tpeznhwsl7v3y0n9f5g7547lgzo7fjpv0pm5s6uzvdlgg-b0mlie5vhp2ms1xg1tyd7zwc2 192.168.66.100:2377
- ⑤ manager查看節(jié)點
docker node ls
- ⑥ 創(chuàng)建service服務
replicas 3個節(jié)點
docker service create --replicas 3 -p 80:80 --name nginx nginx
docker service ls
docker service ps
- ⑥ 刪除service服務
docker service rm nginx
(二)docker swarm 運行docker-compose文件
- ①stack
Docker Stack功能包含在Docker引擎中跺涤。你不需要安裝額外的包來使用它,docker stacks 只是swarm mode的一部分监透。它支持相同類型的compose文件桶错,但實際的處理是發(fā)生在Docker Engine(docker引擎)內部的Go代碼中。 在使用堆棧命令之前胀蛮,還必須創(chuàng)建一個單機版的“swarm”牛曹,但這并不是什么大問題。
- ②測試docker-compose文件
mkdir labs
cd labs
vi docker-compose.yml
version: "3"
services:
redis:
image: redis:alpine
ports:
- "6379"
networks:
- frontend
deploy:
replicas: 2
update_config:
parallelism: 2
delay: 10s
restart_policy:
condition: on-failure
db:
image: postgres:9.4
volumes:
- db-data:/var/lib/postgresql/data
networks:
- backend
deploy:
placement:
constraints: [node.role == manager]
vote:
image: dockersamples/examplevotingapp_vote:before
ports:
- 5000:80
networks:
- frontend
depends_on:
- redis
deploy:
replicas: 2
update_config:
parallelism: 2
restart_policy:
condition: on-failure
result:
image: dockersamples/examplevotingapp_result:before
ports:
- 5001:80
networks:
- backend
depends_on:
- db
deploy:
replicas: 1
update_config:
parallelism: 2
delay: 10s
restart_policy:
condition: on-failure
worker:
image: dockersamples/examplevotingapp_worker
networks:
- frontend
- backend
deploy:
mode: replicated
replicas: 1
labels: [APP=VOTING]
restart_policy:
condition: on-failure
delay: 10s
max_attempts: 3
window: 120s
placement:
constraints: [node.role == manager]
visualizer:
image: dockersamples/visualizer:stable
ports:
- "8080:8080"
stop_grace_period: 1m30s
volumes:
- "/var/run/docker.sock:/var/run/docker.sock"
deploy:
placement:
constraints: [node.role == manager]
networks:
frontend:
backend:
volumes:
db-data:
- ③運行 docker-compose.yml
docker stack deploy example --compose-file=docker-compose.yml
docker stack ls
docker stack services example
- 打開網頁
http:/192.168.66.100:5000/
http://192.168.66.100:5001/
http://192.168.66.100:8080/
- 擴展vote
docker service scale example_vote=4
- 刪除stack
docker stack rm example
PS:這就是我們的服務編排醇滥,都是在三個節(jié)點黎比,所謂的編排就是將多個節(jié)點變成一個節(jié)點來使用,接下來講的k8s要把docker swarm功能要強大很多鸳玩,當然也要復雜很多阅虫。docker的基本命令一樣掌握好!后面說k8s才不會那么吃力不跟,遇到問題了才知道如何解決颓帝。