GitLab管理クラスター(非推奨)

caution
この機能はGitLab 14.5で廃止されました。クラスターをGitLabに接続するには、GitLabエージェントを使います。アプリケーションを管理するには、クラスター・プロジェクト管理テンプレートを使います。

フラグ: セルフマネジメントのGitLabでは、デフォルトではこの機能は利用できません。利用可能にするには、管理者がcertificate_based_clustersという機能フラグを有効にします。

クラスターの管理をGitLabに任せることもできます。クラスターがGitLabによって管理されている場合、プロジェクトのリソースは自動的に作成されます。作成されたリソースの詳細については、アクセス制御のセクションを参照してください。

自分でクラスターを管理することにした場合、プロジェクト固有のリソースは自動的には作成されません。Auto DevOpsを使用している場合、デプロイジョブが使用するKUBE_NAMESPACE デプロイメント変数を明示的に提供する必要があります。そうでない場合は、名前空間が作成されます。

caution
ネームスペースやサービスアカウントなど、GitLabによって作成されたリソースを手動で管理すると、予期しないエラーが発生することがあるので注意してください。このような場合は、クラスターのキャッシュをクリアしてみてください。

クラスター・キャッシュのクリア

GitLab 12.6 で導入されました

GitLabにクラスターの管理を任せている場合、GitLabはプロジェクトのために作成した名前空間とサービスアカウントのキャッシュを保存します。クラスター内のこれらのリソースを手動で変更すると、このキャッシュがクラスターと同期しなくなることがあります。これはデプロイジョブの失敗の原因となります。

キャッシュをクリアするには

  1. プロジェクトのOperate > Kubernetes clustersページに移動し、クラスターを選択します。
  2. 詳細設定]セクションを展開します。
  3. Clear cluster cache]を選択します。

ベースドメイン

GitLab 11.8 で導入されました

ベースドメインを指定すると、デプロイ変数としてKUBE_INGRESS_BASE_DOMAIN が自動的に設定されます。Auto DevOpsを使用している場合、このドメインは異なるステージで使用されます。例えば、Auto Review Apps や Auto Deploy などです。

ドメインは、Ingress IPアドレスにワイルドカードDNSを設定する必要があります。次のいずれかを実行できます:

  • ドメインプロバイダーでIngress IPアドレスを指すA レコードを作成します。
  • nip.ioxip.io などのサービスを使用して、ワイルドカードDNSアドレスを入力します。例えば、192.168.1.1.xip.io

外部Ingress IPアドレス、または外部Ingressホスト名を決定するには:

  • クラスターがGKE上にある場合
    1. 詳細設定の Google Kubernetes Engineリンクを選択するか、Google Kubernetes Engineダッシュボードに直接移動します。
    2. 適切なプロジェクトとクラスターを選択します。
    3. Connectを選択します。
    4. gcloud コマンドを内部ターミナルまたはCloud Shell で実行します。
  • クラスターがGKE上にない場合: Kubernetesプロバイダーの特定の指示に従って、正しい認証情報でkubectl 。以下の例の出力には、クラスターの外部エンドポイントが表示されます。この情報を使用して、デプロイしたアプリケーションへの外部アクセスを許可するDNSエントリと転送ルールを設定できます。

Ingressに応じて、外部IPアドレスはさまざまな方法で取得できます。このリストでは、一般的なソリューションと、GitLab特有のアプローチをいくつか紹介します:

  • 一般的には、すべてのロードバランサーの IP アドレスをリストアップすることができます:

     kubectl get svc --all-namespaces -o jsonpath='{range.items[?(@.status.loadBalancer.ingress)]}{.status.loadBalancer.ingress[*].ip} '
    
  • アプリケーションを使って Ingress をインストールした場合は、次のように実行します:

     kubectl get service --namespace=gitlab-managed-apps ingress-nginx-ingress-controller -o jsonpath='{.status.loadBalancer.ingress[0].ip}'
    
  • Kubernetesクラスタの中には、Amazon EKSのようにホスト名を返すものもあります。これらのプラットフォームでは、以下を実行してください:

     kubectl get service --namespace=gitlab-managed-apps ingress-nginx-ingress-controller -o jsonpath='{.status.loadBalancer.ingress[0].hostname}'
    

    EKSを使用する場合、Elastic Load Balancerも作成され、追加のAWSコストが発生します。

  • Istio/Knativeは別のコマンドを使います。実行します:

     kubectl get svc --namespace=istio-system istio-ingressgateway -o jsonpath='{.status.loadBalancer.ingress[0].ip} '
    

Kubernetesのバージョンによっては、末尾に% が表示される場合は、それを含めないでください。