Kubernetes叢集選擇最佳設定推薦方案 - daniele
在編寫任何程式碼之前如果要為Kubernetes叢集選擇最佳設定怎麼辦?我構建了一個叢集計算器,以幫助您選擇群集大小和最佳例項,這篇文章會告訴您在下面之間如何平衡:
- -成本(已用與浪費)
- -調整交付週期
- -過多設定
事實證明Kubernetes中的許多設定都是相關的。如果更改Pods請求,則可能需要不同的節點例項和自動縮放設定。同樣,更改節點例項會對擴充套件,資源利用率和成本產生影響。
如何在群集節點中分配資源?
Kubernetes叢集中部署的Pod會消耗記憶體,CPU和儲存等資源,但是並非Kubernetes節點中的所有CPU和記憶體都可用於執行Pod。
作業系統和kubelet也需要記憶體和CPU,因此您應該照顧這些額外的資源。
如果您仔細檢視單個節點,則可以將可用資源劃分為:
- 執行作業系統和系統守護程式所需的資源,例如SSH,systemd等。
- 執行Kubernetes代理所需的資源,例如Kubelet,容器執行時,節點問題檢測器等。
- Pods可用的資源。
- 為eviction threshold.保留的資源。
所有這些配額都是可定製的。
但是請注意,為作業系統保留100MB記憶體並不意味著作業系統僅限於使用該數量。
它可能會使用更多(或更少)資源-您只是在盡力而為地分配和估計記憶體和CPU使用率。
但是,您如何決定如何分配資源?
不幸的是,由於它取決於您的群集,所以沒有固定的答案。
但是,主要的託管Kubernetes服務Google Kubernetes Engine(GKE),Azure Kubernetes Service(AKS)和Elastic Kubernetes Service(EKS)已經達成共識,值得討論它們如何劃分可用資源。
Google Kubernetes引擎(GKE)
Google Kubernetes Engine(GKE)具有明確定義的規則列表,用於為Node分配記憶體和CPU。
對於記憶體資源,GKE保留以下內容:
- 記憶體少於1 GB的計算機為255 MiB
- 前4GB記憶體的25%
- 接下來的4GB記憶體的20%(最多8GB)
- 接下來的8GB記憶體的10%(最多16GB)
- 接下來的112GB記憶體的6%(最高128GB)
- 超過128GB的任何記憶體的2%
對於CPU資源,GKE保留以下內容:
- 第一核心的6%
- 下一個核心的1%(最多2個核心)
- 接下來的2個核心的0.5%(最多4個核心)
- 4個核以上的任何核的0.25%
彈性Kubernetes服務(EKS)
EKS為每個節點保留以下記憶體:
Reserved memory = 255MiB + 11MiB * MAX_POD_PER_INSTANCE
什麼MAX_POD_PER_INSTANCE啊,在Amazon Web Service中,每種例項型別對其可以執行的Pod數量都有不同的上限。
例如,一個m5.large例項只能執行29個Pod,但一個m5.4xlarge例項最多可以執行234個。
如果選擇m5.large,則為kubelet和代理保留的記憶體為:
Reserved memory = 255Mi + 11MiB * 29 = 574MiB |
對於CPU資源,EKS複製GKE實現並保留:
- 第一核心的6%
- 下一個核心的1%(最多2個核心)
- 接下來的2個核心的0.5%(最多4個核心)
- 4個核以上的任何核的0.25%
Azure Kubernetes服務
Azure提供了有關其資源分配的詳細說明。
為Kubelet保留的記憶體為:
- 記憶體少於1 GB的計算機為255 MiB
- 前4GB記憶體的25%
- 接下來的4GB記憶體的20%(最多8GB)
- 接下來的8GB記憶體的10%(最多16GB)
- 接下來的112GB記憶體的6%(最高128GB)
- 超過128GB的任何記憶體的2%
請注意,分配方式與Google Kubernetes Engine(GKE)相同。
概括
您可能會得出這樣的結論:在最大化可分配記憶體和CPU的情況下,較大的例項是必經之路。
不幸的是,成本只是設計叢集時的一個因素。
如果您正在執行大型節點,則還應考慮:
- 在節點上執行的Kubernetes代理的開銷-例如容器執行時(例如Docker),kubelet和cAdvisor。
- 您的高可用性(HA)策略。可以將Pod部署到選定數量的節點上
- 爆炸半徑。如果您只有幾個節點,那麼發生故障的節點的影響會比擁有多個節點的影響大。
- 自動縮放的成本效益較差,因為下一個增量是一個(很大)節點。
較小的節點也不是靈丹妙藥。
因此,您應該為執行的工作負載型別設計叢集,而不要遵循最常見的選擇。
相關文章
- 如何選擇Kubernetes叢集最佳的自動擴充套件策略? - Daniele套件
- es 叢集配置推薦
- 京東雲Kubernetes叢集最佳實踐
- Kubernetes叢集健康檢查最佳實踐
- 三艾雲 Kubernetes 叢集最佳實踐
- iOS採集錄製音視訊API選擇推薦iOSAPI
- mongodb 分片叢集設定MongoDB
- Kubernetes 叢集和應用監控方案的設計與實踐
- 大型Kubernetes叢集的資源編排最佳化
- Swirl:Docker Swarm 叢集管理的新選擇DockerSwarm
- Redis叢集實現方案選型分析Redis
- kubernetes與web叢集Web
- Kubernetes 叢集搭建(上)
- Kubernetes 叢集搭建(下)
- Kubernetes叢集搭建(vagrant)
- Kubernetes 叢集日誌 和 EFK 架構日誌方案架構
- KubeSphere 最佳實戰:Kubernetes 部署叢集模式 Nacos 實戰指南模式
- 分散式 PostgreSQL 叢集(Citus),分散式表中的分佈列選擇最佳實踐分散式SQL
- 推薦系統中嵌入向量維數選擇
- 搭建 Kubernetes 高可用叢集
- kubernetes叢集管理命令(三)
- 大神推薦Redis叢集遷移工具:redis-migrate-toolRedis
- 外鏈交換平臺推薦:選擇最佳平臺,高效獲取外鏈資源
- 2023年最佳Aspera替代方案,選擇適合的Aspera替代方案
- 管理 ES 叢集:分片設定及管理
- 在kubernetes上部署consul叢集
- 簡述Kubernetes叢集聯邦
- 在 Minecraft 中管理 Kubernetes 叢集Raft
- 在 Azure 上部署 Kubernetes 叢集
- 修復一個kubernetes叢集
- 拆除kubeadm部署的Kubernetes 叢集
- “開箱即用” 的 Kubernetes 叢集
- Kubernetes叢集日誌詳解
- Kubernetes部署叢集Mysql服務MySql
- Kubernetes故障排除的直觀指南 - Daniele Polencic
- Kubernetes中如何使用CPU請求和限制? - daniele
- multipass指定virualbox搭建k8s叢集(選擇docker作為預設容器)K8SDocker
- Kubernetes叢集部署史上最詳細(二)Prometheus監控Kubernetes叢集Prometheus