节点扩缩容

节点扩缩容是 Kubernetes 集群管理的重要功能,允许根据工作负载需求动态调整集群节点数量。这包括节点的手动扩缩容和自动扩缩容两种方式。

节点扩缩容架构
graph TB
    subgraph "K8s_集群" 
        subgraph "Master_节点"
            API[API_Server]
            SCHED[Scheduler]
            CM[Controller_Manager]
        end
        
        subgraph "Worker_节点组"
            NODE1[Worker_Node_1]
            NODE2[Worker_Node_2]
            NODE3[Worker_Node_3]
            NODEn[Worker_Node_N]
        end
        
        subgraph "扩缩容控制器"
            HPA[Horizontal_Pod_Autoscaler]
            VPA[Vertical_Pod_Autoscaler]
            CA[Cluster_Autoscaler]
        end
    end
    
    API --> SCHED
    API --> CM
    API --> NODE1
    API --> NODE2
    API --> NODE3
    API --> NODEn
    HPA --> NODE1
    CA --> NODE1
    CA --> NODE2
    CA --> NODE3
    CA --> NODEn
                                
扩缩容类型

手动扩缩容

通过 kubectl 命令或云平台控制台手动调整节点数量

自动扩缩容

通过 Cluster Autoscaler 自动调整节点数量

手动节点扩缩容

手动扩缩容适用于可预测的工作负载变化或计划性扩容。

# 查看当前节点
kubectl get nodes
# 标记节点不可调度(缩容前)
kubectl cordon <node-name>
# 驱逐节点上的 Pod
kubectl drain <node-name> --ignore-daemonsets --delete-emptydir-data
# 删除节点
kubectl delete node <node-name>
# 添加新节点(使用 kubeadm)
kubeadm join <control-plane-host>:6443 --token <token> --discovery-token-ca-cert-hash sha256:<hash>
自动节点扩缩容 (Cluster Autoscaler)

Cluster Autoscaler 根据 Pod 调度需求自动调整集群节点数量。

# Cluster Autoscaler 部署示例
apiVersion: apps/v1
kind: Deployment
metadata:
  name: cluster-autoscaler
  namespace: kube-system
spec:
  replicas: 1
  selector:
    matchLabels:
      app: cluster-autoscaler
  template:
    metadata:
      labels:
        app: cluster-autoscaler
    spec:
      containers:
      - name: cluster-autoscaler
        image: k8s.gcr.io/autoscaling/cluster-autoscaler:v1.21.0
        command:
        - ./cluster-autoscaler
        - --v=4
        - --stderrthreshold=info
        - --cloud-provider=aws
        - --skip-nodes-with-local-storage=false
        - --expander=least-waste
        - --node-group-auto-discovery=asg:tag=k8s.io/cluster-autoscaler/enabled,k8s.io/cluster-autoscaler/<CLUSTER-NAME>
扩缩容策略对比
策略适用场景优势挑战
手动扩缩容计划性扩容、维护操作精确控制、可预测需要人工干预、响应慢
自动扩缩容动态工作负载、突发流量自动响应、节省成本配置复杂、可能过度扩容
定时扩缩容规律性变化的工作负载成本效益高需要准确预测工作负载模式
节点扩缩容最佳实践
扩容前准备
  • 检查集群资源使用情况
  • 确认新节点类型和配置
  • 验证节点就绪时间
  • 规划 Pod 调度策略
缩容注意事项
  • 确保 Pod 可以安全迁移
  • 检查节点污点和容忍
  • 验证 Pod 亲和性设置
  • 监控应用健康状况