kubernetes 使用 PCV 创建 pod 报错 persistentvolume-controller waiting for a volume to be created

kubernetes 使用 PCV 创建 pod 报错 persistentvolume-controller waiting for a volume to be created

💡 原文中文,约900字,阅读约需2分钟。
📝

内容提要

在使用PVC创建Pod时遇到失败,经过日志排查发现是由于Kubernetes v1.20版本默认禁止使用selfLink。解决方法是编辑kube-apiserver.yaml文件,添加“--feature-gates=RemoveSelfLink=false”并更新配置。

🔎

延伸解读

selfLink 移除对存储插件的影响

Kubernetes v1.20 默认禁止 selfLink,这会影响依赖该字段的存储插件。文章中的 persistentvolume-controller 日志显示等待外部 provisioner 创建卷,正是由于 selfLink 被移除导致 provisioner 无法正常工作。因此,在升级到 v1.20 或更高版本时,需检查存储插件是否兼容。

临时解决方案的适用场景与风险

通过添加 --feature-gates=RemoveSelfLink=false 可以临时恢复 selfLink,解决 PVC 创建失败问题。但此方法仅适用于 v1.20 版本,且未来版本可能彻底移除该特性。长期来看,应升级或更换支持新版本的存储插件,避免依赖已弃用功能。

操作注意事项

修改 kube-apiserver.yaml 后,需使用 kubectl apply 命令应用更改,这会触发 kube-apiserver 重启。在生产环境中,应确保有高可用控制平面,避免单点故障。同时,修改前备份原文件,以便回滚。

❓

Q&A

在使用PVC创建Pod时遇到什么问题?

在使用PVC创建Pod时,发现无法创建成功,persistentvolume-controller在等待卷的创建。

为什么Kubernetes v1.20版本会导致Pod创建失败?

因为Kubernetes v1.20版本默认禁止使用selfLink,导致创建失败。

如何解决Kubernetes Pod创建失败的问题?

编辑kube-apiserver.yaml文件,添加'--feature-gates=RemoveSelfLink=false',然后更新配置。

更新kube-apiserver.yaml文件后需要执行什么命令?

需要执行'kubectl apply -f /etc/kubernetes/manifests/kube-apiserver.yaml'命令来应用更改。

persistentvolume-controller在等待什么?

persistentvolume-controller在等待卷的创建,可能由外部提供者或系统管理员手动创建。

如何检查Kubernetes Pod创建失败的原因?

可以通过查看日志来检查,通常会显示persistentvolume-controller的状态信息。

🏷️

标签

➡️

继续阅读