Amazon EKSクラスターの作成

Infrastructure as Code (IaC)を通じて、Amazon Elastic Kubernetes Service(EKS) 上にクラスターを作成できます。このプロセスでは、AWSとKubernetesのTerraformプロバイダを使用してEKSクラスタを作成します。Kubernetes用のGitLabエージェントを使用して、クラスターをGitLabに接続します。

前提条件

ステップ

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

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

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-eks.git と入力します。
  7. 各項目を入力し、Create projectを選択します。

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

エージェントの登録

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

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

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

AWS認証情報の設定

GitLabでAWSを認証する場合、AWS認証情報を設定します。

  1. IAM ユーザーまたはIAM ロールを作成します。
  2. IAMユーザーまたはロールがプロジェクトに適切な権限を持っていることを確認します。この例のプロジェクトでは、以下に示す権限が必要です。自分のプロジェクトをセットアップするときに、これを拡張できます。

    // IAM custom Policy definition
    {
      "Version": "2012-10-17",
      "Statement": [
          {
              "Sid": "VisualEditor0",
              "Effect": "Allow",
              "Action": [
                  "ec2:*",
                  "eks:*",
                  "elasticloadbalancing:*",
                  "autoscaling:*",
                  "cloudwatch:*",
                  "logs:*",
                  "kms:DescribeKey",
                  "iam:AddRoleToInstanceProfile",
                  "iam:AttachRolePolicy",
                  "iam:CreateInstanceProfile",
                  "iam:CreateRole",
                  "iam:CreateServiceLinkedRole",
                  "iam:GetRole",
                  "iam:ListAttachedRolePolicies",
                  "iam:ListRolePolicies",
                  "iam:ListRoles",
                  "iam:PassRole",
                  // required for destroy step
                  "iam:DetachRolePolicy",
                  "iam:ListInstanceProfilesForRole",
                  "iam:DeleteRole"
              ],
              "Resource": "*"
          }
      ]
    }
    
  3. ユーザーまたはロールのアクセスキーを作成します。
  4. アクセスキーとシークレットを保存します。これらはGitLabでAWSを認証するために必要です。

プロジェクトの設定

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

必須の設定です:

  1. 左サイドバーで、Settings > CI/CDを選択します。
  2. 変数]を展開します。
  3. 変数AWS_ACCESS_KEY_ID に AWS アクセスキー ID を設定します。
  4. 変数AWS_SECRET_ACCESS_KEY に AWS シークレットアクセスキーを設定します。
  5. 変数TF_VAR_agent_token に、前のタスクで表示されたエージェントトークンを設定します。
  6. 変数TF_VAR_kas_address に、前のタスクで表示されたエージェントサーバアドレスを設定します。

オプション設定:

ファイルvariables.tf には、必要に応じて上書きできる他の変数が含まれています:

  • TF_VAR_region:クラスターの地域を設定します。
  • TF_VAR_cluster_name:クラスターの名前を設定します。
  • TF_VAR_cluster_version:Kubernetesのバージョンを設定します。
  • TF_VAR_instance_type:Kubernetesノードのインスタンスタイプを設定します。
  • TF_VAR_instance_count:Kubernetesのノード数を設定します。
  • TF_VAR_agent_namespace:GitLabエージェントのKubernetesネームスペースを設定します。

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

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

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

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

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

  • AWSでEKSコンソールからAmazon EKS > クラスターを選択します。
  • GitLabの場合:左サイドバーで、Operate > Kubernetes clustersを選択します。

クラスターを使う

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

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

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

クラスターの削除

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

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

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

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