Air-Gapped Upgrade with KubeKey

Air-gapped upgrade with KubeKey is recommended for users whose KubeSphere and Kubernetes were both deployed by KubeKey. If your Kubernetes cluster was provisioned by yourself or cloud providers, refer to Air-gapped Upgrade with ks-installer.

Prerequisites

  • You need to have a KubeSphere cluster running v3.2.x. If your KubeSphere version is v3.1.x or earlier, upgrade to v3.2.x first.
  • Your Kubernetes version must be v1.19.x, v1.20.x, v1.21.x, v1.22.x, and v1.23.x (experimental support).
  • Read Release Notes for 3.3.0 carefully.
  • Back up any important component beforehand.
  • A Docker registry. You need to have a Harbor or other Docker registries.
  • Make sure every node can push and pull images from the Docker Registry.

Upgrade KubeSphere and Kubernetes

Upgrading steps are different for single-node clusters (all-in-one) and multi-node clusters.

Info

KubeKey upgrades Kubernetes from one MINOR version to the next MINOR version until the target version. For example, you may see the upgrading process going from 1.16 to 1.17 and to 1.18, instead of directly jumping to 1.18 from 1.16.

System Requirements

SystemsMinimum Requirements (Each node)
Ubuntu 16.04, 18.04, 20.04CPU: 2 Cores, Memory: 4 G, Disk Space: 40 G
Debian Buster, StretchCPU: 2 Cores, Memory: 4 G, Disk Space: 40 G
CentOS 7.xCPU: 2 Cores, Memory: 4 G, Disk Space: 40 G
Red Hat Enterprise Linux 7CPU: 2 Cores, Memory: 4 G, Disk Space: 40 G
SUSE Linux Enterprise Server 15 /openSUSE Leap 15.2CPU: 2 Cores, Memory: 4 G, Disk Space: 40 G

Note

KubeKey uses /var/lib/docker as the default directory where all Docker related files, including images, are stored. It is recommended you add additional storage volumes with at least 100G mounted to /var/lib/docker and /mnt/registry respectively. See fdisk command for reference.

Step 1: Download KubeKey

Similar to installing KubeSphere on Linux in an online environment, you need to download KubeKey v2.2.1 first. Download the tar.gz file, and transfer it to your local machine which serves as the taskbox for installation. After you uncompress the file, execute the following command to make kk executable:

  1. chmod +x kk

Step 2: Prepare installation images

As you install KubeSphere and Kubernetes on Linux, you need to prepare an image package containing all the necessary images and download the Kubernetes binary file in advance.

  1. Download the image list file images-list.txt from a machine that has access to Internet through the following command:

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

    Note

    This file lists images under ##+modulename based on different modules. You can add your own images to this file following the same rule.

  2. Download offline-installation-tool.sh.

    1. curl -L -O https://github.com/kubesphere/ks-installer/releases/download/v3.3.0/offline-installation-tool.sh
  3. Make the .sh file executable.

    1. chmod +x offline-installation-tool.sh
  4. You can execute the command ./offline-installation-tool.sh -h to see how to use the script:

    1. [email protected]:/home/ubuntu# ./offline-installation-tool.sh -h
    2. Usage:
    3. ./offline-installation-tool.sh [-l IMAGES-LIST] [-d IMAGES-DIR] [-r PRIVATE-REGISTRY] [-v KUBERNETES-VERSION ]
    4. Description:
    5. -b : save kubernetes' binaries.
    6. -d IMAGES-DIR : the dir of files (tar.gz) which generated by `docker save`. default: /home/ubuntu/kubesphere-images
    7. -l IMAGES-LIST : text file with list of images.
    8. -r PRIVATE-REGISTRY : target private registry:port.
    9. -s : save model will be applied. Pull the images in the IMAGES-LIST and save images as a tar.gz file.
    10. -v KUBERNETES-VERSION : download kubernetes' binaries. default: v1.17.9
    11. -h : usage message
  5. Download the Kubernetes binary file.

    1. ./offline-installation-tool.sh -b -v v1.21.5

    If you cannot access the object storage service of Google, run the following command instead to add the environment variable to change the source.

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

    Note

    • You can change the Kubernetes version downloaded based on your needs. Recommended Kubernetes versions for KubeSphere 3.3.0 are v1.19.x, v1.20.x, v1.21.x, v1.22.x, and v1.23.x (experimental support). If you do not specify a Kubernetes version, KubeKey will install Kubernetes v1.23.7 by default. For more information about supported Kubernetes versions, see Support Matrix.

    • You can upgrade Kubernetes from v1.16.13 to v1.17.9 by downloading the v1.17.9 Kubernetes binary file, but for cross-version upgrades, all intermediate versions need to be downloaded in advance. For example, if you want to upgrade Kubernetes from v1.15.12 to v1.18.6, you need to download Kubernetes v1.16.13 and v1.17.9, and the v1.18.6 binary file.

    • After you run the script, a folder kubekey is automatically created. Note that this file and kk must be placed in the same directory when you create the cluster later.

  6. Pull images in offline-installation-tool.sh.

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

    Note

    You can choose to pull images as needed. For example, you can delete ##k8s-images and related images under it in images-list.text if you already have a Kubernetes cluster.

Step 3: Push images to your private registry

Transfer your packaged image file to your local machine and execute the following command to push it to the registry.

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

Note

The domain name is dockerhub.kubekey.local in the command. Make sure you use your own registry address.

Air-gapped upgrade for all-in-one clusters

Example machines

Host NameIPRolePortURL
master192.168.1.1Docker registry5000http://192.168.1.1:5000
master192.168.1.1master, etcd, worker

Versions

KubernetesKubeSphere
Beforev1.18.6v3.2.x
Afterv1.21.53.3.0

Upgrade a cluster

In this example, KubeSphere is installed on a single node, and you need to specify a configuration file to add host information. Besides, for air-gapped installation, pay special attention to .spec.registry.privateRegistry, which must be set to your own registry address. For more information, see the following sections.

Create an example configuration file

Execute the following command to generate an example configuration file for installation:

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

For example:

  1. ./kk create config --with-kubernetes v1.22.10 --with-kubesphere v3.3.0 -f config-sample.yaml

Note

Make sure the Kubernetes version is the one you downloaded.

Edit the configuration file

Edit the configuration file config-sample.yaml. Here is an example for your reference.

Warning

For air-gapped installation, you must specify privateRegistry, which is dockerhub.kubekey.local in this example.

Set hosts of your config-sample.yaml file:

  1. hosts:
  2. - {name: ks.master, address: 192.168.1.1, internalAddress: 192.168.1.1, user: root, password: [email protected]}
  3. roleGroups:
  4. etcd:
  5. - ks.master
  6. control-plane:
  7. - ks.master
  8. worker:
  9. - ks.master

Set privateRegistry of your config-sample.yaml file:

  1. registry:
  2. registryMirrors: []
  3. insecureRegistries: []
  4. privateRegistry: dockerhub.kubekey.local

Upgrade your single-node cluster to KubeSphere 3.3.0 and Kubernetes v1.22.10

  1. ./kk upgrade -f config-sample.yaml

To upgrade Kubernetes to a specific version, explicitly provide the version after the flag --with-kubernetes. Available versions are v1.19.x, v1.20.x, v1.21.x, v1.22.x, and v1.23.x (experimental support).

Air-gapped upgrade for multi-node clusters

Example machines

Host NameIPRolePortURL
master192.168.1.1Docker registry5000http://192.168.1.1:5000
master192.168.1.1master, etcd
slave1192.168.1.2worker
slave1192.168.1.3worker

Versions

KubernetesKubeSphere
Beforev1.18.6v3.2.x
Afterv1.22.103.3.0

Upgrade a cluster

In this example, KubeSphere is installed on multiple nodes, so you need to specify a configuration file to add host information. Besides, for air-gapped installation, pay special attention to .spec.registry.privateRegistry, which must be set to your own registry address. For more information, see the following sections.

Create an example configuration file

Execute the following command to generate an example configuration file for installation:

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

For example:

  1. ./kk create config --with-kubernetes v1.22.10 --with-kubesphere v3.3.0 -f config-sample.yaml

Note

Make sure the Kubernetes version is the one you downloaded.

Edit the configuration file

Edit the configuration file config-sample.yaml. Here is an example for your reference.

Warning

For air-gapped installation, you must specify privateRegistry, which is dockerhub.kubekey.local in this example.

Set hosts of your config-sample.yaml file:

  1. hosts:
  2. - {name: ks.master, address: 192.168.1.1, internalAddress: 192.168.1.1, user: root, password: [email protected]}
  3. - {name: ks.slave1, address: 192.168.1.2, internalAddress: 192.168.1.2, user: root, privateKeyPath: "/root/.ssh/kp-qingcloud"}
  4. - {name: ks.slave2, address: 192.168.1.3, internalAddress: 192.168.1.3, user: root, privateKeyPath: "/root/.ssh/kp-qingcloud"}
  5. roleGroups:
  6. etcd:
  7. - ks.master
  8. control-plane:
  9. - ks.master
  10. worker:
  11. - ks.slave1
  12. - ks.slave2

Set privateRegistry of your config-sample.yaml file:

  1. registry:
  2. registryMirrors: []
  3. insecureRegistries: []
  4. privateRegistry: dockerhub.kubekey.local

Upgrade your multi-node cluster to KubeSphere 3.3.0 and Kubernetes v1.22.10

  1. ./kk upgrade -f config-sample.yaml

To upgrade Kubernetes to a specific version, explicitly provide the version after the flag --with-kubernetes. Available versions are v1.19.x, v1.20.x, v1.21.x, v1.22.x, and v1.23.x (experimental support).