1. 集群模式基本概念
swarm mode(譯:集群模式)
standalone mode(譯:單機模式)
以集群模式運行Docker
1.1. 集群
Docker引擎內部已經集成了集群管理
一個集群由多個Docker主機組成,它們以集群模式運行。集群中有兩種角色:manager和worker。一個給定的主機,它有可能是manager,或者worker,也有可能同時兼具這兩種角色。當你創建一個服務的時候,你會定義它們的狀態(比如:副本數量、網絡和存儲資源、對外暴露的端口等等)。Docker負責維護這些狀態。如果一個worker節點不可用了,那么Docker會將該節點上的任務轉給其它節點。任務是一個運行的容器,它是集群服務的一部分,由manager管理,而非作為一個獨立的容器。
相對於單機模式而言,集群模式最關鍵的優勢在於你可以修改服務的配置(比如:networks或volumes等)而不需要手動重啟服務。Docker將自動更新配置,停止已經過期的配置的服務任務,並創建與之匹配的新的服務任務。
當Docker以集群模式運行時,你仍然可以在集群的任意一台主機上以單機模式運行,只要它還是集群服務。單機容器與集群服務最主要的區別在於只有集群的manager才可以管理集群,而單機的容器可以被任意守護進程啟動。Docker守護進程可以以manager身份、worker身份、或二者兼具的身份參與到集群中。
(小結:
- 回憶一下,運行中的容器對外提供服務,也就是說服務的載體是容器
- 單機模式是一台主機上運行多個容器,每個容器單獨提供服務;集群模式是多台機器組成一個集群,多個容器一起提供同一個服務;
- 集群模式的好處是當你修改了服務的配置后無需手動重啟服務
- 集群與單機最大的區別在於,只有集群中的manager才能管理集群中的一切(包括服務、容器都歸它管,你無法再一個woker節點上操作容器)
)
1.2. 節點
節點是集群中的一個Docker實例,你可以認為它是一個Docker節點。你可以在單台物理機或者雲服務上創建一個或多個節點。但是,在生產環境通常是一台物理機或雲服務器時一個節點。
為了將你的應用部署到集群中,你需要提交一個服務定義給集群manger節點。manager節點分發任務(task)給worker節點。
manager節點還負責維護集群狀態。manager節點選擇一個leader來編排任務。
worker節點從manager節點那里接收任務並執行。默認情況下,manager節點上也運行着和worker節點上一樣的服務。但是你也可以將它們配置為僅運行manager任務。每個worker節點上都運行着一個agent,它們負責報告分配給該worker節點的任務的相關情況。worker節點向manager節點報告分配給它的任務的當前狀態,以便於manager可以更好地分配任務。
1.3. 服務與任務
服務是要在manager節點或worker節點上執行的任務的定義。當你創建服務的時候,會指定運行哪個鏡像,以及在容器運行的時候執行哪些命令。
任務就是某個容器,以及要在容器中執行的命令
1.4. 負載均衡
2. 集群創建
創建集群
加入集群
部署服務
檢查服務
動態擴容
刪除服務
動態滾動更新服務
節點下線
3. 備忘單
4. 文檔
https://docs.docker.com/engine/swarm/swarm-tutorial/scale-service/
https://docs.docker.com/engine/swarm/swarm-tutorial/rolling-update/
https://docs.docker.com/engine/swarm/ingress/
https://docs.docker.com/engine/reference/commandline/swarm_update/