在 Google Cloud 外部安裝 Kf

本文件說明如何在 Google Distributed Cloud 中建立的內部部署叢集 (在 VMware在裸機上) 上安裝 Kf 及其依附元件。

如果您已熟悉在 Google Cloud的 GKE 叢集中安裝 Kf 的程序,這裡說明在內部部署程序的主要差異:

  • 您不必安裝 Config Connector 即可進行內部部署。
  • 內部部署程序使用 Docker 憑證,而非 Workload Identity。

事前準備

Google Distributed Cloud 需求條件

Kf 相關規定

請參閱 Kif 依附元件和架構頁面,查看及瞭解 Kf 中元件的存取權限。

設定環境變數

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

設定服務帳戶

建立 Google Cloud 服務帳戶 (GSA) 和服務帳戶金鑰,讓建構作業可讀取/寫入 Container Registry。如果您使用的是其他容器登錄,這個步驟會有所不同,因為它可能會以不同的方式取得登錄憑證。

  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. storage.admin 角色指派給服務帳戶,以便讀取/寫入 Container Registry:

    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.23.3-asm.1+config1 版。

    1. 請按照 Cloud Service Mesh 安裝指南操作。

    2. 安裝 Cloud Service Mesh 後,您必須按照閘道安裝指南建立入口閘道。

    3. 如果是在 Google Distributed Cloud 上,請將 loadBalancerIP 設為叢集的 IP 位址,如「為 Google Distributed Cloud 設定外部 IP 位址」一文所述。

  2. 安裝 Tekton:

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

安裝 Kf

  1. 安裝 Kf CLI:

    Linux

    這項指令會為系統上的所有使用者安裝 Kf CLI。請按照 Cloud Shell 分頁中的操作說明,為自己安裝這個擴充功能。

    gcloud storage cp gs://kf-releases/v2.11.28/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.28/kf-darwin /tmp/kf
    chmod a+x /tmp/kf
    sudo mv /tmp/kf /usr/local/bin/kf

    Cloud Shell

    如果您使用 bash,這個指令會在 Cloud Shell 執行個體上安裝 kf。如果您使用其他殼層,可能需要修改指令。

    mkdir -p ~/bin
    gcloud storage cp gs://kf-releases/v2.11.28/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.28/kf-windows.exe kf.exe
  2. 安裝運算子:

    kubectl apply -f "https://storage.googleapis.com/kf-releases/v2.11.28/operator.yaml"
  3. 設定 Kf 的運算子:

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

為 Docker 憑證建立 Kubernetes 密鑰

在 Kf 命名空間中,為您在「服務帳戶設定」一節中建立的 Docker 憑證建立 Kubernetes 密鑰。接著,將 Kubernetes 密鑰修補至 subresource-apiserver 部署,以便上傳來源。

  1. 啟用並更新 Kf 運算子,以便使用 Container Registry 做為容器登錄檔。

    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. 建立 Kubernetes 密鑰,搭配 Docker 登錄檔使用。

    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 憑證的祕密。

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

驗證安裝

kf doctor --retries=20