温馨提示×

Kubernetes在Ubuntu上的扩展性

小樊
38
2025-12-14 16:06:33
栏目: 智能运维

Kubernetes在Ubuntu上的扩展性实践

一 扩展路径总览

  • Ubuntu 上,Kubernetes 的扩展通常分为两个层面:
    1. 节点层面:为集群增加工作节点(Worker)或控制平面节点,以提升集群整体容量与可靠性。
    2. 工作负载层面:对应用进行副本扩缩(手动或自动),并在需要时调整 Pod 资源请求/限制。
  • 典型流程:准备新 Ubuntu 节点(系统、网络、容器运行时就绪)→ 安装 kubeadm/kubelet/kubectl → 使用 kubeadm join 加入集群 → 验证节点状态与调度。该流程在 Ubuntu 20.04/22.04 上均适用,且 kubeadm 是官方推荐的标准化方式。

二 节点层面扩容步骤

  • 前置检查与系统准备(新节点执行)
    • 关闭 swapsudo swapoff -a 并注释 /etc/fstab 中的 swap 行。
    • 加载内核模块与网络参数:启用 overlay/br_netfilter,设置 net.bridge.bridge-nf-call-iptables=1net.ipv4.ip_forward=1 等。
    • 防火墙放行常用端口(示例):6443(Kubelet API)、10250(kubelet)、30000–32767(NodePort)、以及 Calico179/TCP(BGP)5473/TCP4789/UDP(VXLAN)
    • 安装容器运行时(如 containerd 或 Docker),并配置开机自启。
  • 安装与加入集群
    • 安装组件:sudo apt update && sudo apt install -y kubelet kubeadm kubectl && sudo apt-mark hold kubelet kubeadm kubectl
    • 获取加入命令:在控制平面执行 kubeadm token create --print-join-command,在目标节点执行输出的 kubeadm join ...
    • 验证:kubectl get nodes 应看到新节点状态为 Ready
  • 节点角色与污点管理
    • 为节点打标签(示例):kubectl label nodes <node-name> node-role.kubernetes.io/worker=
    • 如需将节点专用于控制平面,可设置污点:kubectl taint nodes <node-name> node-role.kubernetes.io/control-plane:NoSchedule
  • 安全缩容四步(维护窗口)
    • 标记不可调度:kubectl cordon <node>
    • 驱逐 Pod:kubectl drain <node> --ignore-daemonsets --delete-emptydir-data
    • 删除节点:kubectl delete node <node>
    • 释放底层资源(物理/虚拟化层面)
    • 注意检查 PDB(PodDisruptionBudget) 与有状态服务存储迁移策略,避免业务中断。

三 工作负载层面扩展

  • 手动扩缩容
    • 副本扩缩:kubectl scale deployment/<name> --replicas=<N>;有状态集:kubectl scale sts/<name> --replicas=<N>
  • 自动扩缩容
    • HPA(Horizontal Pod Autoscaler):基于 CPU/内存 或自定义指标自动调整副本数。示例(autoscaling/v2):
      apiVersion: autoscaling/v2
      kind: HorizontalPodAutoscaler
      metadata:
        name: app-hpa
      spec:
        scaleTargetRef:
          apiVersion: apps/v1
          kind: Deployment
          name: app
        minReplicas: 2
        maxReplicas: 20
        metrics:
        - type: Resource
          resource:
            name: cpu
          target:
            type: Utilization
            averageUtilization: 60
      
    • VPA(Vertical Pod Autoscaler):基于历史与实时指标建议/调整 requests/limits,适合突发型或长生命周期任务。
    • 生产建议:HPA 与 Cluster Autoscaler(节点自动扩缩) 联动;为 HPA 设置合理的冷却时间(如 --horizontal-pod-autoscaler-downscale-stabilization),并结合 QPS/延迟 等自定义指标。

四 生产环境最佳实践与容量规划

  • 伸缩顺序优先级:优先 横向扩展 Pod 副本 → 其次 纵向调整资源 → 最后 扩容节点,以降低扩容成本与复杂度。
  • 容量规划阈值(经验法则):
    • 节点资源使用率 <30% 持续 2h:可考虑缩容节点;
    • 50%–70%:持续观察;
    • >80% 持续 30m:尽快扩容;
    • 剧烈波动:启用更激进的弹性策略。
  • 高可用与控制平面扩展:使用 kubeadm--control-plane-endpoint--upload-certs 构建 多控制平面VIP/负载均衡,提升控制面可用性与横向扩展能力。
  • 监控与可观测性:部署 Prometheus + Grafanakube-state-metricsMetrics Server,重点观测 Pending Pods、节点 CPU/MEM 饱和度、应用 QPS/延迟 等关键指标。
  • 节点污点与亲和性:通过 nodeSelector/nodeAffinity/污点 实现业务分级扩容与资源隔离(如高性能节点池)。
  • 多可用区与拓扑分布:使用 topologySpreadConstraints 将副本跨 可用区 均匀分布,提升容灾能力。

0