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 叢集配置推薦
- iOS採集錄製音視訊API選擇推薦iOSAPI
- 京東雲Kubernetes叢集最佳實踐
- Kubernetes叢集健康檢查最佳實踐
- 三艾雲 Kubernetes 叢集最佳實踐
- AndroidRTMP直播推流方案選擇Android
- mongodb 分片叢集設定MongoDB
- css選擇器常用命名推薦CSS
- Swirl:Docker Swarm 叢集管理的新選擇DockerSwarm
- BOM選擇設定
- Redis叢集實現方案選型分析Redis
- 選擇合適的推薦系統模型模型
- 推薦 15 個 jQuery 選擇框外掛jQuery
- Kubernetes 叢集和應用監控方案的設計與實踐
- Ceph分散式儲存叢集-硬體選擇分散式
- TSS的cluster叢集方案入選Java one!Java
- 分散式 PostgreSQL 叢集(Citus),分散式表中的分佈列選擇最佳實踐分散式SQL
- Zookeeper叢集 + Kafka叢集 + KafkaOffsetMonitor 監控薦Kafka
- 推薦系統中嵌入向量維數選擇
- Redis叢集方案Redis
- Redis 叢集方案Redis
- 外鏈交換平臺推薦:選擇最佳平臺,高效獲取外鏈資源
- Kubernetes 叢集日誌 和 EFK 架構日誌方案架構
- KubeSphere 最佳實戰:Kubernetes 部署叢集模式 Nacos 實戰指南模式
- Kubernetes 叢集搭建(上)
- Kubernetes 叢集搭建(下)
- Kubernetes叢集搭建(vagrant)
- kubernetes與web叢集Web
- 蘋果簽名推薦,如何選擇蘋果簽名者蘋果
- 為Hadoop叢集選擇合適的硬體配置Hadoop
- 管理 ES 叢集:分片設定及管理
- 大神推薦Redis叢集遷移工具:redis-migrate-toolRedis
- 搭建 Kubernetes 高可用叢集
- kubernetes叢集管理命令(三)
- CRM系統選擇的五個標準及推薦
- 如何為Kafka叢集選擇合適的Topic/Partitions數量Kafka
- multipass指定virualbox搭建k8s叢集(選擇docker作為預設容器)K8SDocker