升级 Kf

本文档介绍如何升级现有 Kf 安装及其依赖项。

在升级过程中,您需要确保 Kf 安装使用最新版本的 Kf operator:

  • 确认当前的 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 configmaps

  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 operator

Kf operator 在版本 2.4.0 中首次发布:

  • 如果您已经在安装 2.4.0 时安装了 Kf operator,则只需在升级到 2.4.1 的过程中升级它即可。

    请参阅升级 Kf operator

  • 如果您是从 2.3.2 升级,则必须安装 2.4.1 版本的 Kf operator 才能升级到 operator 管理的 Kf。

    请参阅安装 Kf operator

升级当前的 Kf operator

Kf operator 会为您执行升级。

  1. 应用 operator yaml:

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

首次安装 Kf operator

执行以下步骤以升级到 operator 管理的 Kf。

  1. 应用 operator 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 configmaps,并在 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 将在 kfsystem.yaml 中变为 ${CLUSTER_NAME}-sa

      7. 复制完设置后,将 kfsystem 中的字段 enabled 更改为 true

      8. 将所做的更改保存到 kfsystem.yaml

      9. 为 Kf 配置 operator:

        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. 升级 Anthos Service Mesh:

    1. 按照 Anthos 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 Operator。

      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 标签页中的说明自行安装。

    gsutil 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

    gsutil 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;您可能需要为其他 Shell 修改说明。

    mkdir -p ~/bin
    gsutil 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 下载到当前目录。如果要从当前目录以外的任何位置调用,请将其添加到路径中。

    gsutil 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 operator,请确认 operator 已安装:

    kubectl get deployment -n appdevexperience appdevexperience-operator
    

    如果您未看到以下示例输出中的 operator,请查看首次安装 Kf operator 步骤。

    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
    

如果验证步骤通过,那么您的集群已成功升级!如果您有任何问题,请查看支持页面获取指导。