大規模集群
Last updated
Last updated
Kubernetes v1.6+ 單集群最大支持 5000 個節點,也就是說 Kubernetes 最新穩定版的單個集群支持
不超過 5000 個節點
不超過 150000 個 Pod
不超過 300000 個容器
每臺 Node 上不超過 100 個 Pod
對於公有云上的 Kubernetes 集群,規模大了之後很容易碰到配額問題,需要提前在雲平臺上增大配額。這些需要增大的配額包括
虛擬機個數
vCPU 個數
內網 IP 地址個數
公網 IP 地址個數
安全組條數
路由表條數
持久化存儲大小
除了常規的 配置、使用 SSD 存儲等,還需要爲 Events 配置單獨的 Etcd 集群。即部署兩套獨立的 Etcd 集群,並配置 kube-apiserver
另外,Etcd 默認存儲限制爲 2GB,可以通過 --quota-backend-bytes
選項增大。
可以參考 AWS 配置 Master 節點的大小:
1-5 nodes: m3.medium
6-10 nodes: m3.large
11-100 nodes: m3.xlarge
101-250 nodes: m3.2xlarge
251-500 nodes: c4.4xlarge
more than 500 nodes: c4.8xlarge
Kubernetes 集群內的擴展也需要分配更多的資源,包括爲這些 Pod 分配更大的 CPU 和內存以及增大容器副本數量等。當 Node 本身的容量太小時,還需要增大 Node 本身的 CPU 和內存(特別是在公有云平臺上)。
以下擴展服務需要增大 CPU 和內存:
以下擴展服務需要增大副本數:
設置 --max-requests-inflight=3000
設置 --max-mutating-requests-inflight=1000
設置 --kube-api-qps=100
設置 --kube-api-qps=100
設置 --kube-api-burst=100
設置 --image-pull-progress-deadline=30m
設置 --serialize-image-pulls=false
(需要 Docker 使用 overlay2 )
Kubelet 單節點允許運行的最大 Pod 數:--max-pods=110
(默認是 110,可以根據實際需要設置)
設置 max-concurrent-downloads=10
使用 SSD 存儲 graph=/ssd-storage-path
預加載 pause 鏡像,比如 docker image save -o /opt/preloaded_docker_images.tar
和 docker image load -i /opt/preloaded_docker_images.tar
增大內核選項配置 /etc/sysctl.conf
:
在運行 Pod 的時候也需要注意遵循一些最佳實踐,比如
爲容器設置資源請求和限制
spec.containers[].resources.limits.cpu
spec.containers[].resources.limits.memory
spec.containers[].resources.requests.cpu
spec.containers[].resources.requests.memory
spec.containers[].resources.limits.ephemeral-storage
spec.containers[].resources.requests.ephemeral-storage
對關鍵應用使用 PodDisruptionBudget、nodeAffinity、podAffinity 和 podAntiAffinity 等保護。
儘量使用控制器來管理容器(如 Deployment、StatefulSet、DaemonSet、Job 等)。
減少鏡像體積,P2P 鏡像分發,預緩存熱點鏡像。
監控、告警以及可視化(如 Prometheus 和 Grafana)至關重要,推薦部署並開啓。
另外,爲了保證多個副本分散調度到不同的 Node 上,需要爲容器配置 。比如,對 kube-dns,可以增加如下的配置:
開啓 優化 Watch 性能(1.17 GA),客戶端凱伊在 Watch 請求中增加 allowWatchBookmarks=true
來開啓這個特性。
更多內容參考。