始める前に
概要
GKE クラスタは次の要件を満たす必要があります。
クラスタを Kf 専用にします。これは必須ではありませんが、行うことをおすすめします。互換性マトリックスを維持するため、Kf とその依存関係のみをインストールすることをおすすめします。
少なくとも 4 つのノード。ノードを追加する必要がある場合は、クラスタのサイズ変更をご覧ください。
4 つ以上の vCPU を備えた最小マシンタイプ(
e2-standard-4
など)。クラスタのマシンタイプに 4 つ以上の vCPU がない場合は、異なるマシンタイプへのワークロードの移行の説明に従ってマシンタイプを変更します。クラスタをリリース チャンネルに登録する。これは必須ではありませんが、推奨される方法です。静的 GKE バージョンがある場合は、既存のクラスタをリリース チャンネルに登録する手順を行ってください。
Workload Identity が有効になっている。
Artifact Registry が有効になっている。
Tekton がインストールされている。バージョンについては、依存関係マトリックスをご覧ください。
次の IAM ポリシーを持つ Google サービス アカウント(作成手順は下記のリンクを参照)。
roles/iam.serviceAccountAdmin
serviceAccount:${CLUSTER_PROJECT}.svc.id.goog[kf/controller]
(メンバーserviceAccount:${CLUSTER_PROJECT}.svc.id.goog[kf/controller]
の場合)
クラスタを削除する手順については、クリーンアップ セクションをご覧ください。
Compute Engine のサポート有効化
- 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.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
- Compute Engine 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.2.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.2.0 Set-Variable -Name TEKTON_VERSION -Value v0.19.0
サービス アカウントを設定する
Workload Identity を介して Kubernetes サービス アカウントに関連付けられる GCP サービス アカウント(GSA)を作成します。これにより、サービス アカウント キーを作成して挿入する必要がなくなります。
Kf で使用するサービス アカウントを作成します。
gcloud iam service-accounts create ${CLUSTER_NAME}-sa \ --project=${CLUSTER_PROJECT_ID} \ --description="GSA for Kf ${CLUSTER_NAME}" \ --display-name="${CLUSTER_NAME}"
サービス アカウントに独自のポリシーの変更を許可します。これにより、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"
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"
ロギングロールに 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 リポジトリを作成する
保存されるコンテナ イメージ用の Artifact Registry を作成します。
gcloud artifacts repositories create ${CLUSTER_NAME} \ --repository-format=docker \ --location=${COMPUTE_REGION}
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'
ローカル認証を構成します。
gcloud auth configure-docker ${COMPUTE_REGION}-docker.pkg.dev
クラスタにソフトウェアの依存関係をインストールする
Tekton をインストールします。
kubectl apply -f "https://github.com/tektoncd/pipeline/releases/download/${TEKTON_VERSION}/release.yaml"
Kf のインストール
Kf を実行するためのクラスタの作成と準備については、Kf 用の GKE クラスタの作成と準備をご覧ください。
目的の Kf リリースを選択してメモします。使用可能なバージョンについては、Kf のダウンロードのページをご覧ください。
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
サーバー コンポーネントをインストールします。
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
シークレットを設定します。
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 -
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}\"}}"
インストールを検証します。
kf doctor --retries 10
アプリケーションの push
前提条件
このセクションの操作を行うには、次の条件を満たす必要があります。
- Kf が互換性のある GKE クラスタにインストールされている。手順については、Kf のインストールをご覧ください。
.kubeconfig
が Kf クラスタをターゲットにしている。このドキュメントの手順でクラスタを作成した場合は、すでに準備が完了しています。この構成は、gcloud container clusters get-credentials ${CLUSTER_NAME} --zone ${CLUSTER_LOCATION}
を実行して明示的に生成することもできます。kf
CLI がインストールされ、パスに含まれている。手順については、Kf のインストールをご覧ください。git
CLI がインストールされ、パスに含まれている。
スペースを準備する
新しいスペースを作成します。
kf create-space test-space
作成したスペースをターゲットとして設定します。
kf target -s test-space
Cloud Foundry テストアプリを push する
test-app リポジトリのクローンを作成します。
git clone https://github.com/cloudfoundry-samples/test-app go-test-app cd go-test-app
アプリを push します。
kf push test-app
アプリケーションの URL を検索します。
出力形式を使用して、ルートのみを取得します。
kf app test-app --output 'jsonpath={.status.urls[0]}'
従来の CF アプローチの場合、以下を使用します。
kf apps
その URL をブラウザで開きます。
クリーンアップ
この手順では、新しい GKE クラスタの作成と準備で作成したすべてのコンポーネントが削除されます。
GKE クラスタを削除します。
gcloud container clusters delete ${CLUSTER_NAME} --zone ${CLUSTER_LOCATION}
Google サービス アカウントを削除します。
gcloud iam service-accounts delete ${CLUSTER_NAME}-sa@${CLUSTER_PROJECT_ID}.iam.gserviceaccount.com
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"
コンテナ イメージ リポジトリを削除します。
gcloud artifacts repositories delete ${CLUSTER_NAME} \ --location=${COMPUTE_REGION}