如何获取K8s中创建失败的Pod的最终YAML定义?
解决K8s StatefulSet Pod创建失败及获取Webhook修改后Pod YAML的方法
错误原因说明
你遇到的具体错误是:
FailedCreate statefulset/my-pod create Pod my-pod in StatefulSet my-pod failed error: Pod "my-pod" is invalid: spec.containers[0].volumeMounts[5].mountPath: Invalid value: "/path/to/folder": must be unique
这是因为Pod容器的volumeMounts列表中,有两个挂载项使用了相同的/path/to/folder路径,K8s要求每个容器内的挂载路径必须唯一。
获取Webhook处理后的最终Pod YAML的方法
用server端dry-run预览最终YAML
先导出当前StatefulSet的原始定义:kubectl get statefulset my-pod -o yaml > my-pod-sts.yaml再通过K8s API服务器的dry-run功能,生成经过所有Webhook处理后的Pod最终定义(不会实际创建Pod):
kubectl create pod my-pod --dry-run=server -o yaml --from=statefulset/my-pod > my-pod-final.yaml打开生成的
my-pod-final.yaml,就能看到Webhook修改后的完整Pod配置,直接定位重复的挂载路径。查看Webhook Pod日志追踪修改细节
如果有权限访问Webhook的运行Pod,可查看其日志了解具体修改逻辑:kubectl logs <webhook-pod-name> -n <webhook-namespace>日志中通常会记录对资源YAML的修改操作,能帮你找到挂载路径重复的根源。
验证字段约束确认规则
可通过kubectl explain查看挂载路径的官方约束说明:kubectl explain pod.spec.containers.volumeMounts.mountPath
内容的提问来源于stack exchange,提问作者User12547645
相关产品推荐
相关产品推荐

