本节介绍如何在可访问 Internet 的情况下从 KubeSphere 企业版 v4.1.2 升级到 KubeSphere 企业版 v4.1.3。

前提条件

  • 请确保当前 KubeSphere 企业版版本为 v4.1.2。

  • 请确保当前 Kubernetes 版本为 v1.21.x ~ v1.30.x。

  • 若扩展组件有特殊配置,需备份扩展组件配置。在“扩展组件配置”对话框中,下载文件备份。

  • 为避免数据丢失,请提前备份所有重要数据。

升级 KubeSphere 企业版

KubeSphere 企业版 v4.1 及后续版本采用 helm chart 方式升级 ks-core。

升级 host 集群

  1. 确认当前集群为待升级集群。

    kubectl get node -o wide
  2. KubeSphere 企业版 v4.1.3 移除了 kse-extensions-publish,将其整合到了 ks-core 的 chart 中,因此在升级至 v4.1.3 之前,应该对 KubeSphere 企业版历史版本创建的扩展组件资源进行补丁操作。

    1. 创建 extension-resources-patch.sh 脚本。该脚本主要用于处理 v4.1.2 及之前版本通过 kse-extension-publish 创建扩展组件资源产生的冲突。

      vi extension-resources-patch.sh

      粘贴以下内容并保存:

      #!/bin/bash
      
      # 解决资源模板冲突
      kubectl -n kubesphere-system label deploy extensions-museum app.kubernetes.io/managed-by=Helm
      kubectl -n kubesphere-system annotate deploy extensions-museum meta.helm.sh/release-name=ks-core
      kubectl -n kubesphere-system annotate deploy extensions-museum meta.helm.sh/release-namespace=kubesphere-system
      
      kubectl -n kubesphere-system label service extensions-museum app.kubernetes.io/managed-by=Helm
      kubectl -n kubesphere-system annotate service extensions-museum meta.helm.sh/release-name=ks-core
      kubectl -n kubesphere-system annotate service extensions-museum meta.helm.sh/release-namespace=kubesphere-system
      
      kubectl -n kubesphere-system label secret extensions-museum-certs app.kubernetes.io/managed-by=Helm
      kubectl -n kubesphere-system annotate secret extensions-museum-certs meta.helm.sh/release-name=ks-core
      kubectl -n kubesphere-system annotate secret extensions-museum-certs meta.helm.sh/release-namespace=kubesphere-system
      
      # 解决 repository reference 冲突
      for item in `kubectl get extensionversions.kubesphere.io -o jsonpath="{.items[*].metadata.name}"`;do kubectl patch extensionversions.kubesphere.io $item --type merge -p '{"spec":{"repository":"extensions-museum"}}';kubectl label extensionversions.kubesphere.io $item kubesphere.io/repository-ref=extensions-museum;done
      for item in `kubectl get extensions.kubesphere.io -o jsonpath="{.items[*].metadata.name}"`;do kubectl label extensions.kubesphere.io $item kubesphere.io/repository-ref=extensions-museum;done
    2. 运行脚本。

      bash extension-resources-patch.sh
  3. 检查当前集群的 ks-core 配置。

    helm get values -n kubesphere-system ks-core
  4. 创建升级配置文件,输入以下内容。

    如果上一步中有除镜像仓库、镜像版本、cloud 和 upgrade 之外的其它参数,请一并添加至以下配置文件中。

    cat <<EOF > kse-v4.1.3-host-custom-values.yaml
    # 注意集群角色参数由 role 变更为 multicluster.role
    multicluster:
      role: host
    
    # 开启 ks-core 组件(ks-apiserver、ks-controller-manager、ks-console)的高可用
    # 请根据集群实际情况配置
    ha:
      enabled: false
    
    # 开启 redis 高可用,ks-apiserver 高可用依赖 redis
    # 如该参数为 false,默认 kubesphere-system 下的 redis 为单副本,请根据集群实际情况配置
    redisHA:
      enabled: false
    EOF
  5. 执行以下命令开始升级。

    chart=oci://hub.kubesphere.com.cn/kse/ks-core
    version=1.1.1
    helm upgrade --install -n kubesphere-system ks-core $chart --version $version -f kse-v4.1.3-host-custom-values.yaml --wait --debug
  6. 参考以下步骤,检查 host 集群是否升级成功。

    1. 执行以下命令,upgrade job 应该是成功完成的状态,如下所示。

      root@xxx:~# kubectl -n kubesphere-system get job | grep upgrade
      ks-core-post-upgrade    1/1           16s        28m
      ks-core-pre-upgrade     1/1           58s        31m
      prepare-upgrade         1/1           26s        32m
    2. 执行以下命令,pod(ks-apiserver, ks-console, ks-controller-manager)应该为 running 状态,如下所示。

      root@xxx:~# watch kubectl get pod -n kubesphere-system
      NAME                                     READY   STATUS      RESTARTS        AGE
      ks-apiserver-594bb884db-phrlv            1/1     Running     0               28m
      ks-console-7cd55dd9f9-f2jl9              1/1     Running     0               28m
      ks-controller-manager-785fc676dc-9d9j2   1/1     Running     0               28m
  7. 使用原有的 Web 控制台的 IP 地址、管理员用户名和管理员密码,并使用网页浏览器登录 v4.1.3 的 KubeSphere 企业版 Web 控制台。

  8. 根据激活提示点击激活,导入 KubeSphere 企业版的 license。

  9. 检查 host 集群各项功能和数据是否正常。

升级 member 集群

升级 member 集群与升级 host 集群的步骤基本一致,但需注意 member 集群中的特殊参数配置。

  1. 确认当前 member 集群为待升级集群。

    kubectl get node -o wide
  2. 检查 member 集群的 ks-core 配置。

    helm get values -n kubesphere-system ks-core
  3. 获取 member 集群的 jwtSecret 值。

    kubectl -n kubesphere-system get cm kubesphere-config -o yaml | grep -v "apiVersion" | grep jwtSecret
  4. 创建升级配置文件,输入以下内容。

    如果上一步中有除镜像仓库、镜像版本、cloud 和 upgrade 之外的其它参数,请一并添加至以下配置文件中。

    cat <<EOF > kse-v4.1.3-member-custom-values.yaml
    authentication:
      issuer:
        jwtSecret: <REPLACE_ME> # 注意替换
    
    # 注意集群角色参数由 role 变更为 multicluster.role
    multicluster:
      role: member
    EOF
  5. 执行以下命令开始升级。

    chart=oci://hub.kubesphere.com.cn/kse/ks-core
    version=1.1.1
    helm upgrade --install -n kubesphere-system ks-core $chart --version $version -f kse-v4.1.3-member-custom-values.yaml --wait --debug
  6. 参考以下步骤,检查 member 集群是否升级成功。

    1. 执行以下命令,upgrade job 应该是成功完成的状态,如下所示。

      root@xxx:~# kubectl -n kubesphere-system get job | grep upgrade
      ks-core-post-upgrade    1/1           16s        28m
      ks-core-pre-upgrade     1/1           58s        31m
      prepare-upgrade         1/1           26s        32m
    2. 执行以下命令,ks-agent pod 应该为 running 状态,如下所示。

      root@xxx:~# kubectl -n kubesphere-system get pod
      NAME                          READY   STATUS      RESTARTS        AGE
      ks-agent-5dc5b57977-4x6mf     2/2     Running     0               59m
  7. 如果您在以上升级命令中增加了自定义配置(如,--set a=b),需在 Web 控制台同步添加 member 集群的自定义配置。

    方法:在集群管理页面,在需要操作的集群右侧点击more,然后在下拉列表中选择编辑配置。在弹窗中,输入 a: b

    说明

    如果您在升级命令中未加入自定义的配置,则无需在 Web 控制台添加集群配置。

升级扩展组件

在扩展中心升级所需的扩展组件。对于已备份特殊配置的扩展组件,需先修改配置后再升级。

  1. 在扩展中心点击组件名称,进入组件详情页。

  2. 点击组件图标下的more,选择扩展组件配置

  3. 扩展组件配置对话框中,点击恢复推荐配置,然后在默认配置中手动修改为定制化的配置,点击确定

  4. 再次点击组件图标下的more,选择更新

  5. 扩展组件更新对话框中,点击开始更新等待升级完成。

至此,KubeSphere 企业版完成全部升级。

可升级扩展组件列表

扩展组件 KSE v4.1.2 KSE v4.1.3

devops

1.1.1

1.1.2

dmp

2.1.3

2.1.4

gatekeeper

1.0.1

1.0.3

gateway

1.0.2

1.0.3

grafana

10.4.3

10.4.14

openpitrix

2.0.1

2.0.2

servicemesh

1.0.0

1.0.1

whizard-alerting

1.0.3

1.0.4

whizard-auditing

1.2.0

1.2.1

whizard-events

1.2.0

1.2.1

whizard-logging

1.2.2

1.2.3

whizard-notification

2.5.9

2.6.0

whizard-telemetry

1.2.2

1.3.0