『高階篇』docker之DockerSwarm的叢集環境搭建(28)
上次瞭解了docker Swarm,這次一起動手操作,搭建swarm的叢集環境,一起測試下三種環境下的服務發現和負載均衡,一個自定義下的overlay下的網路發現,一個Ingress下的服務發現,一個是Ingress+link下的,跟上次Mesos一樣我們先建立三臺服務虛擬機器。 原始碼:
server01
docker執行狀態,切換到root使用者
docker version
預設情況下network的結構
docker network ls
檢視ip地址
ifconfig
設定manager,初始化manager節點,新增一個work在swarm上,執行下面的命令可以新增work,加入到這個manage中。
docker swarm init --advertise-addr 192.168.66.101
server02
執行新增到manager的命令。
server03
執行新增到manager的命令。
在server01中添加了server02 和server03的work後,檢視網路
之前是隻有三個,一個bridge,一個host,一個none;多了個docker_gwbridge,一個ingress。
ingress的overlay網路,這個網路需要藉助docker-gwbridge這個網橋進行連線。如果是
docker network ls
docker swarm的如何高可用
目前的manager只有一個,如果manager節點掛了,這個叢集也就掛了。docker swarm 有高可用的狀態,就是將server02 和server03 ,manager節點本身也可以提供服務執行的狀態,即便我們三個節點都是manager也是可以執行服務的。現在把三個節點都變成manager節點試一下。
docker node ls
升級server02成為manager。變成了Reachable,這個跟zookeeper的原理是一樣的,當一個leader掛了之後,通過選取可以產生一個新的leader。
docker node promote docker-swarm-02 docker node promote docker-swarm-03
PS:以上就完成高可用的docker swarm的叢集環境,其實真心比其他的簡單。
測試叢集環境
- 小的映象測試
建立一個小的映象,完成ping www.baidu.com
docker service create --name test1 alpine ping www.baidu.com docker service ls
“` 檢視日誌
docker service logs test1
<pre><code class="">
* nginx的環境測試
“` bash
docker service create –name nginx nginx
docker service ls
曾經有老鐵問我,如果是容器建立了需要修改建立時候的配置怎麼辦,我告訴他想給當前容器做個tag打成一個映象A,然後通過映象A,生成新的一個新的容器在run裡增加你的配置,記住前提是要把原來的容器刪除。
對於docker swarm中的service 難道也需要刪除?其實不需要直接通過docker service update來完成。
docker service ls docker service update --publish-add 8080:80 nginx docker service ls
現在的nginx 太少了只有1個,如果掛了,還要打電話讓人解決。其實還是有辦法的。多起幾個。可以多等一會,時間就不緊急了,吃了飯再過去。
docker service scale nginx=3 docker service ls
- 預設使用的Ingress下的overlay網路,兩個service之前是無法通過service的名稱進行訪問的。可以試試。
自定義網路新增到docker swarm中。
- 刪除剛才建立nginx 和test1
docker service rm nginx test1
- 建立網路
docker network create -d overlay idig8-overlay
-
建立一個service指定網路
>nginx
docker service create --network idig8-overlay --name nginx -p 8080:80 nginx
alpine
docker service create --network idig8-overlay --name alpine alpine ping www.baidu.com
-
檢視alpine所在的機器,進入容器,ping nginx
>檢視是在server02這臺機器上。
docker service ps alpine
進入server02機器,ping 容器名稱是nginx的 發現可以ping通
docker ps docker exec -it 387dd735de74 sh ping nginx
PS:當前的網路Ingress,容器之間的訪問方式可以通過名字訪問。在自定義的網路下swarm每個service,都建立一個dnsadress,一定要是自定義的overlay的。
-
dnsrr的方式
>描述是引數不對,在dnsrr下不能開放埠的,他們之間是衝突的。dnsrr是給只通過名字訪問。如果不加入overlay的網路它就是獨立的。
docker service create --name nginx-b --endpoint-mode dnsrr -p8090:80 nginx
如果想dnsrr網路可以被訪問,可以針對這個service增加overlay的網路
docker service updata --network-add idig8-overlay nginx-b
-
docker stack
>單機模式下,我們可以使用 Docker Compose 來編排多個服務,而在Docker Swarm 通過 Docker Stack 我們只需對已有的 docker-compose.yml 配置檔案稍加改造就可以完成 Docker 叢集環境下的多服務編排。
version: "3.4" services: alpine: image: alpine command: - "ping" - "www.baidu.com" networks: - "idig8-overlay" deploy: replicas: 2 restart_policy: condition: on-failure resources: limits: cpus: "0.1" memory: 50M depends_on: - nginx nginx: image: nginx networks: - "idig8-overlay" ports: - "8080:80" networks: idig8-overlay: external: true
檢視stack的命令,上邊走的是vip負載均衡的方式而不是dnsrr的方式。
docker stack ls # -c 檔名 組名 docker stack deploy -c service.ymltest
PS:dockerSwarm的服務發現,負載均衡。
ofollow,noindex" target="_blank" href="http://zhanzhang.baidu.com/sitesubmit/index?sitename=https://idig8.com/2018/11/03/gaojipiandockerzhidockerswarmdejiqunhuanjingdajian28/">百度未收錄
>>原創文章,歡迎轉載。轉載請註明:轉載自IT人故事會,謝謝!
>>原文連結地址:上一篇:已是最新文章