Docker Swarm(五)Config 配置管理


 

前言

在動態的、大規模的分布式集群上,管理和分發配置文件也是很重要的工作。傳統的配置文件分發方式(如配置文件放入鏡像中,設置環境變量,volume 動態掛載等)都降低了鏡像的通用性。

Docker 17.06 引入了 Swarm 服務配置,它允許你在服務的鏡像或者運行的容器外部存儲非敏感信息,比如配置文件。這樣保證了鏡像的通用性,而無需將配置文件綁定到容器或使用環境變量來配置。

  • Configs 是安裝在容器的文件系統中,而不是使用 RAM 磁盤。
  • Configs 可以隨時添加或刪除,服務可以共享一個配置。
  • Configs 可以與 Environments 或 Labels 結合使用,以獲得最大的靈活性。
適合的應用場景有:
  • nginx或tomcat或redis等配置文件設定
  • 設定或更改資料庫config等 這樣可以取代bind mount(將資料儲存在硬碟),存在Raft能提高可用性 swarm config跟secret有異曲同工之妙,可以透過指令來新增刪除config files
  • config配置是不可變的,所以無法更改現有服務的文件,可以創建一個新的 Config 來使用不同的文件
  • 若有任何service使用到該config,要先移除service才能移除config
  • 如果是隱私資料一樣用secret來存

提醒:Docker Configs 僅對 Swarm 服務有效,對獨立的容器是無用的。如需使用,可以啟動 1 個副本的服務來使用 Docker Config。

 
 

Config 基本操作

友情提示:“ 需 Swarm Manager 權限才能操作 ”

  • 創建配置
docker config create tomcat-server ./server.xml
  • 配置列表
docker config ls

  • 配置詳情
docker config inspect nginx-conf

  • 配置刪除
docker config rm nginx-conf

 

 

config 使用

  • 使用

  用特定 server.xml 來建立一個service

docker service create --name masl -e TZ="Asia/Shanghai" --config source=tomcat-server,target=/usr/local/apache-tomcat-8.5.50/conf/server.xml --replicas 2 -p 8080:8080 172.16.99.2:40305/masl:dev-yc-36
  • 更新

   新增新的config來取代舊的,並更新有用到該config的service

docker config create tomcat-server-2 ./server.xml
docker service update --config-rm tomcat-server --config source=tomcat-server-2,target=/usr/local/apache-tomcat-8.5.50/conf/server.xml
  • stack file使用
version: 3.3
services:
  web:
    image: 172.16.99.2:40305/masl:dev-yc-36
    configs:
      - source: tomcat-server
      - target: /usr/local/apache-tomcat-8.5.50/conf/server.xml
 
configs:
  tomcat-server:
    file: ./server.xml

注:3.3之後才支持config

 

 

Swarm 對 Config 的管理

在 Swarm 中添加一個 Config 時,Docker 通過 TLS 連接把 Config 發送給 Swarm Manager。這個 Config 經過加密后,存儲在 Raft 日志中,而且整個 Raft 日志會被復制到其他 Manager 中,確保 Config 的高可用性。

在新創建的或正在運行的服務添加 Config 時,Config 將作為文件安裝到容器中,文件路徑默認為 linux 容器中的 /<config-name>

可以在任何時候通過更新服務的方式授權其他的 Config 或移除已有的Config 訪問權。

如果節點是 Swarm Manager,或者正在運行服務任務已被授權訪問這個 Config,那么這個節點才能訪問這個配置。當容器任務停止運行時,共享給它的 Config 將從該容器的內存文件系統中卸載,並從節點的內存刷新。

如果一個節點運行了一個帶 Config 的任務容器,在它失去與 Swarm 的連接后,這個任務容器仍然可以訪問其 Config,但只有在節點重新連接到 Swarm 時才能接收更新。

正在運行的服務正在使用的 Config 不能刪除。想要在不中斷正在運行的服務的情況下刪除配置可以參考 《Rotate a config》

為了更容易地更新或回退 Config,可以考慮在 Config Name 中添加版本號或日期。

如需更新 Stack ,可以更改 Compose file,然后重新運行 docker stack deploy -c <new-compose-file> <stack-name>。如果 Compose file 使用新的 Config ,那么 services 將開始使用這些配置。

 

參考:https://www.jianshu.com/p/1e6828fd8947


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM