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

相关推荐
ZGG0035 小时前
真题拆解 05:ReAct 还是 Plan-and-Execute——规划范式怎么选
python·agent·react
eokred2 天前
图片预览组件的另一种设计:Headless、可组合、开箱即用
前端·react
IvorySQL3 天前
PostgreSQL 日报|内核多项缺陷修复与数据校验补丁推进(8 月 27 日)
数据库·postgresql·区块链
zhanghaha13143 天前
Python进阶教程:19_量化交易 零基础超详细入门教程
区块链
mykj15513 天前
Web3开发系统不是炒币,是互联网的“对账本”逻辑
web3·区块链·rwa·钱包区块链系统开发
MartinYeung54 天前
Uniswap v4 许可池:重塑 DeFi 流动性管理的范式革命
人工智能·区块链
磐链科技4 天前
智能合约开发中的Layer2适配:Rollup、侧链与状态通道实践
区块链·智能合约
ylj_dev5 天前
从 0 构建 AI Workload Platform(九):真实场景、最小控制台与开源发布
go·react·开源项目·工作流·ai agent
星辰徐哥5 天前
打破社媒营销信息差:具身交互智能打造全自动化KOL情报体系
运维·python·自动化·交互·react·数字人
Richown5 天前
Three.js 供应链三维可视化:全球物流轨迹、库存热力图与数字孪生的交互呈现
区块链·react