跳至主要内容

設定容器的提示

執行建構良好的容器可以極大地影響環境的整體效能和安全性。

以下是設定容器的一些提示。

有關容器安全性的更詳細討論,你也可以參考 Rancher 的容器安全完整指南。

使用通用容器作業系統​

在可能的情況下,你應該嘗試標準化通用容器基礎作業系統。

較小的發行版,如 Alpine 和 BusyBox,可以減小容器映像大小,並且通常具有較小的攻擊/漏洞面。

流行的發行版,如 Ubuntu、Fedora 和 CentOS,經過更多的實地測試並提供更多功能。

從 FROM scratch 容器開始​

如果你的微服務是一個獨立的靜態二進位檔,你應該使用 FROM scratch 容器。

FROM scratch 容器是一個官方 Docker 映像,它是空的,以便你可以使用它來設計最小映像。

這將具有最小的攻擊面和最小的映像大小。

以非特權身分執行容器程序​

在可能的情況下,在容器內執行程序時使用非特權使用者。雖然容器執行環境提供隔離,但漏洞和攻擊仍然可能發生。如果容器以 root 身分執行,不經意或意外的主機掛載也可能受到影響。有關為 pod 或容器配置安全性上下文的詳細資訊,請參閱 Kubernetes 文件。

定義資源限制​

將 CPU 和記憶體限制應用到你的 pods。這可以幫助管理工作節點上的資源,並避免故障的微服務影響其他微服務。

在標準 Kubernetes 中,你可以在命名空間層級設定資源限制。在 Rancher 中,你可以在專案層級設定資源限制,它們將傳播到專案內的所有命名空間。有關詳細資訊,請參閱 Rancher 文件。

在設定資源配額時,如果你在專案或命名空間上設定與 CPU 或記憶體相關的任何內容(即限制或保留),則所有容器在建立期間都需要設定相應的 CPU 或記憶體欄位。為了避免在工作負載建立期間在每個容器上設定這些限制,可以在命名空間上指定預設容器資源限制。

Kubernetes 文件有更多關於如何在容器層級和命名空間層級設定資源限制的資訊。

定義資源需求​

你應該將 CPU 和記憶體需求應用到你的 pods。這對於通知調度器你的 pod 需要放置在哪種類型的運算節點上,並確保它不會過度配置該節點至關重要。在 Kubernetes 中,你可以透過在 pod 的容器規範中的資源請求欄位定義 resources.requests 來設定資源需求。有關詳細資訊,請參閱 Kubernetes 文件。

備註

如果你為 pod 部署的命名空間設定了資源限制,並且容器沒有特定的資源請求,則不允許 pod 啟動。為了避免在工作負載建立期間在每個容器上設定這些欄位,可以在命名空間上指定預設容器資源限制。

建議在容器層級定義資源需求,否則當叢集遇到負載時,調度器會做出可能對你的應用程式沒有幫助的假設。

存活性和就緒性探測​

為你的容器設定存活性和就緒性探測。除非你的容器完全崩潰,否則 Kubernetes 不會知道它不健康,除非你建立一個可以報告容器狀態的端點或機制。或者,確保你的容器在不健康時停止並崩潰。

Kubernetes 文件展示了如何為容器配置存活性和就緒性探測。