使用 KubeKey 离线升级

对于 KubeSphere 和 Kubernetes 都是通过 All-in-One 安装或者多节点安装来部署的用户,推荐使用 KubeKey 离线升级。如果您的 Kubernetes 集群由云厂商托管或自行配置,请参考使用 ks-installer 离线升级

准备工作

  1. 您需要有一个运行在 v2.1.1 版本的 KubeSphere 集群。如果您的 KubeSphere 是 v2.1.0 或更早的版本,请先升级至 v2.1.1。

  2. Docker 仓库。您需要有一个 Harbor 或其他 Docker 仓库。有关更多信息,请参见准备一个私有镜像仓库

  3. 请确保每个节点都可以从该 Docker 仓库拉取镜像或向其推送镜像。

  4. 请仔细阅读 v3.0.0 发布说明

    警告

    在 v3.0.0 版本中,KubeSphere 重构了许多组件,例如 Fluent Bit Operator 和 IAM。如果您的这些组件有深度自定义配置(并非通过 KubeSphere 控制台配置),请务必先备份重要组件。

升级 KubeSphere 和 Kubernetes

单节点集群 (All-in-One) 和多节点集群的升级步骤不同。

信息

  • 升级 Kubernetes 将使 Helm 从 v2 升级到 v3。如果您想继续使用 Helm2,请先备份它:cp /usr/local/bin/helm /usr/local/bin/helm2
  • 当升级 Kubernetes 时,KubeKey 将从一个小版本升级到下一个小版本,直到目标版本。例如,您会发现升级过程是从 1.16 先升级到 1.17 然后再升级到 1.18,而不是直接从 1.16 升级到 1.18。

系统要求

系统最低要求(每个节点)
Ubuntu 16.04, 18.04CPU:2 核,内存:4 G,硬盘:40 G
Debian Buster, StretchCPU:2 核,内存:4 G,硬盘:40 G
CentOS 7.xCPU:2 核,内存:4 G,硬盘:40 G
Red Hat Enterprise Linux 7CPU:2 核,内存:4 G,硬盘:40 G
SUSE Linux Enterprise Server 15 /openSUSE Leap 15.2CPU:2 核,内存:4 G,硬盘:40 G

备注

KubeKey 使用 /var/lib/docker 作为默认路径来存储所有 Docker 相关文件(包括镜像)。建议您添加附加存储卷,分别给 /var/lib/docker/mnt/registry 挂载至少 100G。请参见 fdisk 的参考命令。

步骤 1:下载 KubeKey

与在 Linux 上在线安装 KubeSphere 相似,您也需要事先下载 KubeKey。下载 tar.gz 文件,将它传输到充当任务机的本地机器上进行安装。解压文件后,执行以下命令,使 kk 可执行:

chmod +x kk

步骤 2:准备安装镜像

当您在 Linux 上安装 KubeSphere 和 Kubernetes 时,需要准备一个包含所有必需镜像的镜像包,并事先下载 Kubernetes 二进制文件。

  1. 使用以下命令从能够访问互联网的机器上下载镜像清单文件 images-list.txt

    curl -L -O https://github.com/kubesphere/ks-installer/releases/download/v3.0.0/images-list.txt
    

    备注

    该文件根据不同的模块列出了 ##+modulename 下的镜像。您可以按照相同的规则把自己的镜像添加到这个文件中。要查看完整文件,请参见附录
  2. 下载 offline-installation-tool.sh

    curl -L -O https://github.com/kubesphere/ks-installer/releases/download/v3.0.0/offline-installation-tool.sh
    
  3. 使 .sh 文件可执行。

    chmod +x offline-installation-tool.sh
    
  4. 您可以执行命令 ./offline-installation-tool.sh -h 来查看如何使用脚本:

    root@master:/home/ubuntu# ./offline-installation-tool.sh -h
    Usage:
       
      ./offline-installation-tool.sh [-l IMAGES-LIST] [-d IMAGES-DIR] [-r PRIVATE-REGISTRY] [-v KUBERNETES-VERSION ]
       
    Description:
      -b                     : save kubernetes' binaries.
      -d IMAGES-DIR          : the dir of files (tar.gz) which generated by `docker save`. default: /home/ubuntu/kubesphere-images
      -l IMAGES-LIST         : text file with list of images.
      -r PRIVATE-REGISTRY    : target private registry:port.
      -s                     : save model will be applied. Pull the images in the IMAGES-LIST and save images as a tar.gz file.
      -v KUBERNETES-VERSION  : download kubernetes' binaries. default: v1.17.9
      -h                     : usage message
    
  5. 下载 Kubernetes 二进制文件。

    ./offline-installation-tool.sh -b -v v1.17.9 
    

    如果您无法访问 Google 的对象存储服务,请运行以下命令添加环境变量以变更来源。

    export KKZONE=cn;./offline-installation-tool.sh -b -v v1.17.9 
    

    备注

    • 您可以根据自己的需求变更下载的 Kubernetes 版本。支持的版本:v1.15.12、v1.16.13、v1.17.9(默认) 以及 v1.18.6。

    • 您可以通过下载 Kubernetes v1.17.9 二进制文件将 Kubernetes 从 v1.16.13 升级到 v1.17.9。但对于跨多个版本升级,需要事先下载所有中间版本,例如您想将 Kubernetes 从 v1.15.12 升级到 v1.18.6,则需要下载 Kubernetes v1.16.13、v1.17.9 和 v1.18.6 二进制文件。

    • 运行脚本后,会自动创建一个文件夹 kubekey。请注意,您稍后创建集群时,该文件和 kk 必须放在同一个目录下。

  6. offline-installation-tool.sh 中拉取镜像。

    ./offline-installation-tool.sh -s -l images-list.txt -d ./kubesphere-images
    

    备注

    您可以根据需要选择拉取的镜像。例如,如果已有一个 Kubernetes 集群,您可以在 images-list.text 中删除 ##k8s-images 和在它下面的相关镜像。

步骤 3:推送镜像至私有仓库

将打包的镜像文件传输至您的本地机器,并运行以下命令把它推送至仓库。

./offline-installation-tool.sh -l images-list.txt -d ./kubesphere-images -r dockerhub.kubekey.local

备注

命令中的域名是 dockerhub.kubekey.local。请确保使用您自己仓库的地址

离线升级 All-in-One 集群

示例机器

主机名称IP角色端口URL
master192.168.1.1Docker 仓库5000http://192.168.1.1:5000
master192.168.1.1master、etcd、worker

版本

KubernetesKubeSphere
升级前v1.16.13v2.1.1
升级后v1.17.9v3.0.0

升级集群

本示例中,KubeSphere 安装在单个节点上,您需要指定一个配置文件以添加主机信息。此外,离线安装时,请务必将 .spec.registry.privateRegistry 设置为您自己的仓库地址。有关更多信息,请参见下面的内容。

创建示例配置文件

执行以下命令生成示例配置文件用于安装:

./kk create config [--with-kubernetes version] [--with-kubesphere version] [(-f | --file) path]

例如:

./kk create config --with-kubernetes v1.17.9  --with-kubesphere v3.0.0 -f config-sample.yaml

备注

请确保 Kubernetes 版本和您下载的版本一致。

编辑配置文件

编辑该配置文件 config-sample.yaml。请查看供您参考的示例

警告

离线安装时,您必须指定 privateRegistry,在本示例中是 dockerhub.kubekey.local

设置 config-sample.yaml 文件中的 hosts

  hosts:
  - {name: ks.master, address: 192.168.1.1, internalAddress: 192.168.1.1, user: root, password: Qcloud@123}
  roleGroups:
    etcd:
    - ks.master
    master:
    - ks.master
    worker:
    - ks.master

设置 config-sample.yaml 文件中的 privateRegistry

  registry:
    registryMirrors: []
    insecureRegistries: []
    privateRegistry: dockerhub.kubekey.local

将单节点集群升级至 KubeSphere v3.0.0 和 Kubernetes v1.17.9(默认)

./kk upgrade -f config-sample.yaml

要将 Kubernetes 升级至特定版本,可以在 --with-kubernetes 标志后明确指定版本号。以下是可用版本:

  • v1.15.12
  • v1.16.8、v1.16.10、v1.16.12、v1.16.13
  • v1.17.0、v1.17.4、v1.17.5、v1.17.6、v1.17.7、v1.17.8、v1.17.9
  • v1.18.3、v1.18.5、v1.18.6

离线升级多节点集群

示例机器

主机名称IP角色端口URL
master192.168.1.1Docker 仓库5000http://192.168.1.1:5000
master192.168.1.1master、etcd
slave1192.168.1.2worker
slave1192.168.1.3worker

版本

KubernetesKubeSphere
升级前v1.16.13v2.1.1
升级后v1.17.9v3.0.0

升级集群

本示例中,KubeSphere 安装在多个节点上,因此您需要指定一个配置文件以添加主机信息。此外,离线安装时,请务必将 .spec.registry.privateRegistry 设置为您自己的仓库地址。有关更多信息,请参见下面的内容。

创建示例配置文件

执行以下命令生成示例配置文件用于安装:

./kk create config [--with-kubernetes version] [--with-kubesphere version] [(-f | --file) path]

例如:

./kk create config --with-kubernetes v1.17.9  --with-kubesphere v3.0.0 -f config-sample.yaml

备注

请确保 Kubernetes 版本和您下载的版本一致。

编辑配置文件

编辑该配置文件 config-sample.yaml。请查看供您参考的示例

警告

离线安装时,您必须指定 privateRegistry,在本示例中是 dockerhub.kubekey.local

设置 config-sample.yaml 文件中的 hosts

  hosts:
  - {name: ks.master, address: 192.168.1.1, internalAddress: 192.168.1.1, user: root, password: Qcloud@123}
  - {name: ks.slave1, address: 192.168.1.2, internalAddress: 192.168.1.2, user: root, privateKeyPath: "/root/.ssh/kp-qingcloud"}
  - {name: ks.slave2, address: 192.168.1.3, internalAddress: 192.168.1.3, user: root, privateKeyPath: "/root/.ssh/kp-qingcloud"}
  roleGroups:
    etcd:
    - ks.master
    master:
    - ks.master
    worker:
    - ks.slave1
    - ks.slave2

设置 config-sample.yaml 文件中的 privateRegistry

  registry:
    registryMirrors: []
    insecureRegistries: []
    privateRegistry: dockerhub.kubekey.local

将多节点集群升级至 KubeSphere v3.0.0 和 Kubernetes v1.17.9(默认)

./kk upgrade -f config-sample.yaml

要将 Kubernetes 升级至特定版本,可以在 --with-kubernetes 标志后明确指定版本号。以下是可用版本:

  • v1.15.12
  • v1.16.8、v1.16.10、v1.16.12、v1.16.13
  • v1.17.0、v1.17.4、v1.17.5、v1.17.6、v1.17.7、v1.17.8、v1.17.9
  • v1.18.3、v1.18.5、v1.18.6