Kf のインストール

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

始める前に

概要

GKE クラスタの要件

  • クラスタを Kf 専用にします。これは必須ではありませんが、行うことをおすすめします。互換性マトリックスを維持するため、Kf とその依存関係のみをインストールすることをおすすめします。

  • 少なくとも 4 つのノード。ノードを追加する必要がある場合は、クラスタのサイズ変更をご覧ください。

  • 4 つ以上の vCPU を備えた最小マシンタイプ(e2-standard-4 など)。クラスタのマシンタイプに 4 つ以上の vCPU がない場合は、異なるマシンタイプへのワークロードの移行の説明に従ってマシンタイプを変更します。

  • クラスタをリリース チャンネルに登録する。これは必須ではありませんが、行うことをおすすめします。静的 GKE バージョンがある場合は、既存のクラスタをリリース チャンネルに登録するの手順を行ってください。

  • Workload Identity が有効になっている。

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. Google Cloud Console の [プロジェクト セレクタ] ページで、Google Cloud プロジェクトを選択または作成します。

    プロジェクト セレクタに移動

  3. Google Cloud プロジェクトで課金が有効になっていることを確認します

  4. Google Cloud Console の [プロジェクト セレクタ] ページで、Google Cloud プロジェクトを選択または作成します。

    プロジェクト セレクタに移動

  5. Google Cloud プロジェクトで課金が有効になっていることを確認します

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

    API を有効にする

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 サービス アカウントに関連付けられる GCP サービス アカウント(GSA)を作成します。これにより、サービス アカウント キーを作成して挿入する必要がなくなります。

  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. 新しい IAM カスタムロールを作成します。

    gcloud iam roles create serviceAccountUpdater \
    --project=${CLUSTER_PROJECT_ID} \
    --title "Service Account Updater" \
    --description "This role only updates members on a GSA" \
    --permissions iam.serviceAccounts.get,iam.serviceAccounts.getIamPolicy,iam.serviceAccounts.list,iam.serviceAccounts.setIamPolicy
  3. サービス アカウントに独自のポリシーの変更を許可します。これにより、Kf コントローラは新しい(名前)空間をポリシーに追加し、Workload Identity を再利用できるようにします。

    gcloud projects add-iam-policy-binding ${CLUSTER_PROJECT_ID} \
      --member="serviceAccount:${CLUSTER_NAME}-sa@${CLUSTER_PROJECT_ID}.iam.gserviceaccount.com" \
      --role="projects/${CLUSTER_PROJECT_ID}/roles/serviceAccountUpdater"
  4. 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"
  5. ロギングロールに 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} \
  --network=${NETWORK} \
  --addons=HttpLoadBalancing,HorizontalPodAutoscaling,NetworkPolicy \
  --enable-stackdriver-kubernetes \
  --enable-ip-alias \
  --enable-network-policy \
  --enable-autorepair \
  --enable-autoupgrade \
  --scopes=https://www.googleapis.com/auth/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. サービス メッシュをインストールします。

    1. Anthos Service Mesh インストール ガイドを開きます。

    2. バージョンのプルダウンが Anthos Service Mesh のバージョン 1.9 に設定されていることを確認します。

    3. ガイドに従って ASM をインストールします。

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

    1. 必要な Config Connector Operator の tar ファイルをダウンロードします。

    2. tar ファイルを解凍します。

      tar zxvf release-bundle.tar.gz
      
    3. クラスタに Config Connector Operator をインストールします。

      kubectl apply -f operator-system/configconnector-operator.yaml
      
    4. Config Connector Operator を構成します。

      1. 次の YAML を configconnector.yaml というファイルにコピーします。

        # configconnector.yaml
        apiVersion: core.cnrm.cloud.google.com/v1beta1
        kind: ConfigConnector
        metadata:
          # the name is restricted to ensure that there is only one
          # ConfigConnector resource installed in your cluster
          name: configconnector.core.cnrm.cloud.google.com
        spec:
          mode: cluster
          googleServiceAccount: "KF_SERVICE_ACCOUNT_NAME" # Replace with the full service account resolved from ${CLUSTER_NAME}-sa@${CLUSTER_PROJECT_ID}.iam.gserviceaccount.com
        
      2. クラスタに構成を適用します。

        kubectl apply -f configconnector.yaml
    5. 続行する前に、Config Connector が完全にインストールされていることを確認します。

      • Config Connector は、すべてのコンポーネントを cnrm-system という名前の名前空間で実行します。次のコマンドを実行して、Pod の準備ができていることを確認します。

        kubectl wait -n cnrm-system --for=condition=Ready pod --all
      • Config Connector が正しくインストールされている場合、出力は次のようになります。

        pod/cnrm-controller-manager-0 condition met
        pod/cnrm-deletiondefender-0 condition met
        pod/cnrm-resource-stats-recorder-86858dcdc5-6lqzb condition met
        pod/cnrm-webhook-manager-58c799b8fb-kcznq condition met
        pod/cnrm-webhook-manager-58c799b8fb-n2zpx condition met
    6. Workload Identity を設定します。

      kubectl annotate serviceaccount \
      --namespace cnrm-system \
      --overwrite \
      cnrm-controller-manager \
      iam.gke.io/gcp-service-account=${CLUSTER_NAME}-sa@${CLUSTER_PROJECT_ID}.iam.gserviceaccount.com
  3. Tekton をインストールします。

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

Kf のインストール

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

    Linux

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

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

    Mac

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

    gsutil cp gs://kf-releases/v2.4.1/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
    gsutil cp gs://kf-releases/v2.4.1/kf-linux ~/bin/kf
    chmod a+x ~/bin/kf
    echo "export PATH=$HOME/bin:$PATH" >> ~/.bashrc
    source ~/.bashrc
    

    Windows

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

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

    kubectl apply -f "https://storage.googleapis.com/kf-releases/v2.4.1/operator.yaml"
  3. Kf のオペレーターを構成します。

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

    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': {'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/storage.admin"
    
    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. GKE クラスタを削除します。

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