{{< details >}}
- Tier: 专业版,旗舰版
- Offering: JihuLab.com, 私有化部署
{{< /details >}}
{{< history >}}
- 引入于极狐GitLab 17.9,使用名为
gitlab_managed_cluster_resources
的功能标志,默认禁用。
{{< /history >}}
使用极狐GitLab 管理的 Kubernetes 资源来使用环境模板配置 Kubernetes 资源。环境模板可以:
- 自动为新的环境创建命名空间和服务账户
- 通过角色绑定管理访问权限
- 配置其他必需的 Kubernetes 资源
当开发人员部署应用程序时,极狐GitLab 会根据环境模板创建资源。
配置极狐GitLab 管理的 Kubernetes 资源
先决条件:
- 您必须配置了 极狐GitLab 的 Kubernetes 代理。
- 您已经授权代理访问相关项目或群组。
- (可选)您已经配置了 代理模拟以防止权限升级。默认的环境模板假设您已经配置了
ci_job
模拟。
开启 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 作业日志