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

迁移到 GitLab agent for Kubernetes

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

要将您的 Kubernetes 集群与 GitLab 连接,您可以使用:

基于证书的集成在 GitLab 14.5 中已弃用。停用计划如下:

如果您正在使用基于证书的集成,应尽快迁移到其他工作流。

通常,对于依赖 GitLab CI/CD 的集群迁移,您可以使用 CI/CD 工作流。此工作流使用 agent 连接到您的集群。该 agent:

  • 不暴露在互联网上
  • 不需要 GitLab 的完整 cluster-admin 访问权限

基于证书的集成曾被用于 GitLab 的热门功能,如 GitLab 管理的应用、GitLab 管理的集群和 Auto DevOps。

查找基于证书的集群

您可以使用专用 API查找 GitLab 实例或组(包括子组和项目)中的所有基于证书的集群。使用组 ID 查询 API 将返回在提供组及其下级定义的所有基于证书的集群。

在这种情况下,不会返回在父组中定义的集群。此行为有助于组所有者找到需要迁移的所有集群。

禁用的集群也会被返回,以避免意外遗漏集群。

集群发现 API 不适用于个人命名空间。

迁移通用部署

要迁移通用部署:

  1. 安装 GitLab agent for Kubernetes
  2. 按照 CI/CD 工作流授权 agent 访问组和项目,或使用模拟身份验证保护访问
  3. 在左侧边栏,选择 Operate > Kubernetes clusters
  4. 从基于证书的集群部分,打开服务于相同环境范围的集群
  5. 选择 Details 标签页并关闭集群

从 GitLab 管理的集群迁移到 Kubernetes 资源

  • Tier: Premium, Ultimate

使用 GitLab 管理的集群时,GitLab 会为每个分支创建独立的服务账户和命名空间,并使用这些资源进行部署。

现在,您可以使用 GitLab 管理的 Kubernetes 资源 来自助服务资源,并增强安全控制。

使用 GitLab 管理的 Kubernetes 资源,您可以:

  • 安全地设置环境,无需人工干预
  • 控制资源创建和访问,而不给予开发者集群管理员权限
  • 当开发者创建新项目或环境时,提供自助服务功能
  • 允许开发者在专用或共享命名空间中部署测试和开发版本

先决条件:

要从 GitLab 管理的集群迁移到 GitLab 管理的 Kubernetes 资源:

  1. 如果您正在迁移现有环境,请通过 Kubernetes 仪表板Environments API 为环境配置 agent

  2. 在 agent 配置文件中配置 agent 以启用资源管理:

    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
  3. .gitlab/agents/<agent-name>/environment_templates/default.yaml 下创建环境模板。检查您基于证书的集群集成页面中 Namespace per environment 复选框的状态。

    如果 Namespace per environment 已选中,请使用以下模板:

    objects:
      - apiVersion: v1
        kind: Namespace
        metadata:
          name: project-{{ .project.id }}-{{ .environment.slug }}
      - apiVersion: rbac.authorization.k8s.io/v1
        kind: RoleBinding
        metadata:
          name: bind-{{ .agent.id }}-{{ .project.id }}-{{ .environment.slug }}
          namespace: project-{{ .project.id }}-{{ .environment.slug }}
        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

    如果 Namespace per environment 未选中,请使用以下模板:

    objects:
      - apiVersion: v1
        kind: Namespace
        metadata:
          name: project-{{ .project.id }}
      - apiVersion: rbac.authorization.k8s.io/v1
        kind: RoleBinding
        metadata:
          name: bind-{{ .agent.id }}-{{ .project.id }}-{{ .environment.slug }}
          namespace: project-{{ .project.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
  4. 在您的 CI/CD 配置中,使用带有 environment.kubernetes.agent: <path/to/agent/project:agent-name> 语法的 agent

  5. 在左侧边栏,选择 Operate > Kubernetes clusters

  6. 从基于证书的集群部分,打开服务于相同环境范围的集群

  7. 选择 Details 标签页并关闭集群

从 Auto DevOps 迁移

在您的 Auto DevOps 项目中,您可以使用 GitLab agent for Kubernetes 连接到您的 Kubernetes 集群。

先决条件

要从 Auto DevOps 迁移:

  1. 在 GitLab 中,转到您使用 Auto DevOps 的项目

  2. 添加三个变量。在左侧边栏,选择 Settings > CI/CD 并展开 Variables

    • 添加一个名为 KUBE_INGRESS_BASE_DOMAIN 的键,值为应用程序部署域名

    • 添加一个名为 KUBE_CONTEXT 的键,值为类似 path/to/agent/project:agent-name 的值 选择您选择的环境范围 如果您不确定 agent 的上下文,请编辑您的 .gitlab-ci.yml 文件并添加一个作业来查看可用的上下文:

       deploy:
        image:
          name: bitnami/kubectl:latest
          entrypoint: [""]
        script:
        - kubectl config get-contexts
    • 添加一个名为 KUBE_NAMESPACE 的键,值为您的部署目标 Kubernetes 命名空间。设置相同的环境范围

  3. 选择 Add variable

  4. 在左侧边栏,选择 Operate > Kubernetes clusters

  5. 从基于证书的集群部分,打开服务于相同环境范围的集群

  6. 选择 Details 标签页并禁用集群

  7. 编辑您的 .gitlab-ci.yml 文件并确保它使用 Auto DevOps 模板。例如:

    include:
      template: Auto-DevOps.gitlab-ci.yml
    
    variables:
      KUBE_INGRESS_BASE_DOMAIN: 74.220.23.215.nip.io
      KUBE_CONTEXT: "gitlab-examples/ops/gitops-demo/k8s-agents:demo-agent"
      KUBE_NAMESPACE: "demo-agent"
  8. 要测试您的流水线,在左侧边栏选择 Build > Pipelines,然后选择 New pipeline

示例,查看此项目

从 GitLab 管理的应用迁移

GitLab 管理的应用 (GMA) 在 GitLab 14.0 中已弃用,在 GitLab 15.0 中已移除。 Kubernetes agent 不支持它们。要从 GMA 迁移到 agent,请执行以下步骤:

  1. 从 GitLab 管理的应用迁移到集群管理项目
  2. 将集群管理项目迁移为使用 agent

迁移集群管理项目

请参阅如何将集群管理项目与 GitLab agent for Kubernetes 一起使用

迁移集群监控功能

一旦您使用 Kubernetes agent 将 Kubernetes 集群连接到 GitLab,在启用用户访问后,您可以使用 Kubernetes 仪表板