容器编排:Kubernetes高级调度策略

容器编排:Kubernetes高级调度策略

大家好,我是欧阳瑞(Rich Own)。今天想和大家聊聊Kubernetes高级调度策略这个重要话题。作为一个全栈开发者,Kubernetes已经成为容器编排的标准。今天就来分享一下Kubernetes的高级调度策略。

Kubernetes调度概述

调度器工作原理

复制代码
Pod创建 → 调度器筛选 → 调度器评分 → 绑定节点

调度策略类型

策略 说明
NodeSelector 节点标签选择
NodeAffinity 节点亲和性
PodAffinity Pod亲和性
Taints/Tolerations 污点与容忍
PriorityClass 优先级调度

NodeSelector

配置示例

yaml 复制代码
apiVersion: v1
kind: Pod
metadata:
  name: my-pod
spec:
  nodeSelector:
    zone: us-west-1
    type: worker
  containers:
    - name: my-container
      image: my-image:latest

节点标签管理

bash 复制代码
# 给节点添加标签
kubectl label nodes node-1 zone=us-west-1
kubectl label nodes node-1 type=worker

# 查看节点标签
kubectl get nodes --show-labels

NodeAffinity

硬亲和性

yaml 复制代码
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

软亲和性

yaml 复制代码
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:latest

PodAffinity/PodAntiAffinity

Pod亲和性

yaml 复制代码
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:latest

Pod反亲和性

yaml 复制代码
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:latest

Taints与Tolerations

设置污点

bash 复制代码
# 给节点添加污点
kubectl taint nodes node-1 dedicated=special:NoSchedule
kubectl taint nodes node-2 dedicated=special:PreferNoSchedule
kubectl taint nodes node-3 dedicated=special:NoExecute

容忍配置

yaml 复制代码
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:latest

PriorityClass

创建优先级

yaml 复制代码
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."

使用优先级

yaml 复制代码
apiVersion: v1
kind: Pod
metadata:
  name: my-pod
spec:
  priorityClassName: high-priority
  containers:
    - name: my-container
      image: my-image:latest

实战案例:资源调度优化

yaml 复制代码
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 · 容器编排 · 调度策略

相关推荐
垚森6 天前
我用 GLM-5.2 造了个炸裂主题后台:16 套主题随心切,可在线体验
ai·react
m0_3801671416 天前
面向开发者的Top10加密货币数据API(2026年最新)
大数据·人工智能·区块链
2601_9594801516 天前
Moneta Markets亿汇:“比特币高位修复风险偏好”
区块链
m0_3801671417 天前
加密货币价格 API、市场数据 API 与 分析 API 有什么区别?
人工智能·ai·区块链
LedgerNinja17 天前
AEGET:提升决策效率,助力交易者建立清晰的交易体系
区块链
2601_9619633817 天前
Spring Boot集成电子签章的7个典型问题与解决方案:从入门到生产级实践
大数据·人工智能·spring boot·python·区块链·智能合约
zhuhai_xigedian17 天前
物联网技术在源网荷储系统中的创新应用
大数据·运维·人工智能·区块链·能源
2601_9594801517 天前
Moneta Markets亿汇:“比特币长期预期继续升温”
区块链
2601_9619633817 天前
数据室里的“第一道锁”:电子保密协议(NDA)签署与防泄漏机制全解析
网络·人工智能·安全·金融·区块链·政务
HavenlonLabs18 天前
重塑链上未来的隐形基石:长期主义下的生态演进
大数据·人工智能·安全·区块链