【无标题】

一、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. 合理使用优先级和抢占,确保关键业务运行

个人观点,仅供参考

相关推荐
怕浪猫1 天前
领域特定语言(Domain-Specific Language, DSL)
设计模式·程序员·架构
怕浪猫1 天前
哪些软件对 Chrome DevTools Protocol 频繁使用
人工智能·架构·前端框架
武子康1 天前
调查研究-183 Apple container:Mac 上用轻量 VM 跑 Linux 容器,Swift 会改写本地容器体验吗?
docker·容器·apple
Jack201 天前
HarmonyOS APP事件驱动大揭秘
架构
Colin草率地做慢慢地改1 天前
关于QuickStore这个项目的重构(2)- 数据库建表文件
后端·面试·架构
candyTong2 天前
RTK 技术原理:一次典型会话里,80% 上下文是怎么省下来的
javascript·后端·架构
唐某人丶2 天前
从画架构图开始:架构分析与进阶指南
架构
jump_jump3 天前
流式 HTML:从 htmx 片段装配到浏览器原生增量渲染
javascript·性能优化·前端工程化
只会cv的前端攻城狮3 天前
DSL 领域模型架构设计:消灭 CRUD 重复工作
前端·架构