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

Google GKEクラスターの作成

Infrastructure as Code (IaC)を使用して、Google Kubernetes Engine (GKE) で新しいクラスターを作成する方法について説明します。このプロセスでは、GoogleおよびKubernetes Terraformプロバイダーを使用してGKEクラスターを作成します。クラスターをKubernetes向けGitLabエージェントサーバーを使用してGitLabに接続します。

すべての新しいGoogle Cloud Platform(GCP)アカウントは$300のクレジットを受け取り、Googleとの提携により、GitLabはGoogle Google Kubernetes Engineとのインテグレーションを開始するために、新しいGCPアカウントにさらに$200を提供できます。このリンクをたどって、クレジットを申請してください。

はじめる前:

ステップ:

  1. サンプルプロジェクトをインポートします
  2. Kubernetes用エージェントを登録します。
  3. GCP認証情報を作成します
  4. プロジェクトを設定します
  5. クラスターをプロビジョニングします

サンプルプロジェクトをインポートする

Infrastructure as Codeを使用してGitLabからクラスターを作成するには、クラスターを管理するためのGitLabプロジェクトを作成する必要があります。このチュートリアルでは、サンプルプロジェクトから開始し、必要に応じて変更します。

URLでサンプルプロジェクトをインポートすることから始めます。

プロジェクトをインポートするには:

  1. GitLabの左側のサイドバーで、検索または移動先を選択します。
  2. すべてのプロジェクトを表示を選択します。
  3. ページの右側で、新規プロジェクトを選択します。
  4. プロジェクトのインポートを選択します。
  5. リポジトリのURLを選択します。
  6. GitリポジトリのURLに、https://gitlab.com/gitlab-org/configure/examples/gitlab-terraform-gke.gitと入力します。
  7. フィールドに入力し、プロジェクトを作成を選択します。

このプロジェクトでは、次のものが提供されます:

エージェントを登録する

Kubernetes用GitLabエージェントを作成するには:

  1. 左側のサイドバーで、操作 > Kubernetesクラスターを選択します。
  2. **クラスターに接続(エージェント)**を選択します。
  3. Select an agent or enter a name to create new(新しいエージェントを選択するか、名前を入力して作成)ドロップダウンリストから、エージェントの名前を選択し、登録するを選択します。
  4. GitLabは、エージェントの登録トークンを生成します。このシークレットトークンは、後で必要になるため、安全に保管してください。
  5. オプション。Helmを使用する場合、GitLabはHelmコマンドの例でエージェントサーバー(KAS)のアドレスを提供します。これは後で必要になります。

GCP認証情報を作成します

GCPおよびGitLab APIと通信するようにプロジェクトをセットアップするには:

  1. GitLabでGCPを認証するには、次のロールを持つGCPサービスアカウントを作成します:Compute Network ViewerKubernetes Engine AdminService Account User、およびService Account Admin。ユーザーと管理者のサービスアカウントの両方が必要です。ユーザーロールは、デフォルトサービスアカウントノードプールを作成するときに偽装します。管理者ロールは、kube-systemネームスペースにサービスアカウントを作成します。

  2. 前の手順で作成したサービスアカウントキーを含むJSONファイルをダウンロードします。

  3. コンピューターで、JSONファイルをbase64にエンコードします(/path/to/sa-key.jsonをキーへのパスに置き換えます):

    base64 -i /path/to/sa-key.json | tr -d \\n
    base64 /path/to/sa-key.json | tr -d \\n
  4. このコマンドの出力を、次のステップでBASE64_GOOGLE_CREDENTIALS環境変数として使用します。

プロジェクトを設定する

CI/CD環境変数を使用して、プロジェクトを設定します。

Required configuration(必要な設定):

  1. 左側のサイドバーで、設定 > CI/CDを選択します。
  2. 変数を展開します。
  3. 変数BASE64_GOOGLE_CREDENTIALSを、作成したばかりのbase64にエンコードされたJSONファイルに設定します。
  4. 変数TF_VAR_gcp_projectをGCPのproject IDに設定します。
  5. 変数TF_VAR_agent_tokenを、前のタスクに表示されるエージェントトークンに設定します。
  6. 変数TF_VAR_kas_addressを、前のタスクに表示されるエージェントサーバーアドレスに設定します。

Optional configuration(オプションの設定):

ファイルvariables.tfには、必要に応じてオーバーライドできるその他の変数が含まれています:

  • TF_VAR_gcp_region: クラスターのリージョンを設定します。
  • TF_VAR_cluster_name: クラスターの名前を設定します。
  • TF_VAR_cluster_description: クラスターの説明を設定します。GCPクラスターの詳細ページでGitLabプロジェクトへの参照を作成するには、これを$CI_PROJECT_URLに設定することをお勧めします。これにより、GCPダッシュボードに表示されるクラスターをプロビジョニングしたプロジェクトを把握できます。
  • TF_VAR_machine_type: Kubernetesノードのマシンタイプを設定します。
  • TF_VAR_node_count: Kubernetesノードの数を設定します。
  • TF_VAR_agent_namespace: Kubernetes向けGitLabエージェントのKubernetesネームスペースを設定します。

リソースオプションの詳細については、Google TerraformプロバイダーおよびKubernetes Terraformプロバイダーのドキュメントを参照してください。

Kubernetes Engine APIを有効にする

Google Cloud Consoleから、Kubernetes Engine APIを有効にします。

クラスターをプロビジョニングする

プロジェクトを設定した後、手動でクラスターのプロビジョニングをトリガーします。GitLabで、次の手順を実行します:

  1. 左側のサイドバーで、ビルド > パイプラインを選択します。
  2. パイプラインを新規作成を選択します。
  3. Play(再生)( play )の横で、ドロップダウンリストアイコン( chevron-lg-down )を選択します。
  4. デプロイを選択して、デプロイメントジョブを手動でトリガーします。

パイプラインが正常に終了すると、新しいクラスターが表示されます:

クラスターを使用する

クラスターをプロビジョニングすると、GitLabに接続され、デプロイの準備が整います。接続を確認するには:

  1. 左側のサイドバーで、操作 > Kubernetesクラスターを選択します。
  2. リストで、接続ステータス列を表示します。

接続の機能の詳細については、Kubernetes向けGitLabエージェントのドキュメントを参照してください。

クラスターを削除する

クリーンアップジョブは、デフォルトではパイプラインに含まれていません。作成したすべてのリソースを削除するには、クリーンアップジョブを実行する前に、GitLab CI/CDテンプレートを変更する必要があります。

すべてのリソースを削除するには:

  1. 次の内容を.gitlab-ci.ymlファイルに追加します:

    stages:
      - init
      - validate
      - build
      - test
      - deploy
      - cleanup
    
    destroy:
      extends: .terraform:destroy
      needs: []
  2. 左側のサイドバーで、ビルド > パイプラインを選択し、最新のパイプラインを選択します。

  3. destroyジョブの場合は、Play(再生)( play )を選択します。