在 Google Cloud 外部安裝 Kf

本文說明如何在 Google Distributed Cloud 建立的地端部署叢集上安裝 Kf 及其依附元件,包括 VMwareBare Metal

如果您已熟悉在 Google Cloud的 GKE 叢集上安裝 Kf 的程序,地端部署程序的主要差異如下:

  • 如果是地端部署安裝,則不必安裝 Config Connector。
  • 地端部署程序會使用 Docker 憑證,而非 Workload Identity。

事前準備

Google Distributed Cloud 需求條件

Kf 需求

在「Kf 依附元件和架構」頁面中,查看並瞭解 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. 將讀取/寫入 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 v1.23.3-asm.1+config1。

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

    2. 安裝 Cloud Service Mesh 後,您必須使用閘道安裝指南建立 Ingress 閘道。

    3. 如果是 Google Distributed Cloud,請按照「為 Google Distributed Cloud 設定外部 IP 位址」一文的說明,將 loadBalancerIP 設為分配給叢集的 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.31/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.31/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.31/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.31/kf-windows.exe kf.exe
  2. 安裝運算子:

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

    kubectl apply -f "https://storage.googleapis.com/kf-releases/v2.11.31/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