はじめに
kubeadmで用意したノードのkubeadm/kubelet/kubectlをaptでアップグレードした際のメモです。
環境情報
- kubectl v1.17.0
- kubeadm v1.17.0
- kubelet v1.17.0
kubeadmのバージョンアップ
バージョンアップ前にdrainコマンドでPodがスケジュールされない状態にします。
$ kubectl drain master -v=6 5438 loader.go:375] Config loaded from file: ~.kube/config 5438 round_trippers.go:443] GET https://172.17.0.5:6443/api/v1/nodes/master 200 OK in 13milliseconds 5438 round_trippers.go:443] PATCH https://172.17.0.5:6443/api/v1/nodes/master 200 OK in 5 milliseconds node/master01 cordoned 5438 round_trippers.go:443] GET https://172.17.0.5:6443/api/v1/pods?fieldSelector=spec.nodeName%3Dmaster 200 OK in 10 milliseconds 5438 round_trippers.go:443] GET https://172.17.0.5:6443/apis/apps/v1/namespaces/kube-system/daemonsets/kube-proxy 200 OK in 2 milliseconds 5438 round_trippers.go:443] GET https://172.17.0.5:6443/apis/apps/v1/namespaces/kube-system/daemonsets/weave-net 200 OK in 3 milliseconds node/master drained
以下でkubeadmの新バージョンをインストールします。
$ apt install kubeadm=1.18.0-00
インストールするとコマンド上ではバージョンが変わっていますが
$ kubeadm version kubeadm version: &version.Info{Major:"1", Minor:"18", GitVersion:"v1.18.0",
まだ実際のバージョンには反映されていません。
$ kubectl get pod -n kube-system kube-apiserver-master -o=yaml apiVersion: v1 ... image: k8s.gcr.io/kube-apiserver:v1.17.0 ...
以下コマンドでapplyして初めてバージョンとして反映されます。
$ kubeadm upgrade apply v1.18.0 [upgrade/config] Making sure the configuration is correct: [upgrade/config] Reading configuration from the cluster... [upgrade/config] FYI: You can look at this config file with 'kubectl -n kube-system get cm kubeadm-config -oyaml' [preflight] Running pre-flight checks. [upgrade] Running cluster health checks [upgrade/version] You have chosen to change the cluster version to "v1.18.0" [upgrade/versions] Cluster version: v1.17.0 ... [upgrade/successful] SUCCESS! Your cluster was upgraded to "v1.18.0". Enjoy ..
確かにイメージも最新バージョンになっています。
$ kubectl get pod -n kube-system kube-apiserver-master -o=yaml ... image: k8s.gcr.io/kube-apiserver:v1.18.0 ...
ちなみにaptで新バージョンを落とす前にapplyすると以下エラーとなります。
$ kubeadm upgrade apply v1.18.0 ... [upgrade/version] FATAL: the --version argument is invalid due to these fatal errors: - Specified version to upgrade to "v1.18.0" is at least one minor release higher than the kubeadm minor release (18 > 17). Such an upgrade is not supported Please fix the misalignments highlighted above and try upgrading again To see the stack trace of this error execute with --v=5 or higher
kubelet/kubectlのバージョンアップ
kubeadmを最新化してもkubectl get node
で表示されるバージョンは変化していません。
$ kubectl get node NAME STATUS ROLES AGE VERSION master01 Ready,SchedulingDisabled master x v1.17.0
ここはkubeletの新バージョンをインストールして初めて変化します。
$ apt install kubelet=1.18.0-00 ... Unpacking kubelet (1.18.0-00) over (1.17.0-00) ... Setting up kubelet (1.18.0-00) ...
$ kubectl get node NAME STATUS ROLES AGE VERSION master01 Ready,SchedulingDisabled master x v1.18.0
kubectlも同じように新バージョンをインストールすれば
$ apt install kubectl=1.18.0-00 ... Preparing to unpack .../kubectl_1.18.0-00_amd64.deb ... Unpacking kubectl (1.18.0-00) over (1.17.0-00) ... Setting up kubectl (1.18.0-00) ...
即時反映されます。
$ kubectl version Client Version: version.Info{Major:"1", Minor:"18", GitVersion:"v1.18.0", GitCommit:"xx...
終わりに
kubeadmのみは実際にインストールしたのちにkubeadm upgrade apply
が必要である点は覚えておきたいです。また、kubeadm upgrade plan
を利用すればその時点でapplyできるバージョンが確認できます。
以上、ご参考になれば幸いです。