Upgrading a Kubernetes Cluster Using kubeadm

Determine the type of upgrade: patch version (e.g., v1.12.0 → v1.12.7) or minor vertion (e.g., v1.12.7 → v1.13.0). Only upgrades between adjacent minor versions are supported.

Configure Kubernetes Package Repositories

If repositories are already configured, skip this step.

Debian/Ubuntu

apt-get update && apt-get install -y apt-transport-https
curl https://mirrors.aliyun.com/kubernetes/apt/doc/apt-key.gpg | gpg --dearmor -o /etc/apt/keyrings/kubernetes-apt-keyring.gpg
echo "deb [signed-by=/etc/apt/keyrings/kubernetes-apt-keyring.gpg] https://mirrors.aliyun.com/kubernetes/apt/ kubernetes-xenial main" | tee /etc/apt/sources.list.d/kubernetes.list
apt-get update
apt-get install -y kubelet kubeadm kubectl

CentOS/RHEL/Fedora

cat <<EOF > /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
enabled=1
gpgcheck=1
repo_gpgcheck=1
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF
setenforce 0
sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/' /etc/selinux/config
yum install -y kubelet kubeadm kubectl
systemctl enable --now kubelet

To install specific versions:

# List available versions
yum --enablerepo=kubernetes list kubelet kubeadm kubectl --showduplicates | sort -r

# Install exact versions
yum --enablerepo=kubernetes install -y \
  kubelet-1.13.0-0 \
  kubeadm-1.13.0-0 \
  kubectl-1.13.0-0

Verify Installed kubeadm Version

kubeadm version

Pre-pull Required Container Images

kubeadm config images list --kubernetes-version v1.13.0 > images.txt
while read -r image; do
  docker pull "$image"
done < images.txt

Check Upgrade Feasibility and Available Versions

kubeadm upgrade plan

Apply Control Plane Upgrade

On the control plane node, execute:

kubeadm upgrade apply v1.13.0

Cordon and Drain the Control Plane Node

NODE=$(hostname)
kubectl drain "$NODE" --ignore-daemonsets --delete-emptydir-data

Restart kubelet on Control Plane

systemctl daemon-reload
systemctl restart kubelet

Upgrade Worker Nodes

For each worker node:

  1. Cordon and drain the node from the control plane:
NODENAME="worker-01"
kubectl cordon "$NODENAME"
kubectl drain "$NODENAME" --ignore-daemonsets --delete-emptydir-data

  1. On the worker node, after updating packages (as in Step 2), configure the node:
kubeadm upgrade node --kubelet-version v1.13.0

  1. Restart kubelet:
systemctl daemon-reload
systemctl restart kubelet

  1. Uncordon the node from the control plane:
kubectl uncordon "$NODENAME"

Tags: kubernetes kubeadm cluster-upgrade container-orchestration

Posted on Thu, 09 Jul 2026 17:29:28 +0000 by maxpouliot