LoginSignup
4
3

More than 1 year has passed since last update.

Kubernetesアップグレード備忘録

Posted at

毎回クラスタのアップグレード手順を忘れるのでメモ。
環境は以前こちらで紹介した手順で構築したクラスタです。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便利!)
備忘録なので今回はこの辺にしておきます。
誤字、脱字、間違い等があればご指摘いただければ幸いです。

Reference

4
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
3