對于公有雲上的 kubernetes 叢集,規模大了之後很容器碰到配額問題,需要提前在雲平台上增大配額。這些需要增大的配額包括:
虛拟機個數
vcpu 個數
内網 ip 位址個數
公網 ip 位址個數
安全組條數
路由表條數
持久化存儲大小
參考gce随着node節點的增加master節點的配置:
1-5 nodes: n1-standard-1
6-10 nodes: n1-standard-2
11-100 nodes: n1-standard-4
101-250 nodes: n1-standard-8
251-500 nodes: n1-standard-16
more than 500 nodes: n1-standard-32
參考阿裡雲配置:
1、搭建高可用的etcd叢集,叢集規模增大時可以自動增加etcd節點;
目前的解決方案是使用etcd operator來搭建etcd 叢集,operator是coreos推出的旨在簡化複雜有狀态應用管理的架構,它是一個感覺應用狀态的控制器,通過擴充kubernetes api來自動建立、管理和配置應用執行個體。
etcd operator 有如下特性:
ceate/destroy: 自動部署和删除 etcd 叢集,不需要人額外幹預配置。
resize:可以動态實作 etcd 叢集的擴縮容。
backup:支援etcd叢集的資料備份和叢集恢複重建
upgrade:可以實作在更新etcd叢集時不中斷服務。
2、配置etcd使用ssd固态盤存儲;
3、設定 —quota-backend-bytes 增大etcd的存儲限制。預設值是 2g;
4、需要配置單獨的 etcd 叢集存儲 kube-apiserver 的 event。
node節點數量 >= 3000, 推薦設定如下配置:
node節點數量在 1000 — 3000, 推薦設定如下配置:
記憶體配置選項和node數量的關系,機關是mb:
在運作 pod 的時候也需要注意遵循一些最佳實踐,比如:
1、為容器設定資源請求和限制,尤其是一些基礎插件服務
在k8s中,會根據pod不同的limit 和 requests的配置将pod劃分為不同的qos類别:
guaranteed
burstable
besteffort
當機器可用資源不夠時,kubelet會根據qos級别劃分遷移驅逐pod。被驅逐的優先級:besteffort > burstable > guaranteed
2、對關鍵應用使用 nodeaffinity、podaffinity 和 podantiaffinity 等保護,使其排程分散到不同的node上。比如kube-dns 配置:
3、盡量使用控制器來管理容器(如 deployment、statefulset、daemonset、job 等)
kube-scheduler 配置
設定 —kube-api-qps=100 預設值是 50
kube-controller-manager 配置
設定 —kube-api-qps=100 預設值是20
設定 —kube-api-burst=100 預設值是30
作者:薛海山
https://www.jianshu.com/p/e9fcc1a9eea4