正式なドキュメントは英語版であり、この日本語訳はAI支援翻訳により作成された参考用のものです。日本語訳の一部の内容は人間によるレビューがまだ行われていないため、翻訳のタイミングにより英語版との間に差異が生じることがあります。最新かつ正確な情報については、英語版をご参照ください。

Kubernetes用GitLabエージェントに移行する

  • プラン: Free、Premium、Ultimate
  • 提供形態: GitLab.com、GitLab Self-Managed、GitLab Dedicated

KubernetesクラスターをGitLabに接続するには、次の方法があります:

証明書ベースのインテグレーションは、GitLabバージョン14.5で非推奨になりました。段階的廃止の計画は次のとおりです:

証明書ベースのインテグレーションを使用している場合は、できるだけ早く別のワークフローに移行してください。

一般的なルールとして、GitLab CI/CDに依存するクラスターを移行するには、CI/CDワークフローを使用できます。このワークフローでは、クラスターへの接続にエージェントを使用します。エージェント:

  • インターネットに公開されていません。
  • GitLabへの完全なcluster-adminアクセスを必要としません。

証明書ベースのインテグレーションは、GitLab管理アプリケーション、GitLab管理クラスター、Auto DevOpsなどの一般的なGitLab機能に使用されていました。

証明書ベースのクラスターを検索

サブグループやプロジェクトを含む、GitLabインスタンスまたはグループ内のすべての証明書ベースのクラスターを検索するには、専用のAPIを使用します。グループIDを使用してAPIをクエリすると、指定されたグループ以下で定義されているすべての証明書ベースのクラスターが返されます。

この場合、親グループで定義されたクラスターは返されません。この動作は、グループのオーナーが移行に必要なすべてのクラスターを見つけるのに役立ちます。

無効になっているクラスターも、誤ってクラスターを置き去りにしないように、同様に返されます。

クラスター検出APIは、個人のネームスペースでは機能しません。

一般的なデプロイを移行する

一般的なデプロイを移行するには:

  1. Kubernetes向けGitLabエージェントをインストールします。
  2. CI/CDワークフローに従って、エージェントがアクセスを承認するようにグループとプロジェクトを設定するか、代理でアクセスを保護します。
  3. 左側のサイドバーで、操作 > Kubernetesクラスターを選択します。
  4. 証明書ベースのクラスターセクションから、同じ環境スコープを提供するクラスターを開きます。
  5. 詳細タブを選択し、クラスターをオフにします。

GitLab管理クラスターからKubernetesリソースへの移行

  • プラン: Premium、Ultimate

GitLab管理クラスターを使用すると、GitLabはすべてのブランチとデプロイに対して個別のサービスアカウントとネームスペースを作成し、これらのリソースを使用してデプロイします。

GitLab管理のKubernetesリソースを使用すると、強化されたセキュリティ制御でリソースをセルフサービスできます。

GitLab管理のKubernetesリソースを使用すると、次のことができます:

  • 手動で介入することなく、環境を安全にセットアップします。
  • デベロッパーに管理クラスターの権限を付与せずに、リソースの作成とアクセスを制御します。
  • デベロッパーが新しいプロジェクトまたは環境を作成するときに、セルフサービス機能を提供します。
  • デベロッパーが専用または共有ネームスペースでテストバージョンと開発バージョンをデプロイできるようにします。

前提要件:

  • Kubernetes向けGitLabエージェントをインストールします。
  • 関連するプロジェクトまたはグループへのアクセスをエージェントに承認します。
  • 証明書ベースのクラスターインテグレーションページの環境ごとのネームスペースチェックボックスの状態を確認します。

GitLab管理クラスターからGitLab管理のKubernetesリソースに移行するには:

  1. 既存の環境を移行する場合は、Kubernetesのダッシュボードまたは環境APIのいずれかを介して、環境のエージェントを設定します。

  2. エージェントの設定ファイルでリソース管理をオンにするようにエージェントを設定します:

    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の下に環境テンプレートを作成します。証明書ベースのクラスターインテグレーションページの環境ごとのネームスペースチェックボックスの状態を確認します。

    環境ごとのネームスペースがオンになっている場合は、次のテンプレートを使用します:

    objects:
      - apiVersion: v1
        kind: Namespace
        metadata:
          # the `.legacy_namespace` produces something like:
          # '{{ .project.slug }}-{{ .project.id }}-{{ .environment.slug }}'
          # that is compatible with what the certificate-based cluster integration
          # would have generated.
          name: '{{ .legacy_namespace }}'
      - apiVersion: rbac.authorization.k8s.io/v1
        kind: RoleBinding
        metadata:
          name: 'bind-{{ .agent.id }}-{{ .project.id }}-{{ .environment.slug }}'
          namespace: '{{ .legacy_namespace }}'
        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

    環境ごとのネームスペースがオフになっている場合は、次のテンプレートを使用します:

    objects:
      - apiVersion: v1
        kind: Namespace
        metadata:
          name: '{{ .project.slug | slugify }}-{{ .project.id }}'
      - apiVersion: rbac.authorization.k8s.io/v1
        kind: RoleBinding
        metadata:
          name: 'bind-{{ .agent.id }}-{{ .project.id }}-{{ .environment.slug }}'
          namespace: '{{ .project.slug | slugify }}-{{ .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>構文でエージェントを使用します。

  5. 左側のサイドバーで、操作 > Kubernetesクラスターを選択します。

  6. 証明書ベースのクラスターセクションから、同じ環境スコープを提供するクラスターを開きます。

  7. 詳細タブを選択し、クラスターをオフにします。

Auto DevOpsから移行

Auto DevOpsプロジェクトでは、Kubernetes向けGitLabエージェントを使用してKubernetesクラスターに接続できます。

前提要件

Auto DevOpsから移行するには:

  1. GitLabで、Auto DevOpsを使用するプロジェクトに移動します。

  2. 3つの変数を追加します。左側のサイドバーで、設定 > CI/CDを選択し、変数を展開します。

    • アプリケーションデプロイドメインを値として、KUBE_INGRESS_BASE_DOMAINというキーを追加します。

    • path/to/agent/project:agent-nameのような値を持つKUBE_CONTEXTというキーを追加します。任意の環境スコープを選択します。エージェントのコンテキストが不明な場合は、.gitlab-ci.ymlファイルを編集し、ジョブを追加して、使用可能なコンテキストを確認します:

      deploy:
        image: debian:13-slim
        variables:
          KUBECTL_VERSION: v1.34
          DEBIAN_FRONTEND: noninteractive
        script:
          # Follows https://kubernetes.io/docs/tasks/tools/install-kubectl-linux/#install-using-native-package-management
          - apt-get update
          - apt-get install -y --no-install-recommends apt-transport-https ca-certificates curl gnupg
          - curl --fail --silent --show-error --location "https://pkgs.k8s.io/core:/stable:/${KUBECTL_VERSION}/deb/Release.key" | gpg --dearmor --output /etc/apt/keyrings/kubernetes-apt-keyring.gpg
          - chmod 644 /etc/apt/keyrings/kubernetes-apt-keyring.gpg
          - echo "deb [signed-by=/etc/apt/keyrings/kubernetes-apt-keyring.gpg] https://pkgs.k8s.io/core:/stable:/${KUBECTL_VERSION}/deb/ /" | tee /etc/apt/sources.list.d/kubernetes.list
          - chmod 644 /etc/apt/sources.list.d/kubernetes.list
          - apt-get update
          - apt-get install -y --no-install-recommends kubectl
          - kubectl config get-contexts
    • デプロイのターゲットとするKubernetesネームスペースの値を指定して、KUBE_NAMESPACEというキーを追加します。同じ環境スコープを設定します。

  3. 変数を追加するを選択します。

  4. 左側のサイドバーで、操作 > Kubernetesクラスターを選択します。

  5. 証明書ベースのクラスターセクションから、同じ環境スコープを提供するクラスターを開きます。

  6. 詳細タブを選択し、クラスターを無効にします。

  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. パイプラインをテストするには、左側のサイドバーでビルド > パイプラインパイプラインを新規作成の順に選択します。

例については、このプロジェクトを表示してください。

GitLab管理アプリケーションから移行

GitLab管理アプリケーション(GMA)はGitLab 14.0で非推奨となり、GitLab 15.0で削除されました。Kubernetes向けエージェントはそれらをサポートしていません。GMAからエージェントに移行するには、次の手順を実行します:

  1. GitLab管理アプリケーションからクラスター管理プロジェクトに移行します
  2. クラスター管理プロジェクトを移行してエージェントを使用します

クラスター管理プロジェクトを移行する

Kubernetes向けGitLabエージェントでクラスター管理プロジェクトを使用する方法を参照してください。

クラスターモニタリング機能を移行する

KubernetesクラスターをKubernetes向けGitLabエージェントを使用してGitLabに接続すると、Kubernetesのダッシュボードを有効にした後、ユーザーアクセスを使用できます。