升級 Kf

本文說明如何升級現有的 Kf 安裝作業及其依附元件。

在升級程序中,請確認 Kf 安裝作業使用的是最新版本的 Kf 運算子:

  • 確認目前的 Kf 版本可以升級至 Kf 2.4.1 版。
  • 升級至 Kf 2.4.1 版。
  • 升級依附元件 (如有需要)。

事前準備

你需要:

  • 已安裝 Kf 的現有叢集。
  • 存取已安裝 gcloudkfkubectl 的電腦。

準備升級

連線至目標叢集

gcloud container clusters get-credentials CLUSTER_NAME \
 --zone CLUSTER_ZONE \
 --project CLUSTER_PROJECT_ID

確認目前的 Kf CLI 和伺服器版本相符

執行 kf debug,並驗證 Kf CLI 和 Kf 伺服器版本是否相符。

  • CLI 版本會列在 Kf Client 下方。
  • Kf 伺服器版本會列在 kf["app.kubernetes.io/version"] 下方。
$ kf debug
...
Version:
  Kf Client:                        v2.3.2
  Server version:                   v1.20.6-gke.1000
  kf["app.kubernetes.io/version"]:  v2.3.2
...

如果 Kf 用戶端和 Kf 伺服器的值「不相符」,但伺服器版本為 v2.3.x,請先安裝 Kf v2.4.1 CLI,再繼續操作。

如果 Kf 伺服器值低於 v2.3.x,您必須先逐步升級至 Kf v2.3.x,才能繼續操作。

升級前確認 Kf 運作正常

執行 kf doctor 以查看叢集狀態。請先確認所有測試均通過,再繼續操作。

$ kf doctor
...
=== RUN doctor/user
=== RUN doctor/user/ContainerRegistry
--- PASS: doctor/user
   --- PASS: doctor/user/ContainerRegistry
...

如果您看到任何 FAILError: environment failed checks 訊息,請按照 kf doctor 輸出內容中的指示,或參閱疑難排解指南來解決問題,並重試指令,直到成功為止。

視需要備份 Kf 設定地圖 (如果您已自訂)

  1. 執行以下命令,備份 config-defaults 設定檔:

    kubectl get configmap config-defaults -o yaml -n kf > config-defaults-backup.yaml
  2. 執行以下命令,備份 config-secrets 設定檔:

    kubectl get configmap config-secrets -o yaml -n kf > config-secrets-backup.yaml

升級 Kf 運算子

Kf 運算子首次在 2.4.0 版本中發布:

  • 如果您已在安裝 2.4.0 時安裝 Kf 運算子,則只需在升級至 2.4.1 時升級該運算子即可。

    請參閱「升級 Kf 運算子」。

  • 如果您要從 2.3.2 升級,則必須安裝 2.4.1 版的 Kf 操作員,才能升級至由操作員管理的 Kf。

    請參閱「安裝 Kf 運算子」。

升級目前的 Kf 運算子

Kf 運算子會為您執行升級作業。

  1. 套用運算子 yaml:

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

首次安裝 Kf 運算子

請按照下列步驟升級至由作業員管理的 Kf。

  1. 套用運算子 yaml:

    kubectl apply -f "https://storage.googleapis.com/kf-releases/v2.4.1/operator.yaml"
  2. 選擇使用預設值或保留自訂設定:

    1. 使用預設值kfsystem.yaml 準備升級:

      下載 kfsystem.yaml 檔案,填入下方的變數,然後在檔案所在目錄中執行指令,自動為升級作業準備 kfsystem.yaml

      export CLUSTER_PROJECT_ID=YOUR_PROJECT_ID
      export CLUSTER_NAME=YOUR_CLUSTER_NAME
      export CONTAINER_REGISTRY=YOUR_CLUSTER_COMPUTE_REGION-docker.pkg.dev/${CLUSTER_PROJECT_ID}/${CLUSTER_NAME}
      
      kubectl apply -f kfsystem.yaml
      
      kubectl patch \
      kfsystem kfsystem \
      --type='json' \
      -p="[{'op': 'replace', 'path': '/spec/kf', 'value': {'enabled': true, 'config': {'spaceContainerRegistry': '${CONTAINER_REGISTRY}', 'secrets':{'workloadidentity':{'googleserviceaccount':'${CLUSTER_NAME}-sa', 'googleprojectid':'${CLUSTER_PROJECT_ID}'}}}}}]"
      
    2. 準備升級 kfsystem.yaml同時保留自訂設定

      1. 下載 kfsystem.yaml 檔案。

      2. 執行以下命令,備份 config-defaults 設定檔:

        kubectl get configmap config-defaults -o yaml -n kf > config-defaults-backup.yaml
      3. 執行以下命令,備份 config-secrets 設定檔:

        kubectl get configmap config-secrets -o yaml -n kf > config-secrets-backup.yaml
      4. 檢查目前的 config-defaults 和 config-secrets 設定檔,並在 kfsystem.yaml 中找出對應的設定。

      5. config-secretsconfig-defaults 複製現有設定。config-secretsconfig-defaults 中的所有設定都可以在 kfsystem.yaml 中找到。googleProjectId 欄位現已變成必填欄位。

      6. wi.googleServiceAccount 欄位是 config-secrets 中的完整服務帳戶,但 kfsystem 的後置字串必須移除。舉例來說,${CLUSTER_NAME}-sa@${CLUSTER_PROJECT_ID}.iam.gserviceaccount.com 會變成 ${CLUSTER_NAME}-sakfsystem.yaml

      7. 設定複製完成後,請將 kfsystem 中的欄位 enabled 變更為 true

      8. 將變更儲存至 kfsystem.yaml

      9. 設定 Kf 的運算子:

        kubectl apply -f kfsystem.yaml

升級 Kf 依附元件

  1. 升級 Tekton:

    kubectl apply -f "https://storage.googleapis.com/tekton-releases/pipeline/previous/v0.23.0/release.yaml"
  2. 升級 Cloud Service Mesh:

    1. 按照 Cloud Service Mesh 1.9 升級指南中的步驟操作。
  3. 升級 Config Connector。

    1. 下載所需的 Config Connector Operator tar 檔案。

    2. 解壓縮 tar 檔案。

      tar zxvf release-bundle.tar.gz
    3. 在叢集上安裝 Config Connector Operator。

      kubectl apply -f operator-system/configconnector-operator.yaml
    4. 如果是第一次安裝 Config Connector,請設定 Config Connector 作業管理員。

      1. 將下列 YAML 複製到名為 configconnector.yaml 的檔案中:

        # configconnector.yaml
        apiVersion: core.cnrm.cloud.google.com/v1beta1
        kind: ConfigConnector
        metadata:
        # the name is restricted to ensure that there is only one
        # ConfigConnector resource installed in your cluster
        name: configconnector.core.cnrm.cloud.google.com
        spec:
        mode: cluster
        googleServiceAccount: "KF_SERVICE_ACCOUNT_NAME" # Replace with the full service account resolved from ${CLUSTER_NAME}-sa@${CLUSTER_PROJECT_ID}.iam.gserviceaccount.com
      2. 將設定套用至叢集。

        kubectl apply -f configconnector.yaml
    5. 請先確認 Config Connector 已完全安裝,再繼續操作。

      • Config Connector 會在名為 cnrm-system 的命名空間中執行所有元件。執行下列指令,確認 Pod 已準備就緒:

        kubectl wait -n cnrm-system --for=condition=Ready pod --all
      • 如果已正確安裝 Config Connector,輸出內容會類似以下內容:

        pod/cnrm-controller-manager-0 condition met
    6. 如果是第一次安裝 Config Connector,請設定 Workload Identity。

      kubectl annotate serviceaccount \
      --namespace cnrm-system \
      --overwrite \
      cnrm-controller-manager \
      iam.gke.io/gcp-service-account=${CLUSTER_NAME}-sa@${CLUSTER_PROJECT_ID}.iam.gserviceaccount.com

升級至 Kf 2.4.1 版 CLI

  1. 安裝 CLI:

    Linux

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

    gcloud storage cp gs://kf-releases/v2.4.1/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.4.1/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.4.1/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.4.1/kf-windows.exe kf.exe
  2. 驗證 Kf CLI 和 Kf 伺服器版本是否相符:

    • CLI 版本會列在 Kf Client 下方。
    • Kf 伺服器版本會列在 kf["app.kubernetes.io/version"] 下方。
    $ kf debug
    ...
    Version:
      Kf Client:                        v2.4.1
      Server version:                   v1.20.6-gke.1000
      kf["app.kubernetes.io/version"]:  v2.4.1
    ...
    

確認 Kf 升級成功

  1. 如果是首次安裝 Kf 運算子,請確認運算子是否已安裝:

    kubectl get deployment -n appdevexperience appdevexperience-operator

    如果您沒有看到下方範例輸出內容中的運算子,請參閱首次安裝 Kf 運算子的步驟。

    NAME                        READY   UP-TO-DATE   AVAILABLE   AGE
    appdevexperience-operator   1/1     1            1           1h
    
  2. 執行 doctor,確保新安裝的版本運作正常:

    kf doctor --retries=20

    這個指令會執行多次叢集檢查。在新的控制器啟動時,部分嘗試可能會失敗,這是正常現象。

    如果指令失敗並顯示訊息 Error: environment failed checks,請按照 doctor 輸出內容中的指示解決問題,並重試指令,直到成功為止。

  3. 如果您對 config-defaultsconfig-secrets 進行自訂,請確認這些自訂項目是否已移轉:

    請比較 config-defaults-backup.yaml 檔案與 kubectl diff -f config-defaults-backup.yaml,確認叢集仍設定正確。

    舉例來說,如果您保留舊版 Kf 的所有變更,並核准使用與下一個 Kf 版本隨附的新 Buildpack:

    $ kubectl diff -f config-defaults-backup.yaml
    diff -u -N /tmp/LIVE/v1.ConfigMap.kf.config-defaults /tmp/MERGED/v1.ConfigMap.kf.config-defaults
    --- /tmp/LIVE/v1.ConfigMap.kf.config-defaults
    +++ /tmp/MERGED/v1.ConfigMap.kf.config-defaults
    @@ -131,6 +131,8 @@
         enable_route_services: false
       spaceBuildpacksV2: |
    -    - name: new_buildpack
    -      url: https://github.com/cloudfoundry/new-buildpack
         - name: staticfile_buildpack
           url: https://github.com/cloudfoundry/staticfile-buildpack
         - name: java_buildpack
    exit status 1
    

如果驗證步驟通過,表示叢集已成功升級!如有任何問題,請參閱支援頁面瞭解如何處理。