Google GKEクラスタの作成

情報(GCP) Googleとのパートナーシップにより、GitLabはGoogle Kubernetes EngineとGitLabのインテグレーションを開始するために、新規GCPアカウントに$200の追加クレジットを提供することができます。このリンクからクレジットを申請してください。

Infrastructure as Code (IaC)を使ってGoogle Kubernetes Engine(GKE) 上に新しいクラスターを作成する方法をご紹介します。このプロセスでは、GoogleとKubernetesのTerraformプロバイダを使ってGKEクラスターを作成します。Kubernetes用のGitLabエージェントを使用して、クラスターをGitLabに接続します。

前提条件

ステップ

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

サンプルプロジェクトのインポート

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

まずはURLからサンプルプロジェクトをインポートしましょう。

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

  1. GitLabの左サイドバーで、Searchを選択するか、Searchに移動します。
  2. View all my projects を選択します。
  3. ページの右側で、新規プロジェクトを選択します。
  4. プロジェクトのインポートを選択します。
  5. URLでリポジトリを選択します。
  6. Git リポジトリの URL にはhttps://gitlab.com/gitlab-org/configure/examples/gitlab-terraform-gke.git と入力します。
  7. 各項目を入力し、Create projectを選択します。

このプロジェクトでは、以下を提供します:

エージェントの登録

フラグ: GitLab 14.10では、certificate_based_clusters というフラグによりアクションメニューが証明書ではなくエージェントにフォーカスするように変更されました。このフラグはGitLab.comで有効化され、自己管理されます。

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

  1. 左サイドバーで、Operate > Kubernetes clustersを選択します。
  2. クラスター(エージェント)を接続]を選択します。
  3. Select an agent]ドロップダウンリストから[gke-agent ]を選択し、[Register an agent]を選択します。
  4. GitLabがエージェントの登録トークンを生成します。このシークレットトークンは後で必要になるので、セキュアに保管してください。
  5. GitLabはエージェントサーバーのアドレス(KAS) 、これも後で必要になります。

GCP認証情報を作成します。

プロジェクトが GCP と GitLab API と通信できるように設定します:

  1. GitLab で GCP を認証するには、以下のロールを持つGCP サービスアカウントを作成します:Compute Network Viewer Kubernetes Engine Admin,Service Account User, andService Account Admin。ユーザーと管理者の両方のサービスアカウントが必要です。ユーザー・ロールは、ノード・プールを作成する際にデフォルトのサービス・アカウントになりすまします。Adminロールは、kube-system 名前空間にサービスアカウントを作成します。
  2. 前の手順で作成したサービス・アカウント・キーの JSON ファイルをダウンロードします。
  3. お使いのコンピュータで、JSONファイルをbase64/path/to/sa-key.json をキーのパスに置き換えてください)にエンコードします:

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

プロジェクトの設定

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

必須の設定です:

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

オプション設定:

ファイル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:GitLabエージェントのKubernetesネームスペースを設定します。

その他のリソースオプションについてはGoogle Terraformプロバイダと Kubernetes Terraformプロバイダのドキュメントを参照してください。

クラスターのプロビジョニング

プロジェクトの設定が終わったら、手動でクラスターのプロビジョニングを開始します。GitLab:

  1. 左サイドバーのBuild > Pipelines に進みます。
  2. Play({play})の横にあるドロップダウンリストアイコン({chevron-lg-down})を選択します。
  3. 手動でデプロイジョブをトリガするには、[デプロイ]を選択します。

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

  • GCPコンソールのKubernetesリストに表示されます。
  • GitLabで:プロジェクトのサイドバーから、オペレーション > Kubernetesクラスターを選択します。

クラスターを使う

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

  1. 左サイドバーで、Operate > Kubernetes clustersを選択します。
  2. リストで、[Connection status]列を表示します。

接続の機能の詳細については、GitLab agent for Kubernetesのドキュメントを参照してください。

クラスターの削除

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

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

  1. .gitlab-ci.yml ファイルに以下を追加します:

    stages:
      - init
      - validate
      - build
      - test
      - deploy
      - cleanup
       
    destroy:
      extends: .terraform:destroy
      needs: []
    
  2. 左サイドバーで、Build > Pipelinesを選択し、最新のパイプラインを選択します。
  3. destroy ジョブの場合は、再生({play}) を選択します。