- クラスター管理プロジェクト
- RBACの互換性
- クラスターの優先順位
- 複数のKubernetesクラスタ
- GitLabが管理するクラスター
- ベースドメイン
- 環境スコープ
- クラスター環境
- ランナーのセキュリティ
- 詳細情報
グループレベルのKubernetesクラスター(証明書ベース)(非推奨)
プロジェクトレベルや インスタンスレベルのKubernetesクラスタと同様に、グループレベルのKubernetesクラスタでは、Kubernetesクラスタをグループに接続することができ、複数のプロジェクトで同じクラスタを使用することができます。
グループレベルのKubernetesクラスタを表示するには:
- 左のサイドバーで、Search(検索)を選択するか、Go to(移動)を選択してグループを探します。
- オペレーション > Kubernetesを選択します。
クラスター管理プロジェクト
クラスタ管理プロジェクトをクラスタにアタッチして、Ingressコントローラなど、インストールにcluster-admin
の権限が必要な共有リソースを管理します。
RBACの互換性
Kubernetesクラスターを持つグループ下の各プロジェクトに対して、GitLabはプロジェクト名前空間にedit
権限 を持つ制限されたサービスアカウントを作成します。
クラスターの優先順位
プロジェクトのクラスターが使用可能で無効になっていない場合、GitLabはプロジェクトを含むグループに属するクラスターを使用する前にプロジェクトのクラスターを使用します。サブグループの場合、GitLabはプロジェクトに最も近い祖先グループのクラスターを使用します。
複数のKubernetesクラスタ
GitLab 13.2 で導入されました。
グループに複数のKubernetesクラスターを関連付けることができ、開発、ステージング、本番といった環境ごとに異なるクラスターをメンテナーすることができます。
別のクラスターを追加するときは、新しいクラスターを他のクラスターと区別しやすくするために環境スコープを設定します。
GitLabが管理するクラスター
GitLabにクラスターを管理させることができます。GitLabがクラスターを管理する場合、プロジェクトのリソースは自動的に作成されます。GitLabが作成するリソースの詳細については、アクセスコントロールのセクションを参照してください。
GitLabによって管理されていないクラスターの場合、プロジェクト固有のリソースは自動的に作成されません。GitLabによって管理されていないクラスターでのデプロイにAuto DevOpsを使用する場合は、以下を確認する必要があります:
- プロジェクトのデプロイサービスアカウントが
KUBE_NAMESPACE
にデプロイする権限を持っていること。 -
KUBECONFIG
への変更を正しく反映します(KUBE_NAMESPACE
これは自動的ではありません)KUBE_NAMESPACE
。直接KUBE_NAMESPACE
編集するKUBE_NAMESPACE
ことはお勧めしません。
クラスター・キャッシュのクリア
GitLab 12.6 で導入されました。
GitLabにクラスターの管理を任せる場合、GitLabはプロジェクト用に作成した名前空間とサービスアカウントのキャッシュを保存します。クラスター内のこれらのリソースを手動で変更すると、このキャッシュがクラスターと同期しなくなり、デプロイジョブが失敗することがあります。
キャッシュをクリアするには
- 左のサイドバーで、Search(検索)を選択するか、Go to(移動)を選択してグループを探します。
- オペレーション > Kubernetesを選択します。
- クラスターを選択します。
- 詳細設定を展開します。
- Clear cluster cache]を選択します。
ベースドメイン
GitLab 11.8 で導入されました。
クラスター・レベルでのドメインにより、複数のKubernetesクラスターごとに複数のドメインをサポート ドメインを指定すると、Auto DevOpsステージで環境変数(KUBE_INGRESS_BASE_DOMAIN
)として自動的に設定されます。
ドメインは、Ingress IPアドレスにワイルドカードDNSが設定されている必要があります。詳細はこちら。
環境スコープ
プロジェクトに複数のKubernetesクラスターを追加する場合、環境スコープで区別する必要があります。環境スコープは、環境固有のCI/CD変数が機能するのと同様に、クラスターを環境に関連付けます。
どの環境がクラスターの環境スコープに一致するかを評価する際には、クラスターの優先順位が適用されます。プロジェクト・レベルのクラスターが優先され、最も近い祖先グループが続き、そのグループの親グループが続きます。
例えば、プロジェクトに以下のKubernetesクラスタがある場合:
クラスター | 環境スコープ | どこ |
---|---|---|
プロジェクト | * | プロジェクト |
ステージング | staging/* | プロジェクト |
生産 | production/* | プロジェクト |
テスト | test | グループ |
開発者向け | * | グループ |
そして、.gitlab-ci.yml
に以下の環境が設定されています:
stages:
- test
- deploy
test:
stage: test
script: sh test
deploy to staging:
stage: deploy
script: make deploy
environment:
name: staging/$CI_COMMIT_REF_NAME
url: https://staging.example.com/
deploy to production:
stage: deploy
script: make deploy
environment:
name: production/$CI_COMMIT_REF_NAME
url: https://example.com/
結果は
- プロジェクトクラスタは
test
ジョブに使用されます。 - ステージングクラスタは
deploy to staging
ジョブに使用されます。 - 本番クラスタは
deploy to production
ジョブに使用されます。
クラスター環境
どのCI環境がKubernetesクラスタにデプロイされているかについては、クラスタ環境のドキュメントを参照してください。
ランナーのセキュリティ
Runnerを安全に設定するための重要な情報については、プロジェクトレベルのクラスタのためのRunnerのセキュリティのドキュメントを参照してください。
詳細情報
GitLabとKubernetesのインテグレーションについては、Kubernetesクラスターをご覧ください。