[マスターノードでの準備と安全確保]
1)etcdctl クライアントのインストール: (未インストールの場合は必要)
apt update
apt install etcd-client
2)etcd バックアップの取得と退避 (最重要):
ETCDCTL_API=3 etcdctl --endpoints=127.0.0.1:2379 \
--cacert=/etc/kubernetes/pki/etcd/ca.crt \
--cert=/etc/kubernetes/pki/apiserver-etcd-client.crt \
--key=/etc/kubernetes/pki/apiserver-etcd-client.key \
snapshot save /tmp/etcd_backup_$(date +%Y%m%d_%H%M%S).db
3)ファイルをクラスター外の安全な場所(ローカルPCなど)にコピーします。
環境によって、異なるので割愛します。(おそらくSCPなど待避されるのではと思いますが)
4)Pod Disruption Budget (PDB) の一時削除:
ドレインをブロックするIstioなどのPDBを削除します。
kubectl delete pdb istio-ingressgateway -n istio-system
kubectl delete pdb istiod -n istio-system
[コントロールプレーンのアップグレード]
1)kubeadm バイナリの更新:
apt-mark unhold kubeadm
apt install -y kubeadm=1.34.2-1.1
apt-mark hold kubeadm
2)コアコンポーネントの適用:
kubeadm upgrade apply v1.34.2
3)kubelet と kubectl パッケージの更新:
apt-mark unhold kubelet kubectl
apt install -y kubelet=1.34.2-1.1 kubectl=1.34.2-1.1
4)kubelet の再起動:
systemctl daemon-reload
systemctl restart kubelet
5)パッケージのホールド再設定:
apt-mark hold kubelet kubectl
[ワーカーノードのアップグレード(ノードごとに繰り返し)]
rasp-node1 と rasp-node2 で、以下の手順を1台ずつ実行します。
1)ドレイン(マスターノードで実行):
kubectl drain <ノード名> --ignore-daemonsets --delete-emptydir-data --force
2)ノードの設定更新(ワーカーノードで実行)
対象のワーカーノードにログインし、kubeletの設定を更新します。
kubeadm upgrade node
3)kubelet サービス更新(ワーカーノードで実行)
apt-mark unhold kubelet
apt install -y kubelet=1.34.2-1.1
systemctl daemon-reload
systemctl restart kubelet
apt-mark hold kubelet
4)アンコルドン(マスターノードで実行
kubectl uncordon <ノード名>
[ 最終確認と PDB の再適用]
実行場所: マスターノード (rasp-master)
- 全ノードバージョン確認: すべてのノードが v1.34.2 で Ready であることを確認します
kubectl get nodes