Kubernetes调度与部署机制详解

发表于
更新于
1 2.6~3.3 分钟 1166

📚 Kubernetes调度与部署机制详解

🎯 学习目标

  • 掌握Kubernetes Pod调度的核心机制
  • 理解部署管理策略和最佳实践
  • 学会配置自动扩缩容和优化调度性能

🏗️ 一、Kubernetes调度机制

1.1 NodeSelector(节点选择器)🎯

  • 概念: 最简单的Pod调度约束方式,通过匹配节点标签控制Pod调度
  • 实现: 在Pod的spec字段中添加nodeSelector字段
  • 应用场景: 将Pod调度到具有特定标签的节点上
  • 示例: 将Pod调度到具有source=qikqiak标签的节点上

1.2 亲和性与反亲和性 🔗

节点亲和性

  • 软策略 (preferredDuringSchedulingIgnoredDuringExecution): 优先满足但不强制
  • 硬策略 (requiredDuringSchedulingIgnoredDuringExecution): 必须满足条件
  • 支持的操作符: In、NotIn、Gt、Lt、Exists、DoesNotExist

Pod亲和性与反亲和性

  • podAffinity: 让Pod与指定Pod部署在同一拓扑域
  • podAntiAffinity: 让Pod不与指定Pod部署在同一拓扑域
  • 拓扑域: 通过topologyKey指定,常用如kubernetes.io/hostname

1.3 污点与容忍 🚫

污点效果

  • NoSchedule: Pod不会被调度到标记的节点
  • PreferNoSchedule: NoSchedule的软策略版本
  • NoExecute: 无对应Tolerate的Pod会被直接逐出

🚀 二、Kubernetes部署管理

2.1 滚动更新 🔄

  • 特点: 默认部署策略,零停机部署
  • 机制: 逐步替换现有Pod实例,确保足够数量的Pod可用
  • 优势: 平滑过渡,最小化服务中断

2.2 回滚机制 ⏪

  • 命令: kubectl rollout undo deployment <DEPLOYMENT-NAME>
  • 作用: 快速恢复生产环境问题
  • 重要性: 保障系统稳定性和可恢复性

2.3 HPA(水平自动扩缩)📈

  • 功能: 根据负载自动调整Pod数量
  • 指标: 基于CPU、内存或自定义指标
  • 特点: 水平扩缩与垂直扩缩不同

💻 三、命令汇总

调度相关命令

# 查看节点标签
kubectl get nodes --show-labels
# 给节点添加标签
kubectl label nodes NODE-NAME KEY=VALUE
# 给节点添加污点
kubectl taint nodes NODE-NAME KEY=VALUE:EFFECT

部署管理命令

# 更新部署
kubectl apply -f deployment.yaml
# 查看部署状态
kubectl rollout status deployment/<DEPLOYMENT-NAME>
# 回滚部署
kubectl rollout undo deployment/<DEPLOYMENT-NAME>
# 查看部署历史
kubectl rollout history deployment/<DEPLOYMENT-NAME>

自动扩缩命令

# 创建HPA
kubectl autoscale deployment <DEPLOYMENT-NAME> --min=2 --max=10 --cpu-percent=80
# 查看HPA状态
kubectl get hpa

🆕 四、最新技术补充

4.1 HPA高级配置 🎛️

基于最新实践,HPA 现在支持更丰富的指标类型:

自定义指标扩缩容

apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
metadata:
  name: custom-hpa
spec:
  scaleTargetRef:
    apiVersion: apps/v1
    kind: Deployment
    name: my-app
  minReplicas: 2
  maxReplicas: 10
  metrics:
    - type: Pods
      pods:
        metric:
          name: packets-per-second
        target:
          type: AverageValue
          averageValue: 1k

4.2 滚动更新优化策略 ⚡

最新的滚动更新实践建议:

优化配置示例

apiVersion: apps/v1
kind: Deployment
metadata:
  name: optimized-deployment
spec:
  replicas: 4
  strategy:
    type: RollingUpdate
    rollingUpdate:
      maxSurge: 1 # 额外加1个副本平滑引入新版本
      maxUnavailable: 0 # 保证服务不减容
  template:
    metadata:
      labels:
        app: my-app
    spec:
      terminationGracePeriodSeconds: 60
      containers:
        - name: app
          image: my-app:v2
          readinessProbe:
            httpGet:
              path: /health
              port: 8080
            initialDelaySeconds: 3
            periodSeconds: 5
          lifecycle:
            preStop:
              exec:
                command: ["sh", "-c", "sleep 10"]

4.3 调度策略最佳实践 🎯

根据 2024-2025 年的最新实践:

节点亲和性配置示例

affinity:
  nodeAffinity:
    requiredDuringSchedulingIgnoredDuringExecution:
      nodeSelectorTerms:
        - matchExpressions:
            - key: gpu
              operator: In
              values:
                - "true"
    preferredDuringSchedulingIgnoredDuringExecution:
      - weight: 100
        preference:
          matchExpressions:
            - key: topology.kubernetes.io/zone
              operator: In
              values:
                - "az1"

📊 五、技术要点总结

调度机制核心要点 🎯

  1. NodeSelector: 简单但功能有限,适合基础场景
  2. 节点亲和性: 支持软硬策略,操作符丰富,灵活性强
  3. Pod亲和性: 基于拓扑域控制Pod间部署关系
  4. 污点容忍: 节点级别的排斥机制,配合Pod容忍使用

部署管理核心要点 🚀

  1. 滚动更新: 零停机部署,通过maxSurge和maxUnavailable控制
  2. 回滚机制: 支持快速回退到历史版本
  3. HPA: 基于指标自动扩缩,支持多种指标类型

最佳实践建议 💡

  1. 合理设置资源请求和限制: 确保调度决策准确
  2. 使用readinessProbe: 确保Pod就绪后才接收流量
  3. 配置优雅终止: 通过preStop和terminationGracePeriodSeconds实现平滑关闭
  4. 监控调度效果: 使用Prometheus等工具监控调度性能

🎓 六、学习建议

学习路径 📈

  1. 基础掌握: 先理解NodeSelector和基本亲和性配置
  2. 实践操作: 通过实际部署练习滚动更新和回滚
  3. 深入理解: 学习HPA的自定义指标配置
  4. 性能优化: 掌握调度策略的性能调优技巧

实践建议 🛠️

  • 从简单的NodeSelector开始,逐步学习复杂的亲和性配置
  • 在测试环境中充分练习滚动更新和回滚操作
  • 结合监控工具观察调度效果和性能指标
  • 关注Kubernetes版本的更新和新特性

0
上一篇 Kubernetes核心概念详解
下一篇 云计算专业学习方法与技巧