GitLab管理クラスター(非推奨)
- GitLab 11.5で導入されました。
- GitLab 11.11でオプションになりました。
- GitLab 14.5 で非推奨。
- GitLab 15.0ではセルフマネージドで無効。
フラグ: セルフマネジメントのGitLabでは、デフォルトではこの機能は利用できません。利用可能にするには、管理者がcertificate_based_clusters
という機能フラグを有効にします。
クラスターの管理をGitLabに任せることもできます。クラスターがGitLabによって管理されている場合、プロジェクトのリソースは自動的に作成されます。作成されたリソースの詳細については、アクセス制御のセクションを参照してください。
自分でクラスターを管理することにした場合、プロジェクト固有のリソースは自動的には作成されません。Auto DevOpsを使用している場合、デプロイジョブが使用するKUBE_NAMESPACE
デプロイメント変数を明示的に提供する必要があります。そうでない場合は、名前空間が作成されます。
クラスター・キャッシュのクリア
GitLab 12.6 で導入されました。
GitLabにクラスターの管理を任せている場合、GitLabはプロジェクトのために作成した名前空間とサービスアカウントのキャッシュを保存します。クラスター内のこれらのリソースを手動で変更すると、このキャッシュがクラスターと同期しなくなることがあります。これはデプロイジョブの失敗の原因となります。
キャッシュをクリアするには
- プロジェクトのOperate > Kubernetes clustersページに移動し、クラスターを選択します。
- 詳細設定]セクションを展開します。
- Clear cluster cache]を選択します。
ベースドメイン
GitLab 11.8 で導入されました。
ベースドメインを指定すると、デプロイ変数としてKUBE_INGRESS_BASE_DOMAIN
が自動的に設定されます。Auto DevOpsを使用している場合、このドメインは異なるステージで使用されます。例えば、Auto Review Apps や Auto Deploy などです。
ドメインは、Ingress IPアドレスにワイルドカードDNSを設定する必要があります。次のいずれかを実行できます:
- ドメインプロバイダーでIngress IPアドレスを指す
A
レコードを作成します。 -
nip.io
やxip.io
などのサービスを使用して、ワイルドカードDNSアドレスを入力します。例えば、192.168.1.1.xip.io
。
外部Ingress IPアドレス、または外部Ingressホスト名を決定するには:
-
クラスターがGKE上にある場合:
- 詳細設定の Google Kubernetes Engineリンクを選択するか、Google Kubernetes Engineダッシュボードに直接移動します。
- 適切なプロジェクトとクラスターを選択します。
- Connectを選択します。
-
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のバージョンによっては、末尾に%
が表示される場合は、それを含めないでください。