Kubernetes向けGitLabエージェントへ移行する
- プラン: Free、Premium、Ultimate
- 提供形態: GitLab.com、GitLab Self-Managed、GitLab Dedicated
GitLabとKubernetesクラスターを接続するには、以下を使用できます:
証明書ベースのインテグレーションはGitLab 14.5で非推奨になりました。廃止予定計画は次のとおりです:
証明書ベースのインテグレーションを使用している場合は、できるだけ早く別のワークフローに移行する必要があります。
原則として、GitLab CI/CDに依存するクラスターを移行するには、CI/CDワークフローを使用できます。このワークフローは、エージェントを使用してクラスターに接続します。エージェントは次のとおりです:
- インターネットに公開されていません。
- フル
cluster-adminアクセスをGitLabに要求しません。
証明書ベースのインテグレーションは、GitLabマネージドApp、GitLabマネージドクラスター、およびAuto DevOpsのような人気のあるGitLab機能に使用されていました。
証明書ベースのクラスターを検索する
サブグループやプロジェクトを含む、GitLabインスタンスまたはグループ内のすべての証明書ベースのクラスターは、専用のAPIを使用して検索できます。グループIDでAPIをクエリすると、指定されたグループまたはそれ以下で定義されているすべての証明書ベースのクラスターが返されます。
この場合、親グループで定義されているクラスターは返されません。この動作により、グループオーナーは移行する必要のあるすべてのクラスターを見つけることができます。
無効化されたクラスターも、誤ってクラスターが置き去りにされるのを防ぐために返されます。
クラスター検出APIは個人のネームスペースでは機能しません。
汎用的なデプロイを移行する
汎用的なデプロイを移行するには:
- Kubernetes向けGitLabエージェントをインストールします。
- CI/CDワークフローに従って、グループとプロジェクトへのエージェントアクセスを承認するか、代理でアクセスを保護するかします。
- 左側のサイドバーで、操作 > Kubernetesクラスターを選択します。
- 証明書ベースのクラスターセクションから、同じ環境スコープを提供するクラスターを開きます。
- 詳細タブを選択し、クラスターをオフにします。
GitLabマネージドクラスターからKubernetesリソースへ移行する
- プラン: Premium、Ultimate
GitLabマネージドクラスターを使用すると、GitLabはブランチごとに個別のサービスアカウントとネームスペースを作成し、これらのリソースを使用してデプロイします。
これで、GitLabマネージドKubernetesリソースを使用して、セキュリティ制御が強化されたリソースをセルフサービスできます。
GitLabマネージドKubernetesリソースを使用すると、次のことができます:
- 手動での介入なしに、環境を安全に設定できます。
- デベロッパーに管理者クラスター権限を与えることなく、リソースの作成とアクセスを制御できます。
- 新しいプロジェクトや環境を作成する際に、デベロッパー向けにセルフサービス機能を提供します。
- デベロッパーがテストバージョンと開発バージョンを専用または共有のネームスペースにデプロイできるようにします。
前提条件:
- Kubernetes向けGitLabエージェントをインストールします。
- 関連するプロジェクトまたはグループにアクセスするようにエージェントを承認します。
- 証明書ベースのクラスターインテグレーションページで、環境ごとのネームスペースチェックボックスのステータスを確認します。
GitLabマネージドクラスターからGitLabマネージドKubernetesリソースへ移行するには:
既存の環境を移行する場合は、Kubernetes用ダッシュボードまたは環境APIのいずれかを介して、その環境のエージェントを設定します。
エージェントの設定ファイルでリソース管理を有効にするようにエージェントを設定します:
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.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: adminCI/CD設定で、
environment.kubernetes.agent: <path/to/agent/project:agent-name>構文を持つエージェントを使用します。左側のサイドバーで、操作 > Kubernetesクラスターを選択します。
証明書ベースのクラスターセクションから、同じ環境スコープを提供するクラスターを開きます。
詳細タブを選択し、クラスターをオフにします。
Auto DevOpsから移行する
Auto DevOpsプロジェクトで、Kubernetes向けGitLabエージェントを使用してKubernetesクラスターに接続できます。
前提条件
- Kubernetes向けGitLabエージェントをインストールします。
- 関連するプロジェクトまたはグループにアクセスするようにエージェントを承認します。
Auto DevOpsから移行するには:
GitLabで、Auto DevOpsを使用しているプロジェクトに移動します。
3つの変数を追加します。左側のサイドバーで、設定 > CI/CDを選択し、変数を展開します。
KUBE_INGRESS_BASE_DOMAINというキーに、アプリケーションデプロイドメインを値として追加します。KUBE_CONTEXTというキーにpath/to/agent/project:agent-nameのような値を追加します。選択した環境スコープを選択します。エージェントのコンテキストが不明な場合は、.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-contextsKUBE_NAMESPACEというキーに、デプロイのターゲットとなるKubernetesネームスペースの値を追加します。同じ環境スコープを設定します。
変数を追加を選択します。
左側のサイドバーで、操作 > Kubernetesクラスターを選択します。
証明書ベースのクラスターセクションから、同じ環境スコープを提供するクラスターを開きます。
詳細タブを選択し、クラスターを無効にします。
ご使用の
.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"ご使用のパイプラインをテストするには、左側のサイドバーでビルド > パイプラインを選択し、次に新しいパイプラインを選択します。
例については、このプロジェクトを参照してください。
GitLabマネージドアプリケーションから移行する
GitLabマネージドApp (GMA) はGitLab 14.0で非推奨になり、GitLab 15.0で削除されました。エージェントfor Kubernetesはそれらをサポートしていません。GMAからエージェントへ移行するには、次の手順を実行します:
クラスター管理プロジェクトを移行する
クラスター管理プロジェクトをKubernetes向けGitLabエージェントと共に使用する方法を参照してください。
クラスターモニタリング機能を移行する
Kubernetesクラスターをエージェントfor Kubernetesを使用してGitLabに接続すると、ユーザーアクセスを有効にした後、Kubernetes用ダッシュボードを使用できます。