You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Gitlab CI对接K8s集群未自动创建Namespace 任务报错命名空间不存在

问题根因
  • 你当前配置的namespace_overwrite_allowed参数仅允许Runner覆盖使用符合ci-.*规则的命名空间,本身不会触发自动创建命名空间的逻辑,这是最核心的报错原因。
  • 未显式开启Runner自动创建命名空间的开关,也没有配置动态命名空间的生成规则,Runner不知道要为每条流水线生成独立命名空间。
  • 即使配置了clusterWideAccess: true,默认RBAC规则可能没有包含命名空间的创建权限,也会导致创建失败无法找到命名空间。
排查解决步骤
  1. 调整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
  1. 应用新的Runner配置,执行helm upgrade命令生效:
    helm upgrade -f values.yml gitlab-runner gitlab/gitlab-runner -n <你部署GitLab Runner的命名空间名称>
  2. 验证ServiceAccount权限是否正常,将命令中占位符替换为你的实际值后执行:
    kubectl auth can-i create namespaces --as=system:serviceaccount:<Runner部署的命名空间>:gitlab-runner
    返回yes代表权限配置正常,返回no需要手动补充对应的ClusterRole权限。
  3. 查看Runner Pod日志,确认配置加载无报错:
    kubectl logs -f <GitLab Runner Pod名称> -n <Runner部署的命名空间>
  4. 重新触发流水线验证即可,此时Runner会自动为每条流水线创建独立的ci-前缀命名空间,实现环境隔离。
  5. 如果上述操作完成后仍有报错,检查你的GitLab Runner版本,14.x以下的旧版本存在动态命名空间创建的已知bug,建议升级到15.0以上的稳定版。

内容的提问来源于stack exchange,提问作者Ypsilik

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 03:45:07