簡體   English   中英

如何在Kubernetes中增加PODS

[英]How to increase PODS in Kubernetes

我對 Kubernetes 很陌生,我已經在 Kubernetes 上部署了一個集群。 創建了一個部署並將 POD 的計數設置為 2。我沒有為此部署創建 HPA。

為此,我正在使用 Google Cloud。 我為集群啟用了自動縮放。 最小值為 2,最大值為 30。

我在部署中遇到了OOMKilled錯誤。

所以問題是

所以只有 HPA 可以增加/減少 PODS 數量,對嗎??。 在這種情況下,基於內存和 CPU 的 HPA 是每個部署都必須和應該的。

如果我錯了,請糾正我。

您可以使用kubectl更改正在運行的 pod 數量:

kubectl scale deployment <DEPLOYMENT NAME> --replicas=<#PODS>
kubectl scale deployment student-app --replicas=2

您可以在文檔頁面找到更多信息

並非如此,OOM 可能是應用程序內部的一個復雜問題,與擴展無關。 想象一下,您的長時間運行的應用程序中存在內存泄漏。 如果您所做的唯一一件事就是擴展到更多 Pod,那么最終只會消耗越來越多的資源,並且仍然會在 Pod 上遇到 OOM Kills。

真正的解決方案是在您的應用程序中擁有可預測的內存消耗模式。

想象一個應用程序最多可以使用 64 Mb ram,但在一些非常罕見的情況下它可以跳到 256 ......好吧,那么你需要給它 256。如果這個應用程序運行在多進程/線程環境中會怎樣運行 N 個工人(即 php-fpm)現在它的最大內存使用量在峰值時為 Nx256(這就是為什么在許多情況下不在容器中運行多個進程的池,而是使用 HPA 擴展它們是有意義的)。

最后,您對 POD 的內存請求/限制需要滿足內部應用程序的需求,因此分析應用程序並為其設計可預測性是這里的解決方案。

最后,是的,如果您需要擴展部署(向上/向下),只需使用kubectl scale

您是正確的,HPA 是特定於 pod 的。 我不會說這是每個部署的要求。 例如,MySQL 恰好非常擅長保留內存,通常編寫良好的應用程序在執行工作任務時可能會飆升至 100% 的 CPU。 我認為這真的只取決於應用程序。 例如,L7 負載平衡器可擴展 CPU 或丟棄數據包。

然而,集群擴展基於 pod 規范的資源塊,特別是資源請求。 Kubernetes 監控節點上每個 Pod 發出的資源請求量,以確定該節點的滿載情況。 如果所有節點都已滿並且有一個 pod 正在等待調度,則會創建一個新節點。

應用程序開發人員不需要分配他們沒有的內存。 如果您被 OOM 殺死,則應用程序的編寫方式假定它將能夠分配。 當您編寫在 docker 容器內運行的應用程序時,我相信這些限制對您是可見的,並且由 cgroups 設置。 一旦達到某些指定的限制,資源限制也可以殺死您的容器,我只是不確定這是否會顯示為 OOM 已終止。

根據我的經驗,幾乎每個部署都應該提供資源請求,以便集群擴展正常工作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM