天天看點

Docker 官方出品丨Docker 最佳實踐系列指南(二)

Docker 官方出品丨Docker 最佳實踐系列指南(二)

本文首發自“Docker公司”公衆号(ID:docker-cn)

編譯丨小東

每周一、三、五 與您不見不散!

對于 Docker EE 安裝的建議

本節詳細說明架構的安裝過程,并提供一個核對表。它并不能替代有關文檔,後者提供了更多詳細資訊,從各方面來講都是權威性的。本節的目标是幫助您定義一個可重複的(最好也是自動化的)過程,用以部署、更新和擴充 Docker EE 環境。

Docker EE 标準版或進階版安裝的三個主要階段如下所示:

  1. 部署和配置基礎架構(主機、網絡、存儲);
  2. 安裝和配置作為應用在主機上運作的 Docker 引擎;
  3. 安裝和配置 UCP 和 DTR,它們作為在引擎上運作的容器而實作;

基礎架構注意事項

安裝文檔詳細說明了 Docker EE 标準版和進階版的基礎架構要求。建議使用環境中現有的或特定于平台的工具來為基礎架構元件提供标準化的可重複配置。

網絡

Docker 元件需要通過網絡通信,文檔列出了為實作内部叢集通信需要開放的端口。如果叢集的内部網絡配置不當,可能引發難以追查原因的問題。最好先從相對簡單的環境開始。此參考架構假定所有主機使用同一個子網,而容器使用 Overlay 網絡。

防火牆

對 Docker EE 的通路隻能使用端口 443 進行(對于 DTR 是端口 443 和 80),無論通路 Web UI 還是遠端 API 都不例外。是以外部防火牆配置很簡單。在大多數情況下,您隻需要開放端口 80、443 和 22。端口 22 用于 SSH 通路,因為 Docker EE 不需要 SSH 通路,是以它是可有可無的。對應用的通路是通過負載均衡器使用 HTTPS 進行的。如果您對外界暴露其他 TCP 服務,請在防火牆上開放這些端口。上一節已經說過,為了在叢集内部通信,也需要開放多個端口。如果您在叢集中的某些節點之間設有防火牆(例如用于分隔控制器與工作節點),那麼也要開放相關端口。

如果在應用内部使用經過加密的 Overlay 網絡,則還應該允許 ESP(封裝安全有效負載)或 IP 協定 50 流量。ESP 并非基于 TCP 或 UDP 協定,它将用于安全有效負載 / 資料的端到端封裝。

Docker 官方出品丨Docker 最佳實踐系列指南(二)

負載均衡器

上一節詳細說明了負載均衡器。它們必須在安裝之前配置完畢,而且必須有合适的主機名。外部(負載均衡器)主機名用于 HA,也用于 TLS 證書。如果在安裝期間或安裝後不必重新配置它們,就會比較輕松。

請參閱上一節了解 Docker 元件來擷取關于負載均衡器配置的詳細資訊。

共享存儲

用于鏡像庫中鏡像的 DTR 共享存儲必須就緒,并且必須可從 DTR 節點通路。請使用 S3 或 NFS 指令行用戶端來測試其是否工作,以避免調試 DTR 存儲配置的麻煩。

主機配置

主機配置根據所使用的 OS 和現有配置标準而定,不過在安裝 OS 之後必須執行幾個重要步驟:

  1. 使用 NTP 或類似服務進行時鐘同步。時鐘偏差可能導緻難以排除的錯誤,特别是在使用 Raft 算法的情況下(UCP 和 DTR)。
  2. 所有主機的 UCP 都需要靜态 IP。
  3. 主機名用于叢集中的節點辨別。必須以非臨時性的方式設定主機名。
  4. 主機防火牆必須在安裝文檔中指定的所有端口上允許叢集内流量。
  5. 如果有需要,還必須配置存儲。例如,devicemapper 驅動程式需要一個在 Docker 引擎安裝之前配置的邏輯存儲卷。

Docker EE 基礎版安裝注意事項

關于 EE 安裝的詳細說明由文檔提供。要在無法通路網際網路的機器上安裝,請将這些軟體包添加到您自己的私有鏡像倉庫。安裝軟體包之後,確定将 docker 服務配置為在系統引導時啟動。

更改 Docker EE 基礎版的參數的最佳方式是使用 /etc/docker/daemon.json 配置檔案。這樣可以確定配置能夠友善地跨不同系統和 OS 複用。請參見文檔了解完整的選項清單。

啟動 docker 服務,并使用 docker info 驗證參數,進而確定引擎配置正确。

UCP 安裝注意事項

UCP 安裝程式會從一組運作 Docker EE 基礎版的機器建立功能性叢集。這包括建立 Swarm 叢集和安裝 UCP 控制器。在安裝指南中描述的預設安裝方式是互動式的。

要執行完全自動化的可重複部署,請對安裝程式提供更多資訊:

docker run --rm -v /var/run/docker.sock:/var/run/docker.sock \
  -v /tmp/docker_subscription.lic:/config/docker_subscription.lic \
  -e UCP_ADMIN_PASSWORD=password --name ucp docker/ucp install --host-address IP_or_interface \
  --san manager1.example.com --san ucp.example.com
           

下列各節會說明所有這些選項。

外部證書

預設情況下,UCP 使用自簽名的 TLS 證書。對于生産部署,建議使用由可信的 CA 生成的證書。在大多數情況下,該 CA 就是您的組織的内部 CA。

需要的證書和密鑰如下所示:

  1. 根 CA 的公用證書 ca.pem。
  2. TLS 證書 cert.pem。它還必須包含所有中間 CA 的公用證書,并有用于通路 UCP 的所有位址的 SAN,包括負載均衡器的主機名(例如 ucp.example.com)和各個控制器的主機名(例如 ucp-controller1.example.com),以便直接通路它們。
  3. TLS 私鑰 key.pem。

要在安裝期間自動添加這些項目,請在您安裝 UCP 的機器上,将這些帶有正确名稱的檔案添加到名為 ucp-controller-server-certs 的存儲卷,并使用 --external-server-cert 安裝參數。

也可以在安裝後通過 Web UI 添加證書。

許可證檔案

要為安裝提供許可證檔案,可以通過指令行,也可以在 /config 中使用綁定式挂載(存儲卷)。使用 -v /path/to/docker_subscription.lic:/config/docker_subscription.lic 指定其位置。

管理者密碼

要使安裝過程成為完全非互動式的,必須使用 --admin-password 安裝參數傳遞管理者密碼。預設的管理者使用者名是 admin。可以使用 --admin-username 來更改它。

在安裝指令文檔中提供了安裝參數的完整清單。

添加節點

完成第一個控制器節點的安裝後,必須再将兩個控制器加入叢集,進而完成其安裝。UCP 會在叢集中的管理節點上配置一個完整的控制器從節點,是以在這兩個控制器上隻需要執行指令 docker swarm join 并使用正确的标記即可。可以通過在第一個控制器上運作 docker swarm join-token manager 來擷取确切的指令。

要加入工作節點,可以在任何控制器上通過 docker swarm join-token worker 擷取等效的指令:

docker swarm join-token worker
           

要将工作節點添加到此 swarm,請運作下列指令:

docker swarm join \
--token SWMTKN-1-00gqkzjo07dxcxb53qs4brml51vm6ca2e8fjnd6dds8lyn9ng1-092vhgjxz3jixvjf081sdge3p \
192.168.65.2:2377
           

要確定一切都正确運作,請在

https://ucp.example.com

登入到 UCP。

DTR 安裝注意事項

DTR 的安裝與 UCP 的安裝類似。安裝并配置一個節點,然後加入從節點來組成完整的高可用性設定。要安裝第一個執行個體以及從節點,請将安裝程式指向叢集中将要安裝該執行個體的節點。

安裝後必須配置證書和鏡像存儲。配置共享存儲之後,可以使用 join 指令添加兩個從節點。

驗證部署

完成所有項目的安裝之後,可以執行測試來驗證部署。在 UCP 控制器和運作 DTR 的節點上禁用工作負載的排程。

應該考慮的基本測試:

  1. 通過 登入,以及直接登入到管理節點,例如 https://manager1.example.com 。 确認叢集和所有節點都健康。
  2. 仿照文檔中的示例來測試是否能部署應用。
  3. 測試使用者是否能從 CLI 下載下傳捆綁包并連接配接到叢集。測試他們是否能使用 docker-compose。
  4. 使用完整的鏡像工作流測試 DTR。确儲存儲沒有配置不當,且鏡像存儲在正确的位置。

考慮建構一套标準的自動化測試來驗證新的環境和更新。僅通過測試标準功能應該就可發現大部配置設定置問題。要確定使用非管理者使用者身份運作這些測試,測試使用者應該具有與平台使用者相似的權限。通過測量每項測試所用的時間,也可以找出底層基礎架構配置的問題。在這套測試中,應該包括全面部署您的組織中的實際應用。

繼續閱讀