毎回クラスタのアップグレード手順を忘れるのでメモ。
環境は以前こちらで紹介した手順で構築したクラスタです。Ubuntu20.04でk8sのバージョンはv1.25.4でした。
手順は公式を参照しています。(というか、ほぼそのままです。)
v1.25を参照していますが、最新版も手順は同じようです。
https://v1-25.docs.kubernetes.io/docs/tasks/administer-cluster/kubeadm/kubeadm-upgrade/
始める前に
リポジトリの公開鍵が変わったのか、以前登録した鍵が使えず再登録しました。
その際に以前と手順が変わっていたようなので、全ノードでリポジトリの登録からやりなおしています。
(apt-keyが非推奨になっていたのはなんとなく聞いたことがあったと思いますが、それに合わせて変わっていたようです。)
# 事前にディレクトリを作成しておく
sudo mkdir -p /etc/apt/keyrings
sudo curl -fsSLo /etc/apt/keyrings/kubernetes-archive-keyring.gpg https://packages.cloud.google.com/apt/doc/apt-key.gpg
echo "deb [signed-by=/etc/apt/keyrings/kubernetes-archive-keyring.gpg] https://apt.kubernetes.io/ kubernetes-xenial main" | sudo tee /etc/apt/sources.list.d/kubernetes.list
1台目のコントロールプレーンをアップグレードする
最新のバージョンを確認する
利用できるバージョンは下記のコマンドで確認できます。
今回は現在時点での1.25
で、最新の1.25.7
を選択しました。
sudo apt update
apt-cache madison kubeadm
kubeadmをアップグレードする
kubeadmを使ってクラスターを管理していますので、kubeadmを使ってアップグレードします。
はじめにkubeadm自身のバージョンをアップグレードします。
sudo apt-mark unhold kubeadm
sudo apt install kubeadm=1.25.7-00
sudo apt-mark hold kubeadm
kubeadm version
クラスタをアップグレードし、コンフィグを更新する
kubeadmのアップグレードが終わったらクラスターをアップグレードします。
最初にアップグレードができるか、アップグレード後のバージョンなどを確認してからアップグレードを行います。
sudo kubeadm upgrade plan
sudo kubeadm upgrade apply v1.25.7
この後必要に応じてCNIをアップグレードしてください。
kubeletなどをアップグレードする
最後にkubeletやkubectlをアップグレードします。
アップグレードの過程でkubeletが停止し、k8sのコントロールが効かなくなるため事前にdrainしておきます。
kubectl drain kube-ctrl1 --ignore-daemonsets
続いてkubelet、kubectlをアップグレードします。
当然ですが、バージョンは合わせてください。
sudo apt-mark unhold kubelet kubectl
sudo apt install kubelet=1.25.7-00 kubectl=1.25.7-00
sudo apt-mark hold kubelet kubectl
アップグレードが終わったら、サービスを再起動します。
sudo systemctl daemon-reload
sudo systemctl restart kubelet
最後にuncordonして1つ目のコントロールプレーンはアップグレード完了です。
kubectl uncordon kube-ctrl1
2台目以降のコントロールプレーンをアップグレードする
kubeadm upgrade
が変わったり、CNIのアップグレードが不要だったりと少し手順が変わりますが、他はほぼ同じため説明を省略します。
下記を他の全てのコントロールプレーンで行います。
kubeadmをアップグレードする
sudo apt-mark unhold kubeadm
sudo apt install kubeadm=1.25.7-00
sudo apt-mark hold kubeadm
kubeadm version
コンフィグを更新する
今回は2台目以降のコントロールプレーンのアップグレードのためkubeadm upgrade apply
ではなく、kubeadm upgrade node
を使用します。
sudo kubeadm upgrade node
kubeletなどをアップグレードする
kubectl drain kube-ctrl2 --ignore-daemonsets
sudo apt-mark unhold kubelet kubectl
sudo apt install kubelet=1.25.7-00 kubectl=1.25.7-00
sudo apt-mark hold kubelet kubectl
sudo systemctl daemon-reload
sudo systemctl restart kubelet
kubectl uncordon kube-ctrl2
ワーカーノードをアップグレードする
「2台目以降のコントロールプレーンをアップグレードする」と同じ手順のため、説明を省きます。
リソースが不足しないように、1台ずつ実施してください。
kubeadmをアップグレードする
sudo apt-mark unhold kubeadm
sudo apt install kubeadm=1.25.7-00
sudo apt-mark hold kubeadm
kubeadm version
コンフィグを更新する
sudo kubeadm upgrade node
kubeletなどをアップグレードする
kubectl drain kube-work1 --ignore-daemonsets
sudo apt-mark unhold kubelet kubectl
sudo apt install kubelet=1.25.7-00 kubectl=1.25.7-00
sudo apt-mark hold kubelet kubectl
sudo systemctl daemon-reload
sudo systemctl restart kubelet
kubectl uncordon kube-work1
あとがき
まとめてみると手順はシンプルですね。(kubeadm便利!)
備忘録なので今回はこの辺にしておきます。
誤字、脱字、間違い等があればご指摘いただければ幸いです。