Kf クイックスタート

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

始める前に

概要

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

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

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

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

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

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

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

    • Anthos 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. Google Cloud アカウントにログインします。Google Cloud を初めて使用する場合は、アカウントを作成して、実際のシナリオでの Google プロダクトのパフォーマンスを評価してください。新規のお客様には、ワークロードの実行、テスト、デプロイができる無料クレジット $300 分を差し上げます。
  2. Google Cloud Console の [プロジェクト セレクタ] ページで、Google Cloud プロジェクトを選択または作成します。

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

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

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

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

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

  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 のタブに表示されている手順に沿ってインストールします。

    gsutil 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 がインストールされます。

    gsutil 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
    gsutil 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 がダウンロードされます。現在のディレクトリ以外の場所から呼び出す場合は、その場所をパスに追加します。

    gsutil cp gs://kf-releases/${KF_VERSION}/kf-windows.exe kf.exe
    
  4. サーバー コンポーネントをインストールします。

    Linux / Mac

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

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

    Windows

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

    gsutil 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}