容器编排:Kubernetes高级调度策略
容器编排:Kubernetes高级调度策略
大家好,我是欧阳瑞(Rich Own)。今天想和大家聊聊Kubernetes高级调度策略这个重要话题。作为一个全栈开发者,Kubernetes已经成为容器编排的标准。今天就来分享一下Kubernetes的高级调度策略。
Kubernetes调度概述
调度器工作原理
Pod创建 → 调度器筛选 → 调度器评分 → 绑定节点调度策略类型
| 策略 | 说明 |
|---|---|
| NodeSelector | 节点标签选择 |
| NodeAffinity | 节点亲和性 |
| PodAffinity | Pod亲和性 |
| 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 zone=us-west-1 kubectl label nodes node-1 type=worker # 查看节点标签 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/PodAntiAffinity
Pod亲和性
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 dedicated=special:NoSchedule kubectl taint nodes node-2 dedicated=special:PreferNoSchedule kubectl taint nodes node-3 dedicated=special: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 · 容器编排 · 调度策略
