K8s最佳實踐 大規模集群的注意事項

2022-09-22 00:27:14 字數 1529 閱讀 8727

參考:

集群是執行 kubernetes **的、 由控制平面管理的一組 節點(物理機或虛擬機器)。 kubernetes v1.21 支援的最大節點數為 5000。 更具體地說,kubernetes旨在適應滿足以下所有標準的配置:

你可以通過新增或刪除節點來擴充套件集群。集群擴縮的方式取決於集群的部署方式。

為避免遇到雲**商配額問題,在建立具有大規模節點的集群時,請考慮以下事項:

由於某些雲**商限制了建立新例項的速度,因此通過分批啟動新節點來控制集群擴充套件操作,並在各批之間有乙個暫停。

對於大型集群,你需要乙個具有足夠計算能力和其他資源的控制平面。

通常,你將在每個故障區域執行乙個或兩個控制平面例項, 先垂直縮放這些例項,然後在到達下降點(垂直)後再水平縮放。

你應該在每個故障區域至少應執行乙個例項,以提供容錯能力。 kubernetes 節點不會自動將流量引向相同故障區域中的控制平面端點。 但是,你的雲**商可能有自己的機制來執行此操作。

例如,使用託管的負載均衡器時,你可以配置負載均衡器傳送源自故障區域 a 中的 kubelet 和 pod 的流量, 並將該流量僅定向到也位於區域 a 中的控制平面主機。 如果單個控制平面主機或端點故障區域 a 離線,則意味著區域 a 中的節點的所有控制平面流量現在都在區域之間傳送。 在每個區域中執行多個控制平面主機能降低出現這種結果的可能性。

為了提高大規模集群的效能,你可以將事件物件儲存在單獨的專用 etcd 例項中。

在建立集群時,你可以(使用自定義工具):

kubernetes 資源限制 有助於最大程度地減少記憶體洩漏的影響以及 pod 和容器可能對其他元件的其他方式的影響。 這些資源限制適用於外掛程式資源, 就像它們適用於應用程式工作負載一樣。

例如,你可以對日誌元件設定 cpu 和記憶體限制

...

containers:

- name: fluentd-cloud-logging

image: fluent/fluentd-kubernetes-daemonset:v1

resources:

limits:

cpu: 100m

memory: 200mi

外掛程式的預設限制通常基於從中小規模 kubernetes 集群上執行每個外掛程式的經驗收集的資料。 外掛程式在大規模集群上執行時,某些資源消耗常常比其預設限制更多。 如果在不調整這些值的情況下部署了大規模集群,則外掛程式可能會不斷被殺死,因為它們不斷達到記憶體限制。 或者,外掛程式可能會執行,但由於 cpu 時間片的限制而導致效能不佳。

為避免遇到集群外掛程式資源問題,在建立大規模集群時,請考慮以下事項:

verticalpodautoscaler 是一種自定義資源,你可以將其部署到集群中,幫助你管理資源請求和 pod 的限制。 訪問 vertical pod autoscaler 以了解有關 verticalpodautoscaler 的更多資訊, 以及如何使用它來擴充套件集群元件(包括對集群至關重要的外掛程式)的資訊。

集群自動擴縮器 與許多雲**商整合在一起,幫助你在你的集群中,按照資源需求級別執行正確數量的節點。

k8s最佳實踐

通過下面兩種方式可以減小構建映象大小 small base images 有些base映象有非常齊全的工具鏈,考慮考慮是否需要這些工具鏈,還是只需要精簡映象版映象並補充所需的工具 builder pattern 對於一些go c語言專案,使用docker提供的builder pattern,先構建乙...

k8s編排最佳實踐

不受任何控制器 deployment,replicasets,jobs 控制的pod稱之為裸pod foo service host foo service port 如果 中要訪問service,不要使用上述環境變數,最好使用service的dns名稱,上述環境變數只是為了解決有些老的系統無法使用...

K8S 最佳實踐 對映外部服務

大多數 kubernetes 使用者都有可能用到集群外部的服務。例如,您可能使用 twillio api 傳送簡訊,或使用 google cloud vision api 進行影象分析。如果位於不同環境中的應用連線相同的外部端點,並且您不打算將外部服務引入 kubernetes 集群,那麼在 中直接...