CloudOS5.0 X10000 iSCSI 单写 PVC,Pod 固定调度 worker04 完整方案
故障根因
X10000 提供 iSCSI、PVC 访问模式为ReadWriteOnce (RWO 单节点独占读写),PV 仅在 worker04 完成 iSCSI 挂载;Pod 被调度到 worker07 等其他节点时,目标节点无对应 iSCSI lun 挂载,卷挂载失败、Pod 创建报错。RWO 存储天然约束:所有使用该 PVC 的 Pod 必须固定运行在 PV 所在 worker04。
方案一:CloudOS WEB 界面操作(优先,可视化修改 Deployment/POD 调度)
1、节点打标签(绑定 worker04)
CloudOS→资源→集群→节点管理,找到worker04节点
编辑节点→添加标签:storage-node=worker04,保存
其他节点不加该标签,调度器只能匹配 worker04
2、修改应用部署配置,强制调度至 worker04
应用工厂→找到对应 POD 所属应用→编辑部署配置
进入调度策略 / 节点选择配置项:
节点选择器:填入storage-node:worker04(nodeSelector 规则)
保存配置,删除异常 pending 的 Pod,控制器自动重建 Pod 至 worker04
3、紧急临时强制调度(已经 pending 的 Pod 快速落地)
WEB 无即时迁移按钮,采用重建:删除异常 Pod,依托上面 nodeSelector 规则,新建 Pod 直接落到 worker04。
方案二:后台 kubectl 命令行(应急快速落地)
1、给 worker04 打节点标签
bash
运行
kubectl label nodes worker04 storage-node=worker04
2、修改 Deployment 增加 nodeSelector,固定节点
bash
运行
#编辑部署
kubectl edit deploy 应用名 -n 命名空间
#在spec.template.spec下新增配置
spec:
template:
spec:
nodeSelector:
storage-node: worker04
保存退出,Deployment 滚动重建 Pod,全部调度 worker04。
3、极端锁定:nodeName 强制写死节点(跳过调度器,必跑 worker04)
yaml
spec:
template:
spec:
nodeName: worker04
nodeName 优先级最高,直接绕过 kube-scheduler,强制在指定节点创建 Pod。
方案三:从 PV 源头约束(根治,推荐长期配置)
RWO iSCSI PV 可在 PV 配置里写入nodeAffinity,从存储层限制 Pod 只能调度 PV 所在节点,后续新建 PVC/POD 自动约束 worker04:
yaml
apiVersion: v1
kind: PersistentVolume
spec:
nodeAffinity:
required:
nodeSelectorTerms:
- matchExpressions:
- key: kubernetes.io/hostname
operator: In
values:
- worker04
CloudOS WEB 编辑对应 PV→高级配置→节点亲和绑定 worker04,一劳永逸,后续不会再调度其他节点。
补充优化:污点屏蔽其他节点(防止后续误调度)
如需彻底杜绝 Pod 跑到非 worker04 节点,给 worker07 等其余节点添加污点:
bash
运行
kubectl taint nodes worker07 storage=readonly:NoSchedule
无对应容忍规则的 Pod 无法调度到此节点。
总结最简操作步骤
worker04 打标签storage-node=worker04;
应用部署配置添加节点选择storage-node:worker04;
删除异常 Pod,自动重建至 worker04;
长期优化:PV 绑定 nodeAffinity 锁定 worker04。
暂无评论
worker04 节点上。当 Pod 被调度到其他节点(如 worker07)时,调度器会因跨节点挂载限制而拒绝创建。worker04 节点,或者解决此类调度问题,您可以采用以下几种方法:worker04 节点上,最直接的方法是绕过 Kubernetes 的默认调度器,直接在 Pod 的 YAML 配置中硬编码节点名称。spec 层级下添加 nodeName 字段:1apiVersion: apps/v1
2kind: Deployment
3metadata:
4 name: your-app
5spec:
6 template:
7 spec:
8 nodeName: worker04 # 强制指定调度到 worker04 节点
9 containers:
10 - name: app-container
11 image: your-image
12 volumeMounts: ...worker04 节点宕机或资源耗尽,Pod 将无法自动迁移并持续处于 Pending 状态。建议仅在排查故障或明确知道目标节点可用时使用。nodeName,节点亲和性允许调度器在满足条件的前提下进行更智能的调度,是生产环境推荐的精准调度方式。worker04 节点的标签(例如 kubernetes.io/hostname=worker04),然后在 Pod 中添加亲和性规则:1spec:
2 affinity:
3 nodeAffinity:
4 requiredDuringSchedulingIgnoredDuringExecution:
5 nodeSelectorTerms:
6 - matchExpressions:
7 - key: kubernetes.io/hostname
8 operator: In
9 values:
10 - worker04worker04 主机名的节点上。kubectl get pvc <pvc-name> 找到对应的 PV。spec.nodeAffinity 规则,确认它是否明确要求了特定的拓扑域(如特定 AZ 或节点名)。worker04 节点的标签是否满足该 PV 的要求。如果不满足,可以通过给 worker04 补充对应标签来解决:1kubectl label nodes worker04 topology.kubernetes.io/zOne=your-zone暂无评论
亲~登录后才可以操作哦!
确定你的邮箱还未认证,请认证邮箱或绑定手机后进行当前操作
举报
×
侵犯我的权益
×
侵犯了我企业的权益
×
抄袭了我的内容
×
原文链接或出处
诽谤我
×
对根叔社区有害的内容
×
不规范转载
×
举报说明
暂无评论