kube-apiserver Pod配置自定义volume后无法读取准入控制器配置文件问题
问题根因
kube-apiserver Pod 清单的volumes字段中,configfiles和auditlog两个存储卷的字段拼写错误:将驼峰格式的标准字段hostPath写成了全小写的hostpath。Kubernetes 无法识别小写拼写的字段,会直接忽略这两个存储卷的挂载配置,导致容器内部的/etc/kubernetes/configs目录为空,所以启动时找不到准入控制器配置文件。
修复方法
- 编辑
/etc/kubernetes/manifests/kube-apiserver.yaml文件,找到volumes配置段,将两个小写的hostpath修改为标准驼峰格式hostPath,修改后的对应配置如下:
volumes: - name: auditlog hostPath: # 首字母P大写 path: /var/log/kubernetes type: DirectoryOrCreate - name: configfiles hostPath: # 首字母P大写 path: /etc/kubernetes/configs type: DirectoryOrCreate
- 保存修改后,kubelet 会自动检测到静态Pod配置变更,重建kube-apiserver实例,等待2分钟左右执行
kubectl get pods -n kube-system | grep kube-apiserver确认Pod状态为Running即可。
异常排查方案
如果修改后仍然报错,可按以下步骤排查:
- 确认主机上
/etc/kubernetes/configs目录及内部文件权限,当前你配置的600 root:root权限符合要求,无需调整 - 进入kube-apiserver容器内部验证文件是否挂载成功:执行
crictl ps | grep kube-apiserver获取容器ID,再执行crictl exec -it <容器ID> ls /etc/kubernetes/configs,确认能看到admission-controller.yaml文件 - 检查启动参数
--admission-control-config-file的路径与volumeMounts中configfiles的挂载路径是否完全一致,当前配置无问题
内容的提问来源于stack exchange,提问作者pocman
相关产品推荐
相关产品推荐

