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 资源
先决条件:
- 您必须已配置 GitLab agent for 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在您的 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-nameCI/CD 变量可用于代理路径。更多信息,请参阅 变量使用位置。
创建环境模板
环境模板定义了要创建、更新或删除的 Kubernetes 资源。
默认环境模板 会创建一个 Namespace 并为 CI/CD 作业配置一个 RoleBinding。
要覆盖默认模板,请在代理目录中添加一个名为 default.yaml 的模板配置文件:
.gitlab/agents/<agent-name>/environment_templates/default.yaml支持的 Kubernetes 资源
以下 Kubernetes 资源 (kind) 受支持:
NamespaceServiceAccountRoleBinding- FluxCD Source Controller 对象:
GitRepositoryHelmRepositoryHelmChartBucketOCIRepository
- FluxCD Kustomize Controller 对象:
Kustomization
- FluxCD Helm Controller 对象:
HelmRelease
- FluxCD Notification Controller 对象:
AlertProviderReceiver
环境模板示例
以下示例创建一个命名空间,并授予组管理员对集群的访问权限。
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 作业日志