今回は Kubernetes クラスターをアップデートする手順をまとめてみます。運用環境ではないためスムーズに進められましたが、サービス運用している Pod などが稼働している場合は、アプリケーション観点でも更新の計画を立てる必要があります。
あくまでも Kubernetes クラスターの主要機能をアップグレードする手順を紹介します。公式ドキュメントとしては次のページを参考にしています。
Upgrading kubeadm clusters | Kubernetes
Kubernetes アップグレード概要
前提として、Kubernetes のバージョンは X.Y.Z のような表記となっており、X がメジャー バージョン、Y がマイナー バージョン、Z がパッチ バージョンを示しています。各バージョンの追加機能に関してはリリース ノートから確認できます。
community/versioning.md at master · kubernetes/community (github.com)
Kubernetes のバージョンをアップグレードする際は、マイナー バージョンを一つずつ上げていく必要があります。簡単に言えば、1.n バージョンの時は 1.n+1 バージョンにアップグレード可能で、1.n から 1.n+2 にはアップグレードできないということです。もしくは同一マイナー バージョンでパッチ バージョンがより大きいものにアップグレードできます。
今回は 1.18.2 から 1.22.2 まで一気にアップグレードをしたので、その手順を共通化してまとめています。なお、その際のアップグレード パスは次の通りでした。各ノードは Ubuntu を利用しています。
1.18.2 → 1.19.15 → 1.20.11→ 1.21.5 → 1.22.2
Kubernetes アップグレード手順
Kubernetes のアップグレードは大まかに次の流れとなります。
- プライマリのマスター ノードをアップグレード
- セカンダリのマスター ノードをアップグレード
- ワーカー ノードをアップグレード
マスター ノード アップグレード
kubeadm のアップグレード
まず、アップグレード可能なバージョンを確認します。次のコマンドでリポジトリから取得可能なバージョンの一覧を表示します。
apt update
apt-cache madison kubeadm
一覧からアップグレードしたいマイナーバージョンの最新バージョンを確認します。表示結果は一部省略しています。
$ apt-cache madison kubeadm kubeadm | 1.22.2-00 | https://apt.kubernetes.io kubernetes-xenial/main amd64 Packages kubeadm | 1.21.5-00 | https://apt.kubernetes.io kubernetes-xenial/main amd64 Packages kubeadm | 1.20.11-00 | https://apt.kubernetes.io kubernetes-xenial/main amd64 Packages kubeadm | 1.19.15-00 | https://apt.kubernetes.io kubernetes-xenial/main amd64 Packages kubeadm | 1.18.20-00 | https://apt.kubernetes.io kubernetes-xenial/main amd64 Packages
次のコマンドでアップグレードするバージョンをインストールします。バージョンは先ほどのコマンドで確認したアップグレード先のマイナーバージョンのうち、最新のパッチバージョンを指定します。
apt-mark unhold kubeadm && \
> apt-get update && apt-get install -y kubeadm=1.YY.ZZ-00 && \
> apt-mark hold kubeadm
インストールが完了したらアップグレードの検証を行います。次のコマンドを実行して、表示結果にアップグレードコマンドが表示されていれば問題ありません。
kubeadm upgrade plan
Upgrade to the latest stable version: COMPONENT CURRENT AVAILABLE kube-apiserver v1.18.2 v1.19.15 kube-controller-manager v1.18.2 v1.19.15 kube-scheduler v1.18.2 v1.19.15 kube-proxy v1.18.2 v1.19.15 CoreDNS 1.6.7 1.7.0 etcd 3.4.3-0 3.4.13-0 You can now apply the upgrade by executing the following command: kubeadm upgrade apply v1.19.15
コントロール プレーンのうち 1 台にて、表示されたコマンドで kubeadm のアップグレードを実行します。
kubeadm upgrade apply v1.YY.ZZ
表示結果で ‘[upgrade/successful]’ が表示されていればアップグレードは成功です。
[upgrade/successful] SUCCESS! Your cluster was upgraded to "v1.19.15". Enjoy! [upgrade/kubelet] Now that your control plane is upgraded, please proceed with upgrading your kubelets if you haven't already done so.
他のコントロール プレーンがある場合は、`kubeadm upgrade apply` の代わりに次のコマンドで kubeadm のアップグレードを実行します。
kubeadm upgrade node
kubelet / kubectl のアップグレード
実行中の Pod がある場合は、アップグレードを実行する前にノードから退避させておきます。
kubectl drain <node 名> --ignore-daemonsets
次のコマンドを実行して kubelet と kubectl のアップグレードするバージョンをインストールをします。
apt-mark unhold kubelet kubectl && \
apt-get update && apt-get install -y kubelet=1.YY.ZZ-00 kubectl=1.YY.ZZ-00 && \
apt-mark hold kubelet kubectl
インストールが完了したら次のコマンドで kubelet を再起動します。
sudosystemctl daemon-reload
sudosystemctl restart kubelet
アップグレードが完了したら、Pod がスケジューリングされるようにします。
kubectl uncordon <node 名>
ワーカー ノード アップグレード
kubeadm のアップグレード
次のコマンドでアップグレードするバージョンをインストールします。バージョンはコントロール プレーンで確認したアップグレード先のマイナーバージョン、最新のパッチバージョンを指定します。
apt-mark unhold kubeadm && \
> apt-get update && apt-get install -y kubeadm=1.YY.ZZ-00 && \
> apt-mark hold kubeadm
次のコマンドで kubeadm のアップグレードを実行します。
kubeadm upgrade node
kubelet / kubectl のアップグレード
実行中の Pod がある場合は、アップグレードを実行する前にノードから退避させておきます。
kubectl drain <node 名> --ignore-daemonsets
次のコマンドを実行して kubelet と kubectl のアップグレードするバージョンをインストールをします。
apt-mark unhold kubelet kubectl && \
apt-get update && apt-get install -y kubelet=1.YY.ZZ-00 kubectl=1.YY.ZZ-00 && \
apt-mark hold kubelet kubectl
インストールが完了したら次のコマンドで kubelet を再起動します。
sudo systemctl daemon-reload
sudo systemctl restart kubelet
アップグレードが完了したら、Pod がスケジューリングされるようにします。
kubectl uncordon <node 名>
アップグレード確認
ノードのバージョンがアップグレードされ、状態が Ready となっていれば問題ありません。
$ kubectl get nodes NAME STATUS ROLES AGE VERSION k8s-master-01 Ready control-plane,master 59d v1.22.2 k8s-worker-01 Ready <none> 59d v1.22.2 k8s-worker-02 Ready <none> 59d v1.22.2
コメント