• 云原生服务云原生服务
    • 云原生备份容灾服务hot
    • 轻量集群服务new
    • 集群巡检服务new

升级 KSV

介绍如何升级 KSV。

本节介绍如何升级 KSV 云原生虚拟化(KSV)。升级过程中将使用开源工具 KubeKey 创建私有镜像服务。有关 KubeKey 的更多信息,请访问 GitHub KubeKey 仓库

前提条件

  • 请确保当前 KSV 为 v1.5.0。如果您的 KSV 版本低于 v1.5.0,请先将 KSV 版本升级到 v1.5.0。

  • 升级 KSV 到 v1.6.1 会将网络插件替换为 Kube-OVN,升级过程中会重组 Pod 网络。为避免数据丢失,请提前备份所有重要数据,如网络、用户、虚拟机等数据。

步骤一:推送镜像到本地仓库

  1. 将 KSV v1.6.1 安装包传输到任意集群节点,并登录该集群节点。

  2. 执行以下命令解压安装包,并进入安装包解压后生成的目录(将 <package name> 替换为安装包的实际名称,将 <directory> 替换为安装包解压后生成的目录):

    tar -zxvf <package name>
    cd <directory>
  3. 执行以下命令为 KubeKey 二进制文件 kk 添加执行权限:

    sudo chmod +x kk
  4. 执行以下命令编辑配置文件 config-sample.yaml

    vi config-sample.yaml
  5. spec:hosts 参数下设置用于升级 KSV 的服务器的信息。

    以下为示例配置:

    hosts: - {name: node1, address: 172.31.50.23, internalAddress: 172.31.50.23, user: yop, password: "zhu1241jie"} - {name: node2, address: 172.31.50.24, internalAddress: 172.31.50.24, user: yop, password: "zhu1241jie"} - {name: node3, address: 172.31.50.25, internalAddress: 172.31.50.25, user: yop, password: "zhu1241jie"} roleGroups: etcd: - node1 - node2 - node3 control-plane: - node1 - node2 - node3 worker: - node1 - node2 - node3 registry: - node1

    相关参数描述如下:

    参数描述
    hosts
    节点列表信息。
    name
    节点名称。
    address
    节点的 SSH 登录 IP 地址。
    internalAddress
    节点在子网内部的 IP 地址。
    user
    节点的 SSH 登录用户名,该用户必须为 root 用户或其他具有 sudo 命令执行权限的用户。如果使用 root 用户可不设置此参数。
    password
    节点的 SSH 登录密码。
    roleGroups
    节点角色信息。
    etcd
    安装 etcd 数据库的节点,一般设置为集群控制节点。
    control-plane
    集群控制节点。集群中可设置多个控制节点。
    worker
    集群工作节点。工作节点上可以创建虚拟机。多节点模式下集群中必须至少有 3 个工作节点,控制节点同时也可以是工作节点。
    registry
    定义集群中使用的镜像仓库部署在哪个节点上。一般情况下,指定为第一个节点的名称即可。
  6. spec:registry:privateRegistry 参数下,按如下配置设置私有镜像服务的地址,然后保存文件。

    registry: privateRegistry: "dockerhub.kubekey.local:5000" auths: "dockerhub.kubekey.local:5000": skipTLSVerify: true namespaceOverride: "" registryMirrors: [] insecureRegistries: []
  7. 执行以下命令将安装所需的镜像推送到私有镜像服务:

    bin/kk artifact images push -f config-sample.yaml -a kubekey-artifact.tar.gz

    推送过程中如果解档 kubekey-artifact.tar.gz 失败,执行以下命令清理 bin/kubekey

    rm -rf bin/kubekey/*

    如果显示如下信息则推送成功:

    _ __ _______ __ | |/ // ____\\ \\ / / | ' /| (___ \\ \\ / / |  <  \___ \  \ \/ /   | . \\ ____) | \\ / |_|\_\_____/ \\/ 19:49:26 CST [GreetingsModule] Greetings 19:49:26 CST message: [node3] Greetings, KubeKey! 19:49:26 CST message: [node1] Greetings, KubeKey! 19:49:27 CST message: [node2] Greetings, KubeKey! 19:49:27 CST success: [node3] 19:49:27 CST success: [node1] 19:49:27 CST success: [node2] 19:49:27 CST [UnArchiveArtifactModule] Check the KubeKey artifact md5 value 19:49:27 CST success: [LocalHost] 19:51:16 CST success: [LocalHost] 19:51:16 CST [ChownWorkerModule] Chown ./kubekey dir 19:51:16 CST success: [LocalHost] 19:51:16 CST Pipeline[ArtifactImagesPushPipeline] execute successfully

步骤二:删除 Calico 插件

  1. 执行以下命令删除 Kubernetes 中的网络资源:

    kubectl delete -f /etc/kubernetes/network-plugin.yaml
  2. 执行以下命令验证 Calico 已被移除:

    kubectl get pod -n kube-system

    如果回显信息中不存在 Calico 相关 Pod 则删除成功:

    NAME READY STATUS RESTARTS AGE coredns-7448499f4d-974cv 1/1 Running 0 11h kube-multus-ds-amd64-9cclk 1/1 Running 0 11h kube-multus-ds-amd64-f5ksq 1/1 Running 0 11h kube-multus-ds-amd64-wxb87 1/1 Running 0 11h
  3. 执行以下命令清理节点上的 Calico 相关配置:

    rm -f /etc/cni/net.d/10-calico.conflist /etc/cni/net.d/calico-kubeconfig rm -f /opt/cni/bin/calico /opt/cni/bin/calico-ipam rm -rf /etc/cni/net.d/00-multus.conf

    common:NOTE

    如果为多节点模式安装,需在每个 KSV 集群节点上执行以上命令清理 Calico 相关配置。

步骤三:安装 Kube-OVN 网络插件

  1. 执行以下命令下载 Kube-OVN 的安装脚本:

    wget https://raw.githubusercontent.com/kubeovn/kube-ovn/release-1.10/dist/images/install.sh
  2. 执行以下命令编辑 install.sh 文件:

    vim install.sh

    按如下配置修改文件中的 REGISTRYVERSION 参数:

    REGISTRY="dockerhub.kubekey.local:5000/kubeovn" VERSION="v1.10.7"
  3. 执行以下脚本安装 Kube-OVN:

    bash install.sh

    脚本执行到第 4 步时执行以下命令重启 Multus:

    kubectl -n kube-system rollout restart ds kube-multus-ds-amd64

步骤四:更换 ks-installer 镜像

  1. 执行以下命令修改 ks-installer 镜像:

    kubectl edit deploy ks-installer -n kubesphere-system

    按如下修改 spec:containers:image 配置:

    spec: containers: - image: dockerhub.kubekey.local:5000/kubespheredev/ksv-installer:v1.6.1 imagePullPolicy: Always name: ks-installer

    common:NOTE

    升级可能需要较长时间,请等待升级完成。

  2. 升级结束后,执行以下命令查看升级日志:

    ksv logs

    如果显示如下信息则升级成功:

    \*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\* Waiting for all tasks to be completed ... task openpitrix status is successful (1/5) task network status is successful (2/5) task multicluster status is successful (3/5) task virtualization status is successful (4/5) task monitoring status is successful (5/5) \*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\* Collecting installation results ... \##################################################### \### Welcome to Kubesphere Virtualization! ### \##################################################### Console: http://172.31.50.23:30880 Username: admin Password: P@88wOrd
  3. 从升级成功信息中的 ConsoleAccountPassword 参数分别获取 KSV 控制台的登录地址、管理员用户名和管理员密码,并使用网页浏览器登录 KSV Web 控制台。

    common:NOTE

    取决于您的网络环境,您可能需要配置流量转发规则并在防火墙中放行 30880 端口。

  4. 在虚拟机列表页面,查看集群中各虚拟机的状态。正常情况下,此时虚拟机应处于 KsVmUpgradeProcess 状态。

步骤五:创建子网映射

KSV 升级完成后,为确保网络通畅,需要为集群创建子网映射。如果 KSV v1.5.0 使用的 IP 池为物理网段,您需要配置物理子网;如果 KSV v1.5.0 使用的 IP 池为虚拟网段,您需要配置虚拟子网。您可以根据实际情况执行如下操作:

配置虚拟子网

本例中 KSV v1.5.0 使用虚拟子网 vxnet-w6vks5m0: 172.50.10.0/24,该网段不在可用的 VPC 范围。此时需要参考本文手动配置可用的 VPC 网段。

  1. 在 KSV v1.6.1 所在的服务器节点执行以下命令配置可用的 VPC 网段:

    kubectl edit ksv ksv-config -n kubesphere-virtualization-system

    按如下配置修改 spec:configuration:cidrBlocks 参数,然后保存文件:

    spec: configuration: accessMode: ReadWriteMany cidrBlocks: - 10.10.0.0/16 - 10.20.0.0/16 - 10.30.0.0/16 - 10.40.0.0/16 - 10.50.0.0/16 - 10.60.0.0/16 - 10.70.0.0/16 - 10.80.0.0/16 - 10.90.0.0/16 - 172.16.0.0/16 - 172.17.0.0/16 - 172.18.0.0/16 - 172.19.0.0/16 - 172.20.0.0/16 - 192.168.0.0/16 - 172.50.0.0/16
  2. 执行以下命令重启 ksv-apiserver 以生效配置:

    kubectl rollout restart deploy ksv-apiserver -n kubesphere-virtualization-system
  3. 在 KSV Web 控制台,进入 VPC 网络列表页面,然后点击右上角的创建

  4. 在弹出的对话框中,配置 VPC 网络。

    • 网段范围:选择前面步骤中所配置的网段 172.50.0.0/16

    • 默认虚拟子网:虚拟子网第 3 位填写与 v1.5.0 保持一致,即 172.50.10.0/24

    common:NOTE

    有关更多参数信息,请参阅创建 VPC 网络

  5. 执行以下命令关联 IP 池至 Kube-OVN 虚拟子网:

    \# 删除 webhook 限制 kubectl delete validatingwebhookconfigurations network.kubesphere.io \# 修改 IP 池映射(需记录 v1.5.0 使用的IP 池 ID;或者在新版本的虚拟机列表按 F12 查看) kubectl edit ippool.network.kubesphere.io -n kubesphere-system vxnet-w6vks5m0 \# 新增 annotations,关联至新的虚拟子网 subnet.network.kubesphere.io: net-yqmrrfta \# 重启 ksv-controller-manager kubectl -n kubesphere-virtualization-system rollout restart deploy ksv-controller-manager
  6. 返回 KSV Web 控制台,查看 v1.5.0 虚拟子网是否成功指向 Kube-OVN 虚拟子网。正常情况下,虚拟机的 IP 与升级前保持一致。

配置物理子网

如果 KSV v1.5.0 使用的是物理子网,您可以在升级完成后执行如下操作创建物理子网:

  1. 在 KSV Web 控制台,进入物理子网列表页面,然后点击右上角的创建

  2. 在弹出的对话框中,配置物理子网。

    common:NOTE

    物理子网的网段和网关与 v1.5.0 保持一致即可。

  3. 执行以下命令关联 IP 池至 Kube-OVN 物理子网:

    \# 删除 webhook 限制 kubectl delete validatingwebhookconfigurations network.kubesphere.io \# 修改IP池映射(需记录 v1.5.0 使用的 IP 池 ID;或者在新版本的虚拟机列表按 F12 查看) kubectl edit ippool.network.kubesphere.io -n kubesphere-system vxnet-3i9y4tq3 \# 新增 annotations,关联至新的虚拟子网 subnet.network.kubesphere.io: net-ox3vg6fa \# 重启 ksv-controller-manager kubectl -n kubesphere-virtualization-system rollout restart deploy ksv-controller-manager
  4. 返回 KSV Web 控制台,查看 v1.5.0 物理子网是否成功指向 Kube-OVN 物理子网。正常情况下,虚拟机的 IP 与升级前保持一致。

步骤六:更换用户 Kind 配置

  1. 执行以下命令生成 v1.5.0 的用户配置文件:

    kubectl get user -o yaml &gt; new_user.yaml
  2. 执行以下命令替换脚本并删除多余字段:

    \#!/bin/bash sed -i "s/User/KsvUser/g" new_user.yaml sed -i "/creationTimestamp/d" new_user.yaml sed -i "/finalizers:/d" new_user.yaml sed -i "/finalizers.kubesphere.io/d" new_user.yaml sed -i "/generation:/d" new_user.yaml sed -i "/resourceVersion:/d" new_user.yaml sed -i "/uid:/d" new_user.yaml sed -i "/lastTransitionTime:/d" new_user.yaml sed -i "/lastLoginTime:/d" new_user.yaml sed -i "/state:/d" new_user.yaml sed -i "/status:/d" new_user.yaml
  3. 执行并应用脚本:

    \# 执行脚本 sh user.sh \# Apply 用户脚本 kubectl apply -f new_user.yaml

步骤七:迁移激活码

当上述步骤完成后,如果您之前已激活 KSV v1.5.0 集群且许可证未到期,您需要执行以下操作查询历史激活码并使用该激活码激活升级后的 KSV v1.6.1 集群:

  1. 执行以下命令查询历史激活码:

    kubectl -n kubesphere-system get secrets ks-license -ojsonpath='{.data.license}'
  2. 将查询到的历史激活码复制至 KSV Web 控制台以激活 KSV v1.6.1 集群。有关如何激活许可证,请参阅激活许可证