動かざることバグの如し

近づきたいよ 君の理想に

kubeadmで構築したおうちKubernetesアップグレードメモ

やったこと

  • v1.26からv.29にアップデート

確認

ubuntu04,05がコントロールプレーンでubuntu01,02がワーカーノード

❯ kubectl get node -o wide
NAME       STATUS   ROLES           AGE    VERSION   INTERNAL-IP     EXTERNAL-IP   OS-IMAGE             KERNEL-VERSION           CONTAINER-RUNTIME
ubuntu01   Ready    <none>          329d   v1.26.0   192.168.16.11   <none>        Ubuntu 20.04.4 LTS   5.15.0-91-generic        containerd://1.6.18
ubuntu02   Ready    <none>          329d   v1.26.3   192.168.16.12   <none>        Ubuntu 20.04.6 LTS   5.15.0-91-generic        containerd://1.6.18
ubuntu04   Ready    control-plane   329d   v1.26.3   192.168.16.14   <none>        Ubuntu 20.04.4 LTS   5.15.0-1046-intel-iotg   containerd://1.7.13
ubuntu05   Ready    control-plane   329d   v1.26.0   192.168.16.15   <none>        Ubuntu 20.04.4 LTS   5.15.0-1046-intel-iotg   containerd://1.6.18
root@ubuntu04:~# kubeadm version
kubeadm version: &version.Info{Major:"1", Minor:"26", GitVersion:"v1.26.3", GitCommit:"9e644106593f3f4aa98f8a84b23db5fa378900bd", GitTreeState:"clean", BuildDate:"2023-03-15T13:38:47Z", GoVersion:"go1.19.7", Compiler:"gc", Platform:"linux/amd64"}

【共通】レポジトリの変更

Ubuntuの場合は apt.kubernetes.io からダウンロードしていたが廃止されてしまった

pkgs.k8s.io: Introducing Kubernetes Community-Owned Package Repositories | Kubernetes

まずは apt installできるように再設定する 任意のバージョンを入れる

mkdir -p /etc/apt/keyrings/
curl -fsSL https://pkgs.k8s.io/core:/stable:/v1.29/deb/Release.key | sudo gpg --dearmor -o /etc/apt/keyrings/kubernetes-apt-keyring.gpg

cat <<EOF | sudo tee /etc/apt/sources.list.d/kubernetes.list
deb [signed-by=/etc/apt/keyrings/kubernetes-apt-keyring.gpg] https://pkgs.k8s.io/core:/stable:/v1.29/deb/ /
EOF

apt update してから確認 pkgs.k8s.ioになっているはず

root@ubuntu04:~# apt-cache madison kubeadm | grep 1.27
   kubeadm | 1.27.10-1.1 | https://pkgs.k8s.io/core:/stable:/v1.27/deb  Packages
   kubeadm | 1.27.9-1.1 | https://pkgs.k8s.io/core:/stable:/v1.27/deb  Packages
   kubeadm | 1.27.8-1.1 | https://pkgs.k8s.io/core:/stable:/v1.27/deb  Packages
   kubeadm | 1.27.7-1.1 | https://pkgs.k8s.io/core:/stable:/v1.27/deb  Packages
   kubeadm | 1.27.6-1.1 | https://pkgs.k8s.io/core:/stable:/v1.27/deb  Packages
   kubeadm | 1.27.5-1.1 | https://pkgs.k8s.io/core:/stable:/v1.27/deb  Packages
   kubeadm | 1.27.4-1.1 | https://pkgs.k8s.io/core:/stable:/v1.27/deb  Packages
   kubeadm | 1.27.3-1.1 | https://pkgs.k8s.io/core:/stable:/v1.27/deb  Packages
   kubeadm | 1.27.2-1.1 | https://pkgs.k8s.io/core:/stable:/v1.27/deb  Packages
   kubeadm | 1.27.1-1.1 | https://pkgs.k8s.io/core:/stable:/v1.27/deb  Packages
   kubeadm | 1.27.0-2.1 | https://pkgs.k8s.io/core:/stable:/v1.27/deb  Packages

【共通】インストール

apt-mark unhold kubeadm kubelet kubectl
apt install -y kubeadm kubelet kubectl
apt-mark hold kubeadm kubelet kubectl

確認 この場合は1.28時点のもの

kubeadm version
kubeadm version: &version.Info{Major:"1", Minor:"28", GitVersion:"v1.28.6", GitCommit:"be3af46a4654bdf05b4838fe94e95ec8c165660c", GitTreeState:"clean", BuildDate:"2024-01-17T13:47:00Z", GoVersion:"go1.20.13", Compiler:"gc", Platform:"linux/amd64"}

【1台目のコントロールプレーンのみ】

クラスターのアップデートを行うために初回のみplan実行

kubeadm upgrade plan

以下のように表示されれば成功

You can now apply the upgrade by executing the following command:

        kubeadm upgrade apply v1.27.10

_____________________________________________________________________


The table below shows the current state of component configs as understood by this version of kubeadm.
Configs that have a "yes" mark in the "MANUAL UPGRADE REQUIRED" column require manual config upgrade or
resetting to kubeadm defaults before a successful upgrade can be performed. The version to manually
upgrade to is denoted in the "PREFERRED VERSION" column.

API GROUP                 CURRENT VERSION   PREFERRED VERSION   MANUAL UPGRADE REQUIRED
kubeproxy.config.k8s.io   v1alpha1          v1alpha1            no
kubelet.config.k8s.io     v1beta1           v1beta1             no
_____________________________________________________________________

言われたとおりに実行

kubeadm upgrade apply v1.27.10

【2台目以降のコントロールプレーン→ワーカーノードのみ】

【共通】インストールは同じなのでaptでアップデートする。その後

クラスターからノード外す

kubectl drain <ノード名> --ignore-daemonsets --delete-emptydir-data

アップデート

kubeadm upgrade node

systemctl restart kubelet
kubectl uncordon <ノード名>

参考リンク