Kubernetes 大规模集群

    • 不超过 5000 个节点
    • 不超过 150000 个 Pod
    • 不超过 300000 个容器
    • 每台 Node 上不超过 100 个 Pod

    对于公有云上的 Kubernetes 集群,规模大了之后很容器碰到配额问题,需要提前在云平台上增大配额。这些需要增大的配额包括

    • 虚拟机个数
    • vCPU 个数
    • 公网 IP 地址个数
    • 安全组条数
    • 路由表条数
    • 持久化存储大小

    除了常规的 Etcd 高可用集群配置、使用 SSD 存储等,还需要为 Events 配置单独的 Etcd 集群。即部署两套独立的 Etcd 集群,并配置 kube-apiserver

    另外,Etcd 默认存储限制为 2GB,可以通过 选项增大。

    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 和内存:

    以下扩展服务需要增大副本数:

    Kube-apiserver 配置

    • 设置 --max-requests-inflight=3000
    • 设置 --max-mutating-requests-inflight=1000

    Kube-controller-manager 配置

    • 设置 --kube-api-qps=100
    • 设置 --kube-api-burst=100

    Kubelet 配置

    • 设置
    • 设置 --serialize-image-pulls=false(需要 Docker 使用 overlay2 )
    • Kubelet 单节点允许运行的最大 Pod 数:--max-pods=110(默认是 110,可以根据实际需要设置)

    Docker 配置

    • 设置 max-concurrent-downloads=10
    • 使用 SSD 存储 graph=/ssd-storage-path
    • 预加载 pause 镜像,比如 docker image save -o /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.requests.ephemeral-storage
    • 对关键应用使用 PodDisruptionBudget、nodeAffinity、podAffinity 和 podAntiAffinity 等保护
    • 尽量使用控制器来管理容器(如 Deployment、StatefulSet、DaemonSet、Job 等)
    • 更多内容参考

    必要的扩展

    监控、告警以及可视化(如 Prometheus 和 Grafana)至关重要,推荐部署并开启。

    参考文档