Google Cloud の外部で Kf をインストールする

このドキュメントでは、Google Distributed Cloud の一部として作成されたオンプレミス クラスタ(VMware 上またはベアメタル上)に Kf とその依存関係をインストールする方法について説明します。

Kf を Google Cloud の GKE クラスタにインストールする場合とオンプレミスにインストールする場合の主な違いは次のとおりです。

  • オンプレミスにインストールする場合、Config Connector をインストールする必要はありません。
  • オンプレミスの場合は、Workload Identity ではなく Docker 認証情報が使用されます。

始める前に

Google Distributed Cloud の要件

Kf の要件

  • Cloud Service Mesh

  • Tekton(Kf が使用)これはユーザー向けのサービスではありません。

  • 専用の Google サービス アカウント。

環境変数を設定する

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
export CLUSTER_PROJECT_ID=YOUR_PROJECT_ID
export CLUSTER_NAME=kf-cluster
export DOCKER_SERVER=YOUR_DOCKER_SERVER_URL
export SA_NAME=${CLUSTER_NAME}-sa
export SA_EMAIL=${SA_NAME}@${CLUSTER_PROJECT_ID}.iam.gserviceaccount.com

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
Set-Variable -Name CLUSTER_PROJECT_ID -Value YOUR_PROJECT_ID
Set-Variable -Name CLUSTER_NAME -Value kf-cluster
Set-Variable -Name DOCKER_SERVER -Value YOUR_DOCKER_SERVER_URL
Set-Variable -Name SA_NAME -Value ${CLUSTER_NAME}-sa
Set-Variable -Name SA_EMAIL -Value ${SA_NAME}@${CLUSTER_PROJECT_ID}.iam.gserviceaccount.com

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

ビルドが Container Registry から読み書きする際に使用する Google Cloud サービス アカウント(GSA)とサービス アカウント キーを作成します。別のコンテナ レジストリを使用している場合は、レジストリにアクセスするための認証情報の取得方法が異なるため、この手順は異なります。

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

    gcloud beta iam service-accounts create ${SA_NAME} \
        --project=${CLUSTER_PROJECT_ID} \
        --description="gcr.io admin for ${CLUSTER_NAME}" \
        --display-name="${CLUSTER_NAME}"
  2. Container Registry からの読み取り/書き込みに必要な storage.admin ロールをサービス アカウントに割り当てます。

    gcloud projects add-iam-policy-binding ${CLUSTER_PROJECT_ID} \
        --member="serviceAccount:${SA_NAME}@${CLUSTER_PROJECT_ID}.iam.gserviceaccount.com" \
        --role="roles/storage.admin"
  3. サービス アカウント キーを作成します。

    temp_dir=$(mktemp -d)
    key_path=${temp_dir}/key.json
    gcloud iam service-accounts keys create --iam-account ${SA_EMAIL} ${key_path}
    key_json=$(cat ${key_path})
    rm -rf ${temp_dir}

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

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

    1. Cloud Service Mesh のインストール ガイドに従って、Cloud Service Mesh をインストールします。

    2. Google Distributed Cloud の場合は、Google Distributed Cloud の外部 IP アドレスを構成するの説明に従って、クラスタに割り振られた IP を loadBalancerIP に設定します。

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

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

Kf のインストール

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

    Linux

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

    gcloud storage cp gs://kf-releases/v2.11.27/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.11.27/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.11.27/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.11.27/kf-windows.exe kf.exe
  2. オペレーターをインストールします。

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

    kubectl apply -f "https://storage.googleapis.com/kf-releases/v2.11.27/kfsystem.yaml"

Docker 認証情報用の Kubernetes Secret を作成する

Kf 名前空間に、上記のサービス アカウントの設定で作成した Docker 認証情報の Kubernetes Secret を作成します。次に、ソースのアップロード用に Kubernetes Secret を subresource-apiserver Deployment に適用します。

  1. Kf オペレーターを有効にして、Container Registry をコンテナ レジストリとして使用するように更新します。

    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}'}}}}}]"
    
    export CONTAINER_REGISTRY=gcr.io/${CLUSTER_PROJECT_ID}
    kubectl patch kfsystem kfsystem \
      --type='json' \
      -p="[{'op': 'replace', 'path': '/spec/kf', 'value': {'enabled': true, 'config': {'spaceContainerRegistry':'${CONTAINER_REGISTRY}'}}}]"
    
  2. kf 名前空間が Kf オペレーターによって作成されたことを確認します。この処理が完了するまで数分かかることがあります。

    kubectl get namespace kf
  3. Docker レジストリで使用する Kubernetes Secret を作成します。

    export secret_name=kf-gcr-key-${RANDOM}
    kubectl -n kf create secret docker-registry ${secret_name} \
       --docker-username=_json_key --docker-server ${DOCKER_SERVER} \
       --docker-password="${key_json}"
    
  4. Kf オペレーターを更新して、Docker 認証情報を含む Secret を指定します。

    kubectl patch kfsystem kfsystem \
      --type='json' \
      -p="[{'op': 'replace', 'path': '/spec/kf', 'value': {'config': {'secrets':{'build':{'imagePushSecrets':'${secret_name}'}}}}}]"
    

インストールを検証する

kf doctor --retries=20