{{< details >}}

  • Tier: 专业版,旗舰版
  • Offering: JihuLab.com, 私有化部署

{{< /details >}}

{{< history >}}

  • 引入于极狐GitLab 17.9,使用名为 gitlab_managed_cluster_resources功能标志,默认禁用。

{{< /history >}}

使用极狐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

创建环境模板

环境模板定义了哪些 Kubernetes 资源会被创建、更新或删除。

默认环境模板 为 CI/CD 作业创建一个 Namespace 并配置一个 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

# Resource lifecycle configuration
apply_resources: on_start    # Resources are applied when environment is started/restarted
delete_resources: on_stop    # Resources are removed when environment is stopped

模板变量

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

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

所有变量应使用双花括号语法引用,例如:{{ .project.id }}

管理资源标签和注释

极狐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 环境标识。
environment_url 环境的链接。可选。
environment_page_url 极狐GitLab 环境页面的链接。
environment_tier 极狐GitLab 环境部署层级。
agent_id 代理 ID。
agent_name 代理名称。
agent_url 代理注册项目中的代理 URL。
project_id 极狐GitLab 项目 ID。
project_slug 极狐GitLab 项目标识。
project_path 极狐GitLab 项目的完整路径。
project_url 极狐GitLab 项目的链接。
template_name 使用的模板名称。

故障排除

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

  • 您的极狐GitLab 项目中的环境页面
  • 使用流水线中的功能时的 CI/CD 作业日志