创建启用Pod Security Admission的Kind集群时遇初始化超时问题求助
解决kind集群创建时API Server加载自定义配置超时问题
问题排查步骤
由于你使用了--retain参数,集群节点容器已被保留,先进入控制平面容器定位具体错误:
- 进入kind控制平面容器:
docker exec -it psa-with-cluster-pss-control-plane bash
- 查看kube-apiserver容器日志,这是定位启动失败原因的核心:
# 获取apiserver容器ID APISERVER_ID=$(crictl --runtime-endpoint unix:///run/containerd/containerd.sock ps -a | grep kube-apiserver | awk '{print $1}') # 查看容器日志 crictl --runtime-endpoint unix:///run/containerd/containerd.sock logs $APISERVER_ID
- 也可查看kubelet日志,了解容器启动失败的上下文信息:
journalctl -xeu kubelet
常见原因及解决方案
1. 自定义PS配置文件缺失
如果日志提示cluster-level-pss.yaml不存在,检查宿主机/tmp/pss目录下是否存在该文件:
ls -l /tmp/pss/cluster-level-pss.yaml
- 若文件不存在,创建符合K8s v1.24版本的PodSecurity配置文件,示例如下:
apiVersion: apiserver.config.k8s.io/v1 kind: AdmissionConfiguration plugins: - name: PodSecurity configuration: apiVersion: podsecurity.admission.config.k8s.io/v1beta1 kind: PodSecurityConfiguration defaults: enforce: "restricted" enforce-version: "v1.24" audit: "restricted" audit-version: "v1.24" warn: "restricted" warn-version: "v1.24" exemptions: usernames: [] runtimeClasses: [] namespaces: ["kube-system"]
2. 配置文件格式错误
K8s v1.24中PodSecurity Admission的配置API版本为podsecurity.admission.config.k8s.io/v1beta1(v1.25+升级为v1),若配置文件使用了错误的API版本或字段拼写错误,会直接导致apiserver启动失败。
- 对照K8s v1.24的官方规范修正文件内容,确保所有字段格式、参数正确。
3. 文件权限不足
apiserver进程以非root用户运行,若宿主机上的配置文件权限过严,容器内进程无法读取:
# 调整宿主机上配置文件的权限 chmod 644 /tmp/pss/cluster-level-pss.yaml
重新创建集群
修正问题后,先清理现有故障集群,再重新创建:
# 删除故障集群 kind delete cluster --name psa-with-cluster-pss # 重新创建集群 kind create cluster --name psa-with-cluster-pss --image kindest/node:v1.24.0 --config /tmp/pss/cluster-config.yaml
内容的提问来源于stack exchange,提问作者tstr
相关产品推荐
相关产品推荐

