Help us learn about your current experience with the documentation. Take the survey.

GitLab 管理的 Kubernetes 资源

  • Tier: Premium, Ultimate
  • Offering: GitLab.com, GitLab Self-Managed, GitLab Dedicated

使用 GitLab 管理的 Kubernetes 资源,可以通过环境模板来配置 Kubernetes 资源。环境模板可以:

  • 为新环境自动创建命名空间和服务账户
  • 通过角色绑定管理访问权限
  • 配置其他必需的 Kubernetes 资源

当开发人员部署应用程序时,GitLab 会根据环境模板创建相应的资源。

配置 GitLab 管理的 Kubernetes 资源

先决条件:

启用 Kubernetes 资源管理

在代理配置文件中

要启用资源管理,请修改代理配置文件以包含所需的权限:

ci_access:
  projects:
    - id: <your_group/your_project>
      access_as:
        ci_job: {}
      resource_management:
        enabled: true
  groups:
    - id: <your_other_group>
      access_as:
        ci_job: {}
      resource_management:
        enabled: true

在您的 CI/CD 作业中

要让代理管理环境的资源,请在部署作业中指定代理。例如:

deploy_review:
  stage: deploy
  script:
    - echo "Deploy a review app"
  environment:
    name: review/$CI_COMMIT_REF_SLUG
    kubernetes:
      agent: path/to/agent/project:agent-name

CI/CD 变量可用于代理路径。更多信息,请参阅 变量使用位置

创建环境模板

环境模板定义了要创建、更新或删除的 Kubernetes 资源。

默认环境模板 会创建一个 Namespace 并为 CI/CD 作业配置一个 RoleBinding

要覆盖默认模板,请在代理目录中添加一个名为 default.yaml 的模板配置文件:

.gitlab/agents/<agent-name>/environment_templates/default.yaml

支持的 Kubernetes 资源

以下 Kubernetes 资源 (kind) 受支持:

  • Namespace
  • ServiceAccount
  • RoleBinding
  • FluxCD Source Controller 对象:
    • GitRepository
    • HelmRepository
    • HelmChart
    • Bucket
    • OCIRepository
  • FluxCD Kustomize Controller 对象:
    • Kustomization
  • FluxCD Helm Controller 对象:
    • HelmRelease
  • FluxCD Notification Controller 对象:
    • Alert
    • Provider
    • Receiver

环境模板示例

以下示例创建一个命名空间,并授予组管理员对集群的访问权限。

objects:
  - apiVersion: v1
    kind: Namespace
    metadata:
      name: '{{ .environment.slug }}-{{ .project.id }}-{{ .agent.id }}'
  - apiVersion: rbac.authorization.k8s.io/v1
    kind: RoleBinding
    metadata:
      name: bind-{{ .environment.slug }}-{{ .project.id }}-{{ .agent.id }}
      namespace: '{{ .environment.slug }}-{{ .project.id }}-{{ .agent.id }}'
    subjects:
      - kind: Group
        apiGroup: rbac.authorization.k8s.io
        name: gitlab:project_env:{{ .project.id }}:{{ .environment.slug }}
    roleRef:
      apiGroup: rbac.authorization.k8s.io
      kind: ClusterRole
      name: admin

# 资源生命周期配置
apply_resources: on_start    # 环境启动/重启时应用资源
delete_resources: on_stop    # 环境停止时删除资源

模板变量

环境模板支持有限的变量替换。 以下变量可用:

类别 变量 描述 类型 未设置时的默认值
代理 {{ .agent.id }} 代理 ID。 Integer N/A
代理 {{ .agent.name }} 代理名称。 String N/A
代理 {{ .agent.url }} 代理 URL。 String N/A
环境 {{ .environment.id }} 环境 ID。 Integer N/A
环境 {{ .environment.name }} 环境名称。 String N/A
环境 {{ .environment.slug }} 环境 slug。 String N/A
环境 {{ .environment.url }} 环境 URL。 String 空字符串
环境 {{ .environment.page_url }} 环境页面 URL。 String N/A
环境 {{ .environment.tier }} 环境 tier。 String N/A
项目 {{ .project.id }} 项目 ID。 Integer N/A
项目 {{ .project.slug }} 项目 slug。 String N/A
项目 {{ .project.path }} 项目路径。 String N/A
项目 {{ .project.url }} 项目 URL。 String N/A
CI/CD 管道 {{ .ci_pipeline.id }} 管道 ID。 Integer
CI/CD 作业 {{ .ci_job.id }} CI/CD 作业 ID。 Integer
用户 {{ .user.id }} 用户 ID。 Integer N/A
用户 {{ .user.username }} 用户名。 String N/A

所有变量都应使用双大括号语法引用,例如:{{ .project.id }}。 有关所用模板化系统的更多信息,请参阅 text/template 文档。

资源生命周期管理

使用以下设置配置何时应删除 Kubernetes 资源:

# 永不删除资源
delete_resources: never

# 环境停止时删除资源
delete_resources: on_stop

默认值为 on_stop,在 默认环境模板 中指定。

管理的资源标签和注释

GitLab 创建的资源使用一系列标签和注释进行跟踪和故障排除。

GitLab 创建的每个资源上都定义了以下标签。值被有意留空:

  • agent.gitlab.com/id-<agent_id>: ""
  • agent.gitlab.com/project_id-<project_id>: ""
  • agent.gitlab.com/env-<gitlab_environment_slug>-<project_id>-<agent_id>: ""
  • agent.gitlab.com/environment_slug-<gitlab_environment_slug>: ""

在 GitLab 创建的每个资源上,都定义了一个 agent.gitlab.com/env-<gitlab_environment_slug>-<project_id>-<agent_id> 注释。 该注释的值是一个包含以下键的 JSON 对象:

描述
environment_id GitLab 环境 ID。
environment_name GitLab 环境名称。
environment_slug GitLab 环境 slug。
environment_url 环境的链接。可选。
environment_page_url GitLab 环境页面的链接。
environment_tier GitLab 环境部署 tier。
agent_id 代理 ID。
agent_name 代理名称。
agent_url 代理注册项目中的代理 URL。
project_id GitLab 项目 ID。
project_slug GitLab 项目 slug。
project_path 完整的 GitLab 项目路径。
project_url GitLab 项目的链接。
template_name 使用的模板名称。

故障排除

与管理 Kubernetes 资源相关的任何错误都可以在以下位置找到:

  • 您 GitLab 项目中的环境页面
  • 在管道中使用此功能时的 CI/CD 作业日志