Google Cloud に Kf をインストールする(プレビュー)

このドキュメントでは、GKE クラスタを設定し、プレビュー版の新機能を使用して Kf とその依存関係をインストールする方法について説明します。

  • Kf は、新しい v2 でラップされたスタックを使用して、以前のアプリケーションにクラウドネイティブ Buildpack のメリットを提供します。
  • 依存関係としての Config Connector を削除します。
  • serviceAccountUpdater のカスタム IAM ロールを削除します。

始める前に

GKE クラスタの要件

Kf の要件

Kf の依存関係とアーキテクチャのページで、Kf 内のコンポーネントのアクセス権限を確認し、理解します。

依存関係マトリックスに、具体的なバージョンが記載されています。

Compute Engine のサポートを有効にする

  1. Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  3. Verify that billing is enabled for your Google Cloud project.

  4. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  5. Verify that billing is enabled for your Google Cloud project.

  6. Compute Engine API を有効にします。

    API を有効にする

  7. Artifact Registry のサポートを有効にする

    1. Artifact Registry API を有効にします。

      Artifact Registry API を有効にする

    GKE の有効化と構成

    作業を始める前に、次のタスクが完了していることを確認してください。

    • Google Kubernetes Engine API を有効にする。
    • Google Kubernetes Engine API の有効化
    • このタスクに Google Cloud CLI を使用する場合は、gcloud CLI をインストールして初期化する。すでに gcloud CLI をインストールしている場合は、gcloud components update を実行して最新のバージョンを取得する。

    環境変数を設定する

    Linux / Mac

    export PROJECT_ID=YOUR_PROJECT_ID
    export CLUSTER_PROJECT_ID=YOUR_PROJECT_ID
    export CLUSTER_NAME=kf-cluster
    export COMPUTE_ZONE=us-central1-a
    export COMPUTE_REGION=us-central1
    export CLUSTER_LOCATION=${COMPUTE_ZONE} # Replace ZONE with REGION to switch
    export NODE_COUNT=4
    export MACHINE_TYPE=e2-standard-4
    export NETWORK=default
    

    Windows PowerShell

    Set-Variable -Name PROJECT_ID -Value YOUR_PROJECT_ID
    Set-Variable -Name CLUSTER_PROJECT_ID -Value YOUR_PROJECT_ID
    Set-Variable -Name CLUSTER_NAME -Value kf-cluster
    Set-Variable -Name COMPUTE_ZONE -Value us-central1-a
    Set-Variable -Name COMPUTE_REGION -Value us-central1
    Set-Variable -Name CLUSTER_LOCATION -Value $COMPUTE_ZONE # Replace ZONE with REGION to switch
    Set-Variable -Name NODE_COUNT -Value 4
    Set-Variable -Name MACHINE_TYPE -Value e2-standard-4
    Set-Variable -Name NETWORK -Value default
    

    サービス アカウントを設定する

    Workload Identity を介して Kubernetes サービス アカウントに関連付ける Google Cloud サービス アカウントを作成します。これにより、サービス アカウント キーを作成して挿入する必要がなくなります。

    1. Kf で使用するサービス アカウントを作成します。

      gcloud iam service-accounts create ${CLUSTER_NAME}-sa \
      --project=${CLUSTER_PROJECT_ID} \
      --description="GSA for Kf ${CLUSTER_NAME}" \
      --display-name="${CLUSTER_NAME}"
    2. サービス アカウントにモニタリング指標のロールを付与して、Cloud Monitoring への書き込み権限を付与します。

      gcloud projects add-iam-policy-binding ${CLUSTER_PROJECT_ID} \
        --member="serviceAccount:${CLUSTER_NAME}-sa@${CLUSTER_PROJECT_ID}.iam.gserviceaccount.com" \
        --role="roles/monitoring.metricWriter"
    3. Cloud Logging に書き込みを行えるように、サービス アカウントにロギングロールを付与します。

      gcloud projects add-iam-policy-binding ${CLUSTER_PROJECT_ID} \
        --member="serviceAccount:${CLUSTER_NAME}-sa@${CLUSTER_PROJECT_ID}.iam.gserviceaccount.com" \
        --role="roles/logging.logWriter"

    GKE クラスタを作成する

    gcloud container clusters create ${CLUSTER_NAME} \
      --project=${CLUSTER_PROJECT_ID} \
      --zone=${CLUSTER_LOCATION} \
      --num-nodes=${NODE_COUNT} \
      --machine-type=${MACHINE_TYPE} \
      --disk-size "122" \
      --network=${NETWORK} \
      --addons HorizontalPodAutoscaling,HttpLoadBalancing,GcePersistentDiskCsiDriver \
      --enable-dataplane-v2 \
      --enable-stackdriver-kubernetes \
      --enable-ip-alias \
      --enable-autorepair \
      --enable-autoupgrade \
      --scopes cloud-platform \
      --release-channel=regular \
      --workload-pool="${CLUSTER_PROJECT_ID}.svc.id.goog" \
      --service-account="${CLUSTER_NAME}-sa@${CLUSTER_PROJECT_ID}.iam.gserviceaccount.com"

    ファイアウォール ルールを設定する

    Kf ではいくつかのファイアウォール ポートを開く必要があります。マスターノードは、ポート 80、443、8080、8443、6443 で Pod と通信できるようにする必要があります。

    Workload Identity を有効にする

    ここまでの手順で、サービス アカウントと GKE クラスタが作成されました。次に、クラスタの ID 名前空間をクラスタに関連付けます。

    gcloud iam service-accounts add-iam-policy-binding \
      --project=${CLUSTER_PROJECT_ID} \
      --role roles/iam.workloadIdentityUser \
      --member "serviceAccount:${CLUSTER_PROJECT_ID}.svc.id.goog[kf/controller]" \
      "${CLUSTER_NAME}-sa@${CLUSTER_PROJECT_ID}.iam.gserviceaccount.com"
    
    gcloud iam service-accounts add-iam-policy-binding \
      --project=${CLUSTER_PROJECT_ID} \
      --role roles/iam.workloadIdentityUser \
      --member "serviceAccount:${CLUSTER_PROJECT_ID}.svc.id.goog[cnrm-system/cnrm-controller-manager]" \
      "${CLUSTER_NAME}-sa@${CLUSTER_PROJECT_ID}.iam.gserviceaccount.com"

    GKE クラスタをターゲットにする

    次のコマンドを実行して、kubectl コマンドライン アクセスを構成します。

    gcloud container clusters get-credentials ${CLUSTER_NAME} \
        --project=${CLUSTER_PROJECT_ID} \
        --zone=${CLUSTER_LOCATION}

    Artifact Registry リポジトリを作成する

    1. 保存されるコンテナ イメージ用の Artifact Registry を作成します。

      gcloud artifacts repositories create ${CLUSTER_NAME} \
        --project=${CLUSTER_PROJECT_ID} \
        --repository-format=docker \
        --location=${COMPUTE_REGION}
    2. Artifact Registry リポジトリにサービス アカウント権限を付与します。

      gcloud artifacts repositories add-iam-policy-binding ${CLUSTER_NAME} \
        --project=${CLUSTER_PROJECT_ID} \
        --location=${COMPUTE_REGION} \
        --member="serviceAccount:${CLUSTER_NAME}-sa@${CLUSTER_PROJECT_ID}.iam.gserviceaccount.com" \
        --role='roles/artifactregistry.writer'

    クラスタにソフトウェアの依存関係をインストールする

    1. Cloud Service Mesh をインストールします。

      1. Cloud Service Mesh のインストール ガイドの手順に沿って操作します。

      2. Cloud Service Mesh をインストールしたら、ゲートウェイ インストール ガイドを使用して Ingress ゲートウェイを作成する必要があります。

    2. Tekton をインストールします。

      kubectl apply -f "https://storage.googleapis.com/tekton-releases/pipeline/previous/v0.29.0/release.yaml"

    Kf をインストールする

    1. Kf CLI をインストールします。

      Linux

      このコマンドを実行すると、システム上のすべてのユーザーに Kf CLI がインストールされます。Cloud Shell のタブに表示されている手順に沿ってインストールします。

      gcloud storage cp gs://kf-releases/v2.7.3/kf-linux /tmp/kf
      chmod a+x /tmp/kf
      sudo mv /tmp/kf /usr/local/bin/kf

      Mac

      このコマンドを実行すると、システム上のすべてのユーザーに kf がインストールされます。

      gcloud storage cp gs://kf-releases/v2.7.3/kf-darwin /tmp/kf
      chmod a+x /tmp/kf
      sudo mv /tmp/kf /usr/local/bin/kf

      Cloud Shell

      bash を使用している場合、このコマンドを実行すると、kf が Cloud Shell インスタンスにインストールされます。他のシェルの場合は手順の変更が必要になることがあります。

      mkdir -p ~/bin
      gcloud storage cp gs://kf-releases/v2.7.3/kf-linux ~/bin/kf
      chmod a+x ~/bin/kf
      echo "export PATH=$HOME/bin:$PATH" >> ~/.bashrc
      source ~/.bashrc

      Windows

      このコマンドを実行すると、kf が現在のディレクトリにダウンロードされます。現在のディレクトリ以外の場所から呼び出す場合は、その場所をパスに追加します。

      gcloud storage cp gs://kf-releases/v2.7.3/kf-windows.exe kf.exe
    2. オペレーターをインストールします。

      kubectl apply -f "https://storage.googleapis.com/kf-releases/v2.7.3/operator.yaml"
    3. Kf AppDevExperience Build(ADX ビルド)をインストールします。

      export CONTAINER_REGISTRY=${COMPUTE_REGION}-docker.pkg.dev/${CLUSTER_PROJECT_ID}/${CLUSTER_NAME}
      cat << EOF | kubectl apply --filename -
      apiVersion: builds.appdevexperience.dev/v1alpha1
      kind: BuildSystem
      metadata:
          name: buildsystem
      spec:
        secrets:
          workloadidentity:
            googleprojectid: ${CLUSTER_PROJECT_ID}
            googleserviceaccount: ${CLUSTER_NAME}-sa
        containerRegistry: ${CONTAINER_REGISTRY}
        enabled: true
      EOF
    4. Workload Identity 用に ADX ビルドを構成します。

      gcloud iam service-accounts add-iam-policy-binding \
        --project=${CLUSTER_PROJECT_ID} \
        --role roles/iam.workloadIdentityUser \
        --member "serviceAccount:${CLUSTER_PROJECT_ID}.svc.id.goog[adx-builds-system/controller]" \
        "${GSA_NAME}@${CLUSTER_PROJECT_ID}.iam.gserviceaccount.com"
    5. Kf のオペレーターを構成します。

      kubectl apply -f "https://storage.googleapis.com/kf-releases/v2.7.3/kfsystem.yaml"
    6. シークレットとデフォルトの値を設定します。

      export CONTAINER_REGISTRY=${COMPUTE_REGION}-docker.pkg.dev/${CLUSTER_PROJECT_ID}/${CLUSTER_NAME}
      
      kubectl patch \
      kfsystem kfsystem \
      --type='json' \
      -p="[{'op': 'replace', 'path': '/spec/kf', 'value': {'enabled': true, 'config': {'featureFlags': {'enable_appdevexperience_builds': true}, 'spaceContainerRegistry': '${CONTAINER_REGISTRY}', 'secrets':{'workloadidentity':{'googleserviceaccount':'${CLUSTER_NAME}-sa', 'googleprojectid':'${CLUSTER_PROJECT_ID}'}}}}}]"
      

    インストールを検証する

    kf doctor --retries=20

    クリーンアップ

    次の手順により、新しい GKE クラスタの作成と準備で作成したすべてのコンポーネントが削除されます。

    1. Google サービス アカウントを削除します。

      gcloud iam service-accounts delete ${CLUSTER_NAME}-sa@${CLUSTER_PROJECT_ID}.iam.gserviceaccount.com
    2. IAM ポリシーのバインドを削除します。

      gcloud projects remove-iam-policy-binding ${CLUSTER_PROJECT_ID} \
          --member="serviceAccount:${CLUSTER_NAME}-sa@${CLUSTER_PROJECT_ID}.iam.gserviceaccount.com" \
          --role="roles/iam.serviceAccountAdmin"
      gcloud projects remove-iam-policy-binding ${CLUSTER_PROJECT_ID} \
          --member="serviceAccount:${CLUSTER_NAME}-sa@${CLUSTER_PROJECT_ID}.iam.gserviceaccount.com" \
          --role="roles/monitoring.metricWriter"
    3. コンテナ イメージ リポジトリを削除します。

      gcloud artifacts repositories delete ${CLUSTER_NAME} \
        --location=${COMPUTE_REGION}
    4. Kf をアンインストールします。

      kubectl patch kfsystem kfsystem \
        --type='json' \
        -p="[{'op': 'replace', 'path': '/spec/kf', 'value': {'enabled': false, }}]"
    5. GKE クラスタを削除します。

      gcloud container clusters delete ${CLUSTER_NAME} --zone ${CLUSTER_LOCATION}