【无标题】

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

个人观点,仅供参考

相关推荐
夜雨深秋来2 分钟前
多租户 AI Agent 平台架构设计与实践
架构·langchain·agent
遇印记1 小时前
软考知识点
运维·服务器·网络
源远流长jerry1 小时前
Linux 网络收包机制:从网卡到 Socket 的完整路径
linux·运维·服务器·网络·网络协议·tcp/ip
qq_364371721 小时前
基于 Docker 容器化环境配置
运维·docker·容器
上海云盾安全满满2 小时前
选择接入高防IP后,源机是否还要带有防护
网络·网络协议·tcp/ip
GentleDevin2 小时前
Docker 运维常用命令大全
docker·容器·运维命令
运维全栈笔记2 小时前
基于Docker的MinIO单机部署与功能测试指南
运维·docker·容器
却尘3 小时前
让 AI 不再写到一半就开始"编":SDD + OpenSpec 上手指南
架构
treesforest3 小时前
IP地理位置精准查询:从城市级到街道级的定位技术深度解析
大数据·网络·网络协议·tcp/ip·安全·网络安全·ip