配置Kubernetes webhook后kube-apiserver报错找不到已存在的配置文件
问题根因
kube-apiserver以静态Pod形式运行时,容器文件系统与宿主机隔离,默认仅挂载了预设的必要宿主机目录。你仅添加了启动参数,未将/etc/kubernetes/webhook.yaml加入Pod的挂载列表,因此容器内部无法读取到宿主机上的该文件。
修复步骤
- 编辑
/etc/kubernetes/manifests/kube-apiserver.yaml,在spec.volumes配置段新增如下volume定义:
- name: webhook-config hostPath: path: /etc/kubernetes/webhook.yaml type: File
- 继续在同文件的
spec.containers[0].volumeMounts配置段新增挂载规则,将宿主机文件映射到容器内对应路径:
- mountPath: /etc/kubernetes/webhook.yaml name: webhook-config readOnly: true
- 保存修改后,kubelet会自动检测静态Pod清单变更,销毁旧的apiserver容器并启动新容器。可执行
kubectl get pods -n kube-system | grep kube-apiserver确认Pod状态为Running,查看容器日志无报错即修复完成。
补充说明
如果你后续修改为存放webhook相关配置的目录而非单个文件,只需将上述配置中的type改为Directory,调整对应path和mountPath为目录路径即可。文件权限保持600符合安全要求,不会影响读取。
内容的提问来源于stack exchange,提问作者NPatel
相关产品推荐
相关产品推荐

