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

相关推荐
北冥you鱼15 小时前
OpenZeppelin Contracts 完全指南:从入门到精通,构建安全的智能合约
安全·区块链·智能合约
财迅通Ai2 天前
科源制药领投企业航脑科技布局梳理:北大实验室、EXROBOT与工作犬脑电课题
人工智能·科技·区块链·科源制药
名字还没想好☜2 天前
React setState 连续调用「丢更新」排查:批量更新与函数式更新
前端·javascript·react.js·react·usestate
sugar__salt2 天前
DeepSeek-R1 WebGPU (1):在浏览器里跑大模型
react.js·reactjs·react·端模型
ZDGJ60992 天前
外盘与国内期货交易品种核心区
区块链
维克兜率天3 天前
【维克】量化交易的法律边界:程序化交易和“拔网线“的区别
区块链
Web3_Daisy3 天前
什么是 Robinhood Chain?
大数据·人工智能·web3·区块链
minhuan3 天前
大模型Agent核心架构,详解ReAct、Plan-and-Execute、Reason-Act-Observe循环21.6
react·大模型应用·agent架构·ai应用架构设计·plan-execute
名字还没想好☜3 天前
React useLayoutEffect vs useEffect:页面闪一下的元凶与正确修法
前端·javascript·react.js·react·hooks
黄焖鸡能干四碗3 天前
IT数据架构规划设计方案(PPT文件)
大数据·网络·数据库·人工智能·架构·区块链