Kf クイックスタート

このクイックスタートでは、GKE クラスタをセットアップして Kf とその依存関係をインストールし、サンプルの Cloud Foundry アプリをデプロイします。

始める前に

概要

  • GKE クラスタは次の要件を満たす必要があります。

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

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

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

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

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

    • Artifact Registry が有効になっている。

    • Cloud Service Mesh(ASM)

    • Tekton がインストールされている。バージョンについては、依存関係マトリックスをご覧ください。

    • 次の IAM ポリシーを持つ Google サービス アカウント(作成手順は下記のリンクを参照)。

      • roles/iam.serviceAccountAdmin
      • serviceAccount:${CLUSTER_PROJECT}.svc.id.goog[kf/controller](メンバー serviceAccount:${CLUSTER_PROJECT}.svc.id.goog[kf/controller] の場合)

クラスタを削除する手順については、クリーンアップ セクションをご覧ください。

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. Make sure 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. Make sure that billing is enabled for your Google Cloud project.

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

    API の有効化

GKE の有効化と設定

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

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

新しい GKE クラスタの作成と準備

環境変数を設定する

Linux

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}
export NODE_COUNT=4
export MACHINE_TYPE=e2-standard-4
export NETWORK=default
export KF_VERSION=v2.1.0
export TEKTON_VERSION=v0.19.0

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
Set-Variable -Name NODE_COUNT -Value 4
Set-Variable -Name MACHINE_TYPE -Value e2-standard-4
Set-Variable -Name NETWORK -Value default
Set-Variable -Name KF_VERSION -Value v2.1.0
Set-Variable -Name TEKTON_VERSION -Value v0.19.0

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

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. サービス アカウントに独自のポリシーの変更を許可します。これにより、Kf コントローラは新しい(名前)空間をポリシーに追加し、Workload Identity を再利用できるようにします。

    gcloud iam service-accounts add-iam-policy-binding ${CLUSTER_NAME}-sa@${CLUSTER_PROJECT_ID}.iam.gserviceaccount.com \
      --project=${CLUSTER_PROJECT_ID} \
      --role="roles/iam.serviceAccountAdmin" \
      --member="serviceAccount:${CLUSTER_NAME}-sa@${CLUSTER_PROJECT_ID}.iam.gserviceaccount.com"
  3. 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"
  4. ロギングロールに 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 \
  "${CLUSTER_NAME}-sa@${CLUSTER_PROJECT_ID}.iam.gserviceaccount.com" \
  --project=${CLUSTER_PROJECT_ID} \
  --role="roles/iam.workloadIdentityUser" \
  --member="serviceAccount:${CLUSTER_PROJECT_ID}.svc.id.goog[kf/controller]"

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} \
      --repository-format=docker \
      --location=${COMPUTE_REGION}
  2. Artifact Registry リポジトリにサービス アカウント権限を付与します。

    gcloud artifacts repositories add-iam-policy-binding ${CLUSTER_NAME} \
      --location=${COMPUTE_REGION} \
      --member="serviceAccount:${CLUSTER_NAME}-sa@${CLUSTER_PROJECT_ID}.iam.gserviceaccount.com" \
      --role='roles/artifactregistry.writer'
  3. ローカル認証を構成します。

    gcloud auth configure-docker ${COMPUTE_REGION}-docker.pkg.dev

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

  1. サービス メッシュをインストールします

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

    kubectl apply -f "https://github.com/tektoncd/pipeline/releases/download/${TEKTON_VERSION}/release.yaml"

Kf のインストール

  1. Kf を実行するためのクラスタの作成と準備については、Kf 用の GKE クラスタの作成と準備をご覧ください。

  2. 目的の Kf リリースを選択してメモします。使用可能なバージョンについては、Kf のダウンロードのページをご覧ください。

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

    Linux

    システム上のすべてのユーザーに kf がインストールされます。Cloud Shell のタブに表示されている手順に沿ってインストールします。

    gcloud storage cp gs://kf-releases/${KF_VERSION}/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/${KF_VERSION}/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/${KF_VERSION}/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/${KF_VERSION}/kf-windows.exe kf.exe
  4. サーバー コンポーネントをインストールします。

    Linux / Mac

    現在のディレクトリに kf.yaml がダウンロードされます。

    gcloud storage cp gs://kf-releases/${KF_VERSION}/kf.yaml /tmp/kf.yaml
    kubectl apply -f /tmp/kf.yaml

    Windows

    現在のディレクトリに kf.yaml がダウンロードされます。

    gcloud storage cp gs://kf-releases/${KF_VERSION}/kf.yaml kf.yaml
    kubectl apply -f kf.yaml
  5. シークレットを設定します。

    export WI_ANNOTATION=iam.gke.io/gcp-service-account=${CLUSTER_NAME}-sa@${CLUSTER_PROJECT_ID}.iam.gserviceaccount.com
    
    kubectl annotate serviceaccount controller ${WI_ANNOTATION} \
    --namespace kf \
    --overwrite
    
    echo "{\"apiVersion\":\"v1\",\"kind\":\"ConfigMap\",\"metadata\":{\"name\":\"config-secrets\", \"namespace\":\"kf\"},\"data\":{\"wi.googleServiceAccount\":\"${CLUSTER_NAME}-sa@${CLUSTER_PROJECT_ID}.iam.gserviceaccount.com\"}}" | kubectl apply -f -
  6. Kf のデフォルト値を設定します。この値は後で変更できます。以下の例では、ワイルドカード DNS プロバイダを含むドメイン テンプレートを使用して、各スペースに独自のドメイン名を提供しています。

    export CONTAINER_REGISTRY=${COMPUTE_REGION}-docker.pkg.dev/${CLUSTER_PROJECT_ID}/${CLUSTER_NAME}
    export DOMAIN='$(SPACE_NAME).$(CLUSTER_INGRESS_IP).nip.io'
    
    kubectl patch configmaps config-defaults \
    -n=kf \
    -p="{\"data\":{\"spaceContainerRegistry\":\"${CONTAINER_REGISTRY}\",\"spaceClusterDomains\":\"- domain: ${DOMAIN}\"}}"
  7. インストールを検証します。

    kf doctor --retries 10

アプリケーションの push

前提条件

このセクションの操作を行うには、次の条件を満たす必要があります。

  1. Kf が互換性のある GKE クラスタにインストールされている。手順については、Kf のインストールをご覧ください。
  2. .kubeconfig が Kf クラスタをターゲットにしている。このドキュメントの手順でクラスタを作成した場合は、すでに準備が完了しています。この構成は、gcloud container clusters get-credentials ${CLUSTER_NAME} --zone ${CLUSTER_LOCATION} を実行して明示的に生成することもできます。
  3. kf CLI がインストールされ、パスに含まれている。手順については、Kf のインストールをご覧ください。
  4. git CLI がインストールされ、パスに含まれている。

スペースを準備する

  1. 新しいスペースを作成します。

    kf create-space test-space
  2. 作成したスペースをターゲットとして設定します。

    kf target -s test-space

Cloud Foundry テストアプリを push する

  1. test-app リポジトリのクローンを作成します。

    git clone https://github.com/cloudfoundry-samples/test-app go-test-app
    cd go-test-app
  2. アプリを push します。

    kf push test-app
  3. アプリケーションの URL を検索します。

    1. 出力形式を使用して、ルートのみを取得します。

      kf app test-app --output 'jsonpath={.status.urls[0]}'

    2. 従来の CF アプローチの場合、以下を使用します。

      kf apps

  4. その URL をブラウザで開きます。

クリーンアップ

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

  1. GKE クラスタを削除します。

    gcloud container clusters delete ${CLUSTER_NAME} --zone ${CLUSTER_LOCATION}
  2. Google サービス アカウントを削除します。

    gcloud iam service-accounts delete ${CLUSTER_NAME}-sa@${CLUSTER_PROJECT_ID}.iam.gserviceaccount.com
  3. 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"
  4. コンテナ イメージ リポジトリを削除します。

    gcloud artifacts repositories delete ${CLUSTER_NAME} \
      --location=${COMPUTE_REGION}