Gitlab CI对接K8s集群未自动创建Namespace 任务报错命名空间不存在
问题根因
- 你当前配置的
namespace_overwrite_allowed参数仅允许Runner覆盖使用符合ci-.*规则的命名空间,本身不会触发自动创建命名空间的逻辑,这是最核心的报错原因。 - 未显式开启Runner自动创建命名空间的开关,也没有配置动态命名空间的生成规则,Runner不知道要为每条流水线生成独立命名空间。
- 即使配置了
clusterWideAccess: true,默认RBAC规则可能没有包含命名空间的创建权限,也会导致创建失败无法找到命名空间。
排查解决步骤
- 调整values.yml配置,补充自动创建命名空间的相关参数,修改后配置如下:
rbac: create: true clusterWideAccess: true # 显式配置ServiceAccount所需权限 rules: - apiGroups: [""] resources: ["namespaces", "pods", "pods/exec", "secrets", "services", "configmaps"] verbs: ["get", "list", "watch", "create", "patch", "delete", "update"] runners: config: | [[runners]] [runners.kubernetes] image = "ubuntu:20.04" namespace_overwrite_allowed = "ci-.*" # 开启自动创建命名空间 namespace_create = true # 配置命名空间前缀,Runner会自动拼接流水线ID生成唯一命名空间 namespace = "ci-" # 可选:作业完成后自动删除命名空间,避免集群资源残留 namespace_delete_after_job_completion = true generate_pod_labels = true
- 应用新的Runner配置,执行helm upgrade命令生效:
helm upgrade -f values.yml gitlab-runner gitlab/gitlab-runner -n <你部署GitLab Runner的命名空间名称> - 验证ServiceAccount权限是否正常,将命令中占位符替换为你的实际值后执行:
kubectl auth can-i create namespaces --as=system:serviceaccount:<Runner部署的命名空间>:gitlab-runner
返回yes代表权限配置正常,返回no需要手动补充对应的ClusterRole权限。 - 查看Runner Pod日志,确认配置加载无报错:
kubectl logs -f <GitLab Runner Pod名称> -n <Runner部署的命名空间> - 重新触发流水线验证即可,此时Runner会自动为每条流水线创建独立的
ci-前缀命名空间,实现环境隔离。 - 如果上述操作完成后仍有报错,检查你的GitLab Runner版本,14.x以下的旧版本存在动态命名空间创建的已知bug,建议升级到15.0以上的稳定版。
内容的提问来源于stack exchange,提问作者Ypsilik
相关产品推荐
相关产品推荐

