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

相关推荐
李可以量化10 小时前
从零读懂配对交易(上):从套利本源到配对交易的核心逻辑
python·区块链·量化交易·通达信·qmt
codigger15 小时前
哈希算法:一根看不见的 "指纹",如何撑起整个互联网
后端·区块链·哈希算法·sha256
怒放de生命201019 小时前
web3之Solidity 变量与类型系统:从理解规则到写出合约
web3·区块链
guslegend2 天前
工程地基、Provider 与 ReAct 循环:Agent 核心能力的设计、实现与验收
人工智能·agent·react·架构设计·spring ai
EatFan2 天前
React 项目踩坑实录:useEffect 闭包陷阱、Context 性能陷阱与 React 18 升级避坑排查手册
前端·javascript·react.js·react·react hooks·useeffect·闭包陷阱
磐链科技3 天前
IM社交钱包开发成本是多少?影响项目报价、功能配置与开发周期的关键因素分析
区块链·智能合约
IvorySQL3 天前
PostgreSQL 日报| PostgreSQL JDBC 安全更新(10 月 10 日)
数据库·postgresql·区块链