容器编排Kubernetes高级调度策略大家好我是欧阳瑞Rich Own。今天想和大家聊聊Kubernetes高级调度策略这个重要话题。作为一个全栈开发者Kubernetes已经成为容器编排的标准。今天就来分享一下Kubernetes的高级调度策略。Kubernetes调度概述调度器工作原理Pod创建 → 调度器筛选 → 调度器评分 → 绑定节点调度策略类型策略说明NodeSelector节点标签选择NodeAffinity节点亲和性PodAffinityPod亲和性Taints/Tolerations污点与容忍PriorityClass优先级调度NodeSelector配置示例apiVersion: v1 kind: Pod metadata: name: my-pod spec: nodeSelector: zone: us-west-1 type: worker containers: - name: my-container image: my-image:latest节点标签管理# 给节点添加标签 kubectl label nodes node-1 zoneus-west-1 kubectl label nodes node-1 typeworker # 查看节点标签 kubectl get nodes --show-labelsNodeAffinity硬亲和性apiVersion: v1 kind: Pod metadata: name: my-pod spec: affinity: nodeAffinity: requiredDuringSchedulingIgnoredDuringExecution: nodeSelectorTerms: - matchExpressions: - key: zone operator: In values: - us-west-1 - us-west-2 containers: - name: my-container image: my-image:latest软亲和性apiVersion: v1 kind: Pod metadata: name: my-pod spec: affinity: nodeAffinity: preferredDuringSchedulingIgnoredDuringExecution: - weight: 100 preference: matchExpressions: - key: type operator: In values: - high-performance containers: - name: my-container image: my-image:latestPodAffinity/PodAntiAffinityPod亲和性apiVersion: v1 kind: Pod metadata: name: my-pod spec: affinity: podAffinity: requiredDuringSchedulingIgnoredDuringExecution: - labelSelector: matchExpressions: - key: app operator: In values: - backend topologyKey: kubernetes.io/hostname containers: - name: my-container image: my-image:latestPod反亲和性apiVersion: v1 kind: Pod metadata: name: my-pod spec: affinity: podAntiAffinity: preferredDuringSchedulingIgnoredDuringExecution: - weight: 100 podAffinityTerm: labelSelector: matchExpressions: - key: app operator: In values: - database topologyKey: kubernetes.io/hostname containers: - name: my-container image: my-image:latestTaints与Tolerations设置污点# 给节点添加污点 kubectl taint nodes node-1 dedicatedspecial:NoSchedule kubectl taint nodes node-2 dedicatedspecial:PreferNoSchedule kubectl taint nodes node-3 dedicatedspecial:NoExecute容忍配置apiVersion: v1 kind: Pod metadata: name: my-pod spec: tolerations: - key: dedicated operator: Equal value: special effect: NoSchedule containers: - name: my-container image: my-image:latestPriorityClass创建优先级apiVersion: scheduling.k8s.io/v1 kind: PriorityClass metadata: name: high-priority value: 1000000 globalDefault: false description: High priority pods. --- apiVersion: scheduling.k8s.io/v1 kind: PriorityClass metadata: name: low-priority value: 1000 globalDefault: false description: Low priority pods.使用优先级apiVersion: v1 kind: Pod metadata: name: my-pod spec: priorityClassName: high-priority containers: - name: my-container image: my-image:latest实战案例资源调度优化apiVersion: v1 kind: Pod metadata: name: database-pod spec: affinity: nodeAffinity: requiredDuringSchedulingIgnoredDuringExecution: nodeSelectorTerms: - matchExpressions: - key: type operator: In values: - database podAntiAffinity: requiredDuringSchedulingIgnoredDuringExecution: - labelSelector: matchExpressions: - key: app operator: In values: - database topologyKey: kubernetes.io/hostname tolerations: - key: dedicated operator: Equal value: database effect: NoSchedule priorityClassName: high-priority containers: - name: database image: postgres:latest resources: requests: memory: 4Gi cpu: 2 limits: memory: 8Gi cpu: 4总结Kubernetes提供了丰富的调度策略可以实现精细化的资源调度。通过合理配置亲和性、污点容忍和优先级可以优化集群资源利用和应用可用性。我的鬃狮蜥Hash对调度也有自己的理解——它总是选择最合适的位置捕捉蟋蟀这也许就是自然界的调度策略吧如果你对Kubernetes调度有任何问题欢迎留言交流我是欧阳瑞极客之路永无止境技术栈Kubernetes · 容器编排 · 调度策略