当前位置: 首页 > news >正文

Kubernetes(五) 集群调度与存储管理完全指南

一、Kubernetes 集群调度机制

1.1 核心组件协作机制

Kubernetes 通过 ​​List-Watch​​ 机制实现组件间解耦与实时数据同步:

组件

核心职责

​kubectl/API客户端​

发起资源管理请求

​APIServer​

API入口、权限校验、存储交互

​etcd​

集群状态存储中心

​Controller Manager​

维持副本数、执行自愈逻辑

​Scheduler​

Pod调度决策

​kubelet​

节点代理,管理Pod生命周期

1.2 Pod创建完整流程(List-Watch模型)

graph TBA[kubectl创建请求] --> B[APIServer]B --> C[etcd存储元数据]C --> D[Controller Manager监听]D --> E[创建Pod副本]E --> F[Scheduler调度决策]F --> G[kubelet执行创建]G --> H[容器运行时启动]H --> I[状态上报完成]

​关键阶段说明:​

  • ​监听启动​​:三大组件(Controller Manager、Scheduler、kubelet)启动后监听APIServer

  • ​事件传递​​:etcd → APIServer → 各组件

  • ​调度决策​​:Scheduler基于算法选择合适节点

  • ​状态同步​​:kubelet上报状态,APIServer写入etcd

二、调度器(Scheduler)深度解析

2.1 调度核心目标

  • ​公平性​​:节点资源均衡分配

  • ​高效性​​:最大化集群资源利用率

  • ​性能​​:快速完成大批量Pod调度

  • ​灵活性​​:支持自定义策略和插件

2.2 调度流程两阶段

阶段一:过滤(Predicate)- 硬性条件
# 常见过滤算法
PodFitsResources    # 资源需求检查
PodFitsHost         # 节点名称匹配  
PodFitsHostPorts    # 端口冲突检测
PodSelectorMatches  # 标签匹配
NoDiskConflict      # 存储卷冲突检测
阶段二:优选(Priorities)- 打分排序
# 常见评分算法
LeastRequestedPriority      # 资源使用率越低分数越高
BalancedResourceAllocation  # CPU/内存使用率均衡性
ImageLocalityPriority       # 节点已有镜像优先

📌 ​​注意​​:若无节点满足Predicate条件,Pod将处于Pending状态持续重试。

三、节点调度策略详解

3.1 直接指定节点(nodeName)

apiVersion: v1
kind: Pod
spec:nodeName: node01  # 强制指定节点,跳过Scheduler

​特点​​:绕过调度器,kubelet直接负责启动。

3.2 标签选择调度(nodeSelector)

apiVersion: v1
kind: Pod  
spec:nodeSelector:disktype: ssd    # 匹配具有disktype=ssd标签的节点gpu: "true"      # 匹配GPU节点

​节点标签管理命令:​

# 添加标签
kubectl label nodes node01 disktype=ssd# 查看标签
kubectl get nodes --show-labels# 修改标签(需覆盖)
kubectl label nodes node02 disktype=hdd --overwrite# 删除标签
kubectl label nodes node02 disktype-

四、高级调度策略

4.1 节点亲和性(NodeAffinity)

硬策略(必须满足)
affinity:nodeAffinity:requiredDuringSchedulingIgnoredDuringExecution:nodeSelectorTerms:- matchExpressions:- key: kubernetes.io/hostnameoperator: NotInvalues: [node02]  # 禁止调度到node02
软策略(优先满足)
affinity:nodeAffinity:preferredDuringSchedulingIgnoredDuringExecution:- weight: 1preference:matchExpressions:- key: disktypeoperator: Invalues: [ssd]     # 优先SSD节点

4.2 Pod亲和性与反亲和性

策略类型

匹配对象

拓扑域支持

典型场景

podAffinity

Pod标签

同域部署(如Web+Cache)

podAntiAffinity

Pod标签

跨域分布(如高可用)

​Pod亲和性示例:​

affinity:podAffinity:requiredDuringSchedulingIgnoredDuringExecution:- labelSelector:matchExpressions:- key: appoperator: Invalues: [cache]topologyKey: kubernetes.io/hostname  # 同一节点

​Pod反亲和性示例:​

affinity:podAntiAffinity:preferredDuringSchedulingIgnoredDuringExecution:- weight: 100podAffinityTerm:labelSelector:matchExpressions:- key: appoperator: Invalues: [web]topologyKey: topology.kubernetes.io/zone  # 不同可用区

4.3 操作符大全

操作符

含义

示例

In

值在列表中

env In (dev, test)

NotIn

值不在列表中

env NotIn (prod)

Exists

标签存在

Exists zone

DoesNotExist

标签不存在

DoesNotExist debug

Gt/Lt

数值比较

version Gt 3

五、污点(Taint)与容忍(Toleration)

5.1 污点类型与效果

效果

说明

NoSchedule

禁止调度新Pod

PreferNoSchedule

尽量避免调度

NoExecute

禁止调度+驱逐现有Pod

5.2 污点管理命令

# 设置污点
kubectl taint node node01 key1=value1:NoSchedule# 查看污点
kubectl describe node node01 | grep Taints# 删除污点  
kubectl taint node node01 key1:NoSchedule-

5.3 容忍配置示例

tolerations:
- key: "key1"operator: "Equal"      # Equal需指定value,Exists忽略valuevalue: "value1" effect: "NoExecute"tolerationSeconds: 3600  # 被驱逐前可运行时间

六、节点维护操作

6.1 维护命令对比

命令

功能

适用场景

kubectl cordon <node>

标记不可调度

计划性维护准备

kubectl drain <node>

驱逐Pod+标记不可调度

节点下线维护

kubectl uncordon <node>

恢复可调度状态

维护完成后恢复

​完整驱逐命令:​

kubectl drain node01 \--ignore-daemonsets \--delete-local-data \--force

七、Pod生命周期状态

阶段

描述

​Pending​

已创建,调度或拉取镜像中

​Running​

容器已启动运行

​Succeeded​

成功终止(Job类)

​Failed​

容器异常退出

​Unknown​

状态无法获取

八、存储管理:PV与PVC

8.1 存储卷类型对比

类型

生命周期

共享性

持久性

场景

emptyDir

Pod生命周期

同Pod内

临时缓存

hostPath

节点生命周期

单节点

节点级存储

NFS

独立服务

多节点

✅✅

共享存储

PV+PVC

集群级别

按需分配

✅✅✅

生产环境

8.2 PV与PVC概念解析

  • ​PV(PersistentVolume)​​:运维定义的存储资源

  • ​PVC(PersistentVolumeClaim)​​:应用申请的存储需求

  • ​StorageClass​​:动态PV创建模板

8.3 PV生命周期状态

  • ​Available​​:可用状态,未绑定

  • ​Bound​​:已绑定到PVC

  • ​Released​​:PVC删除,资源待回收

  • ​Failed​​:自动回收失败

8.4 回收策略

  • ​Retain​​:手动清理数据

  • ​Delete​​:自动删除存储资源

  • ​Recycle​​:清空数据重新可用(仅NFS/HostPath)

九、实战案例:NFS+PV+PVC

9.1 静态PV配置

apiVersion: v1
kind: PersistentVolume
metadata:name: nfs-pv
spec:capacity:storage: 5GiaccessModes:- ReadWriteManynfs:path: /data/volumes/v1server: 192.168.10.10

9.2 PVC申请

apiVersion: v1
kind: PersistentVolumeClaim
metadata:name: nfs-pvc
spec:accessModes:- ReadWriteManyresources:requests:storage: 2Gi

9.3 Pod使用PVC

apiVersion: v1
kind: Pod
metadata:name: test-pod
spec:containers:- name: appimage: nginxvolumeMounts:- name: datamountPath: /var/www/htmlvolumes:- name: datapersistentVolumeClaim:claimName: nfs-pvc

十、动态存储:StorageClass

10.1 NFS动态供给架构

PVC请求 → StorageClass → Provisioner → 自动创建PV → 绑定

10.2 StorageClass配置

apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:name: nfs-sc
provisioner: nfs.csi.k8s.io
parameters:server: 192.168.10.10path: /data/dynamic

十一、故障排查指南

11.1 常用排查命令

# Pod状态检查
kubectl describe pod <pod-name>
kubectl logs <pod-name> [-c container]# 集群状态检查  
kubectl cluster-info
kubectl get nodes# 存储相关检查
kubectl get pv,pvc,sc
kubectl describe pvc <pvc-name># 节点级别检查
journalctl -xefu kubelet

11.2 常见问题与解决

  1. ​Pod一直Pending​​:检查资源、节点选择器、污点容忍

  2. ​调度失败​​:查看事件日志kubectl describe pod

  3. ​存储挂载失败​​:验证PV/PVC绑定状态、存储后端可访问性

  4. ​节点通信异常​​:检查kubelet服务状态、网络连通性

十二、核心总结

12.1 调度策略层次

  1. ​nodeName​​:直接绑定(跳过调度)

  2. ​nodeSelector​​:标签匹配调度

  3. ​nodeAffinity​​:亲和性调度

  4. ​污点/容忍​​:排斥与例外机制

  5. ​维护操作​​:cordon/drain节点管理

12.2 存储选择策略

  • ​临时数据​​:emptyDir

  • ​节点持久化​​:hostPath

  • ​共享存储​​:NFS+PV/PVC

  • ​大规模动态​​:StorageClass

12.3 一句话核心思想

​"调度是吸引与排斥的艺术,存储是持久与共享的平衡"​

通过合理组合调度策略和存储方案,可以构建出高效、稳定、可扩展的Kubernetes集群环境。

http://www.dtcms.com/a/508344.html

相关文章:

  • 数据过滤网站模板下载网站防采集 如何采集
  • DeepSeek再开源3B-MoE-OCR模型,视觉压缩高达20倍,支持复杂图表解析等多模态能力!
  • 网站推广话术与技巧codewars网站
  • 南京个人做网站怎么创建网站后台
  • 【Misc】图片隐写刷题 1
  • Spring Boot 3零基础教程,WEB 开发 Thymeleaf 模板引用 笔记43
  • 深圳哪里做网站好青岛一品网站建设
  • 中小企业网站的建设实践报告电脑怎么打不开建设银行网站
  • 万网搭建淘宝客网站门户网站建设招标文件
  • 9、dockerfile
  • Python 创建、修改、或删除 Excel 命名区域
  • 上海网站seo诊断免费店铺logo设计
  • 专业做礼品团购的网站wordpress调用分类id
  • 网站设计用那个软件网站开发绩效考核
  • 软件开发和网站开发区别app简易开发平台
  • 如何不用百度推广做网站wordpress都是不安全模块
  • 机械加工类网站云主机 多个网站
  • 基于I2C的stm32f103c8t6的硬件配置(寄存器实现)
  • Android 系统中进程间通信方式
  • YOLOv4:集大成的目标检测王者
  • 微服务架构
  • 软件制作工程师企业网站seo运营
  • 云服务器小网站制作wordpress企业显示不了
  • AIGC降重软件开发
  • 网站开发的预算用dw制作视频网站
  • 【项目】基于多设计模式下的同步异步日志系统 - 项目实现
  • 优秀个人网页成都白帽优化
  • 有没有个人做的网站赚流量费中山网站建设公司哪个好
  • 专业手机网站建设价格wordpress 图片响应式
  • 河南 网站建设wordpress电商插件下载