【无标题】

一、Kubernetes调度概述

Kubernetes调度器负责将Pod分配到合适的节点:

调度流程:

  1. 过滤不满足条件的节点
  2. 对合格节点打分
  3. 选择最高分节点

二、调度策略

1. 节点亲和性

yaml 复制代码
apiVersion: v1
kind: Pod
metadata:
  name: with-node-affinity
spec:
  affinity:
    nodeAffinity:
      requiredDuringSchedulingIgnoredDuringExecution:
        nodeSelectorTerms:
          - matchExpressions:
              - key: disktype
                operator: In
                values:
                  - ssd
      preferredDuringSchedulingIgnoredDuringExecution:
        - weight: 1
          preference:
            matchExpressions:
              - key: zone
                operator: In
                values:
                  - us-east-1a

2. Pod亲和性

yaml 复制代码
apiVersion: v1
kind: Pod
metadata:
  name: with-pod-affinity
spec:
  affinity:
    podAffinity:
      requiredDuringSchedulingIgnoredDuringExecution:
        - labelSelector:
            matchLabels:
              app: redis
          topologyKey: kubernetes.io/hostname
    podAntiAffinity:
      preferredDuringSchedulingIgnoredDuringExecution:
        - weight: 100
          podAffinityTerm:
            labelSelector:
              matchLabels:
                app: web
            topologyKey: topology.kubernetes.io/zone

3. 污点和容忍

bash 复制代码
# 添加污点
kubectl taint nodes node1 key=value:NoSchedule

# 添加容忍
apiVersion: v1
kind: Pod
metadata:
  name: tolerating
spec:
  tolerations:
    - key: "key"
      operator: "Equal"
      value: "value"
      effect: "NoSchedule"

三、资源管理

1. 资源请求和限制

yaml 复制代码
apiVersion: v1
kind: Pod
metadata:
  name: resources
spec:
  containers:
    - name: app
      image: nginx
      resources:
        requests:
          memory: "128Mi"
          cpu: "250m"
        limits:
          memory: "256Mi"
          cpu: "500m"

2. LimitRange

yaml 复制代码
apiVersion: v1
kind: LimitRange
metadata:
  name: limits
spec:
  limits:
    - default:
        cpu: "500m"
        memory: "256Mi"
      defaultRequest:
        cpu: "200m"
        memory: "128Mi"
      type: Container

3. ResourceQuota

yaml 复制代码
apiVersion: v1
kind: ResourceQuota
metadata:
  name: quota
spec:
  hard:
    requests.cpu: "4"
    requests.memory: "8Gi"
    limits.cpu: "8"
    limits.memory: "16Gi"
    pods: "20"

四、调度策略配置

1. 自定义调度器

yaml 复制代码
apiVersion: v1
kind: Pod
metadata:
  name: custom-scheduler
spec:
  schedulerName: my-custom-scheduler
  containers:
    - name: nginx
      image: nginx

2. 优先级和抢占

yaml 复制代码
apiVersion: scheduling.k8s.io/v1
kind: PriorityClass
metadata:
  name: high-priority
value: 1000000
globalDefault: false
description: "高优先级"

五、总结

Kubernetes调度核心要点:

  • 节点亲和性:控制Pod调度到特定节点
  • Pod亲和性:控制Pod共置或分散
  • 污点容忍:特殊节点管理
  • 资源管理:请求和限制

六、调度器配置

1. 自定义调度器

yaml 复制代码
apiVersion: v1
kind: Pod
metadata:
  name: custom-scheduler-pod
spec:
  schedulerName: my-custom-scheduler
  containers:
    - name: nginx
      image: nginx

2. 优先级和抢占机制

yaml 复制代码
apiVersion: scheduling.k8s.io/v1
kind: PriorityClass
metadata:
  name: high-priority
value: 1000000
globalDefault: false
description: "高优先级任务"
---
apiVersion: v1
kind: Pod
metadata:
  name: high-priority-pod
spec:
  priorityClassName: high-priority
  containers:
    - name: app
      image: myapp

七、资源配额管理

1. 命名空间配额

yaml 复制代码
apiVersion: v1
kind: ResourceQuota
metadata:
  name: dev-quota
spec:
  hard:
    requests.cpu: "10"
    requests.memory: "20Gi"
    limits.cpu: "20"
    limits.memory: "40Gi"
    pods: "50"
    services: "10"
    secrets: "20"
    configmaps: "20"

2. 限制范围

yaml 复制代码
apiVersion: v1
kind: LimitRange
metadata:
  name: default-limits
spec:
  limits:
    - default:
        cpu: "500m"
        memory: "256Mi"
      defaultRequest:
        cpu: "200m"
        memory: "128Mi"
      max:
        cpu: "4"
        memory: "8Gi"
      min:
        cpu: "50m"
        memory: "64Mi"
      type: Container

八、总结

Kubernetes调度与资源管理核心要点:

  • 节点亲和性:控制Pod调度到特定节点,满足特殊硬件需求
  • Pod亲和性:控制Pod共置或分散,优化通信或隔离
  • 污点容忍:特殊节点管理,如GPU节点、专用硬件
  • 资源管理:请求/限制确保服务质量,配额防止资源滥用

最佳实践:

  1. 生产环境务必设置资源请求和限制
  2. 使用LimitRange为命名空间设置默认值
  3. 使用ResourceQuota控制命名空间资源总量
  4. 合理使用优先级和抢占,确保关键业务运行

个人观点,仅供参考

相关推荐
星恒讯工业路由器3 小时前
AGV集群通信架构:从单点到百台级调度的挑战与对策
网络·物联网·信息与通信·工业物联网·通信架构·agv集群·实时调度
夜月yeyue4 小时前
AUTOSAR CP 从上电到 Runnable
c语言·网络·tcp/ip·车载系统
lsh曙光4 小时前
延时at指令和定时cron指令
linux·服务器·网络
treesforest4 小时前
IP定位技术在网络犯罪侦查中的应用与价值
网络·网络协议·tcp/ip·网络安全·ip归属地查询·反欺诈
XR1234567885 小时前
企业全光网络架构选型技术白皮书:从物理层到运维层的全链路分析
运维·网络·架构
智慧物业老杨5 小时前
物业如何做好预算管理?落地架构逻辑
人工智能·架构
微学AI5 小时前
一根针指向所有方向:挂谷猜想对 LLM Agent 技能-记忆架构的启示
开发语言·人工智能·架构·挂谷猜想
萧瑟余晖6 小时前
Java深入解析篇九之NIO详解
java·网络·nio
小王C语言7 小时前
【7. 实现登录注册模块】:实现会话管理、注册/登录/退出 API
网络·c++
江湖有缘7 小时前
Docker实战 :使用Docker部署OneTerm堡垒机
运维·docker·容器