容器编排: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 · 容器编排 · 调度策略

相关推荐
IvorySQL9 小时前
开源共建分论坛圆桌讨论:如何真正融入 PostgreSQL 社区?
postgresql·开源·区块链
m0_380167149 小时前
CoinGlass API vs Glassnode:全面对比分析
人工智能·ai·区块链
多年小白10 小时前
复盘】2026年5月21日(周四)
大数据·人工智能·ai·金融·区块链
kels889911 小时前
实时外汇api的节假日交易时间表,能自动判断休市吗?
开发语言·经验分享·笔记·python·金融·区块链
Richown13 小时前
自动化运维:Ansible与基础设施即代码
区块链·react
Richown13 小时前
微服务监控:Prometheus与Grafana实战
区块链·react
yoona102014 小时前
Web3 基础概念笔记:理解测试网交易、合约调用、钱包确认与链上验证
笔记·web3·区块链
穗余14 小时前
2026 AI x Web3 School共学营笔记-Day4
人工智能·区块链
Richown14 小时前
数据库优化:MySQL索引与查询优化
区块链·react