升級 Kf

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

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

  • 確認目前的 Kf 版本可以升級至 Kf v2.4.1。
  • 升級至 Kf v2.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,可以選擇備份 Kf configmap

  1. 執行下列指令,備份 config-defaults configmap:

    kubectl get configmap config-defaults -o yaml -n kf > config-defaults-backup.yaml
  2. 執行下列指令,備份 config-secrets configmap:

    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 configmap:

        kubectl get configmap config-defaults -o yaml -n kf > config-defaults-backup.yaml
      3. 執行下列指令,備份 config-secrets configmap:

        kubectl get configmap config-secrets -o yaml -n kf > config-secrets-backup.yaml
      4. 檢查目前的 config-defaults 和 config-secrets configmap,並在 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.comkfsystem.yaml 中會變成 ${CLUSTER_NAME}-sa

      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 運算子。

      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 v2.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 版本一併發布的新建構套件:

    $ 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
    

如果驗證步驟通過,叢集就已成功升級! 如有任何問題,請參閱支援頁面瞭解相關指引。