从 v3.4.x 升级到 v4.1.3

以下操作步骤适用于将 KubeSphere 从 v3.4.x 升级到 v4.1.3 版本。

说明

在开始升级之前,您需要确保当前 KubeSphere 版本已升级到 v3.4.x,否则无法继续升级到 v4.1.3。

升级过程分为以下三个主要步骤,请严格按照顺序执行:

  1. 升级 host 集群并迁移扩展组件数据。

  2. 升级 member 集群并迁移扩展组件数据。

  3. 升级网关。

下载升级脚本

在 host 集群和 member 集群环境中下载升级脚本:

curl -LO https://github.com/kubesphere/ks-installer/archive/refs/tags/v4.1.3.tar.gz
tar -xzvf v4.1.3.tar.gz
cd ks-installer-4.1.3/scripts

修改升级配置文件

在 host 和所有的 member 集群中调整升级配置文件 ks-core-values.yaml,其中 upgrade 部分为升级相关的配置项目,你需要在升级之前确认需要升级的组件和配置信息,通过 upgrade.config.jobs.<name>.enabled 控制是否需要升级该组件,以下为配置示例:

upgrade:
  enabled: true
  image:
    registry: ""
    repository: kubesphere/ks-upgrade
    tag: "v4.1.3"
    pullPolicy: IfNotPresent
  persistenceVolume:
    name: ks-upgrade
    storageClassName: ""
    accessMode: ReadWriteOnce
    size: 5Gi
  config:
    storage:
      local:
        path: /tmp/ks-upgrade
    validator:
      ksVersion:
        enabled: true
      extensionsMuseum:
        enabled: true
        namespace: kubesphere-system
        name: extensions-museum
        syncInterval: 0
        watchTimeout: 30m
    jobs:
      network:
        enabled: true        # 是否启用并升级该扩展组件
        priority: 100
        extensionRef:        # 扩展组件的版本配置,需要与 extensions-museum 中的信息一致
          name: "network"
          version: "1.1.0"
        dynamicOptions: {
          "rerun": "false"
        }
      gateway:
        enabled: true
        priority: 90
        extensionRef:
          name: "gateway"
          version: "1.0.5"

更多配置说明请参考扩展组件升级配置说明

集群状态检查

在升级集群之前,执行以下 pre-check.sh 脚本文件,检查集群状态及是否满足升级条件。

bash pre-check.sh

升级 host 集群

执行以下命令,升级 host 集群、安装扩展组件并迁移数据。

# 指定镜像仓库地址
# export IMAGE_REGISTRY=swr.cn-southwest-2.myhuaweicloud.com/ks
# 指定扩展组件镜像仓库地址
# export EXTENSION_IMAGE_REGISTRY=swr.cn-southwest-2.myhuaweicloud.com/ks
bash upgrade.sh host | tee host-upgrade.log

执行升级命令后,可以在新的终端窗口中运行以下命令,实时观察 kubesphere-system 命名空间下 Pod 的状态变化:

watch kubectl get pod -n kubesphere-system

升级 member 集群

执行以下命令,升级 member 集群、安装扩展组件 agent 并迁移数据。

# 指定镜像仓库地址
# export IMAGE_REGISTRY=swr.cn-southwest-2.myhuaweicloud.com/ks
# 指定扩展组件镜像仓库地址
# export EXTENSION_IMAGE_REGISTRY=swr.cn-southwest-2.myhuaweicloud.com/ks
bash upgrade.sh member | tee member-upgrade.log

执行升级命令后,可以在新的终端窗口中运行以下命令,实时观察 kubesphere-system 命名空间下 Pod 的状态变化:

watch kubectl get pod -n kubesphere-system

在 member 集群升级成功之后,需要在 host 集群上执行以下命令,移除 member 集群的污点,使扩展组件 agent 能够调度到 member 集群上。

kubectl get clusters.cluster.kubesphere.io <MEMBER_CLUSTER_NAME> -o json | jq 'del(.status.conditions[] | select(.type=="Schedulable"))' | kubectl apply -f -

升级网关

在升级网关之前,需要等待 Gateway 扩展组件成功调度到目标集群,在 host 集群执行以下命令检查 Gateway 扩展组件的调度状态。

kubectl get installplan gateway -o json | jq -r '["Cluster", "State"], (.status.clusterSchedulingStatuses | to_entries[] | [.key, .value.state]) | @tsv' | column -t

网关的升级会导致 Nginx Ingress Controller 重启,依赖网关提供的服务会产生中断,请在业务低峰期进行升级。

在开始升级前,请通过以下命令检查集群中部署的网关实例及状态:

helm -n kubesphere-controls-system list -a

通过以下命令逐一升级网关:

# 指定镜像仓库地址
# export IMAGE_REGISTRY=swr.cn-southwest-2.myhuaweicloud.com/ks
bash upgrade.sh gateway kubesphere-router-<NAMESPACE> | tee gateway-upgrade.log

或者通过以下命令升级所有网关:

# 指定镜像仓库地址
# export IMAGE_REGISTRY=swr.cn-southwest-2.myhuaweicloud.com/ks
bash upgrade.sh gateway all | tee gateway-upgrade.log

在网关升级完成后,通过以下命令检查网关的部署状态:

helm -n kubesphere-controls-system list -a

完成升级

升级完成后,请确保所有服务正常运行,并检查系统的健康状态。可以通过以下命令验证:

for ns in $(kubectl get namespaces -l kubesphere.io/workspace=system-workspace -o jsonpath='{.items[*].metadata.name}'); do
    kubectl get pods -n $ns --no-headers --ignore-not-found | grep -vE 'Running|Completed'
done

确保所有 Pod 状态为 Running。如有问题,请查看相关容器日志以进行故障排除。

通过邮件接收 KubeSphere 最新的技术博客与产品更新的通知


感谢您的反馈。如果您有关于如何使用 KubeSphere 的具体问题,请在 Slack 上提问。如果您想报告问题或提出改进建议,请在 GitHub 存储库中打开问题。