Closed oomichi closed 5 years ago
https://kubernetes.io/docs/reference/setup-tools/kubeadm/kubeadm-upgrade/
kubeadm upgrade
はユーザフレンドリーなコマンドであり、複雑なアップグレードロジックを1つのコマンドにラッピングしてくれている。このコマンドは、アップグレードのプランニングと実際のアップグレード実施の両方をサポートしている。kubeadm upgrade
はダウングレードもサポートしている。
全てのアップグレードプロセスは少しずつ異なる。よって、我々は個別の小さなアップグレードプロセスをそれぞれ記載している。バージョン固有のアップグレードについては以下を見て欲しい。
v1.11.0 以降では、static pod manifests に対して適用される変更を見るため、kubeadm upgrade diff
が使えるようになる。
https://kubernetes.io/docs/tasks/administer-cluster/kubeadm/kubeadm-upgrade-1-12/
kubeadm、kubelet コマンドをアップグレードする。
$ sudo apt-get update
$ sudo apt-get upgrade -y kubelet kubeadm
$ kubeadm version
kubeadm version: &version.Info{Major:"1", Minor:"12", GitVersion:"v1.12.2", GitCommit:"17c77c7898218073f14c8d573582e8d2313dc740", GitTreeState:"clean", BuildDate:"2018-10-24T06:51:33Z", GoVersion:"go1.10.4", Compiler:"gc", Platform:"linux/amd64"}
$
全てのノードで kubeadm バージョンを確認
$ kubeadm version
masterノードで plan を実行 → 下記の例では v1.11.4 と v1.12.2 の2つのバージョンアップパスがあることがわかる。 → 今回は v1.12.2 にアップグレードしてみる。
$ sudo kubeadm upgrade plan
...
Components that must be upgraded manually after you have upgraded the control plane with 'kubeadm upgrade apply':
COMPONENT CURRENT AVAILABLE
Kubelet 3 x v1.11.3 v1.11.4
Upgrade to the latest version in the v1.11 series:
COMPONENT CURRENT AVAILABLE
API Server v1.11.3 v1.11.4
Controller Manager v1.11.3 v1.11.4
Scheduler v1.11.3 v1.11.4
Kube Proxy v1.11.3 v1.11.4
CoreDNS 1.1.3 1.1.3
Etcd 3.2.18 3.2.18
You can now apply the upgrade by executing the following command:
kubeadm upgrade apply v1.11.4
Note: Before you can perform this upgrade, you have to update kubeadm to v1.11.4.
_____________________________________________________________________
Components that must be upgraded manually after you have upgraded the control plane with 'kubeadm upgrade apply':
COMPONENT CURRENT AVAILABLE
Kubelet 3 x v1.11.3 v1.12.2
Upgrade to the latest stable version:
COMPONENT CURRENT AVAILABLE
API Server v1.11.3 v1.12.2
Controller Manager v1.11.3 v1.12.2
Scheduler v1.11.3 v1.12.2
Kube Proxy v1.11.3 v1.12.2
CoreDNS 1.1.3 1.1.3
Etcd 3.2.18 3.2.18
You can now apply the upgrade by executing the following command:
kubeadm upgrade apply v1.12.2
Note: Before you can perform this upgrade, you have to update kubeadm to v1.12.2.
_____________________________________________________________________
master ノードのアップグレードを実施する。
$ sudo kubeadm upgrade apply v1.12.2
[preflight] Running pre-flight checks.
[upgrade] Making sure the cluster is healthy:
[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'
[upgrade/apply] Respecting the --cri-socket flag that is set with higher priority than the config file.
[upgrade/version] You have chosen to change the cluster version to "v1.12.2"
[upgrade/versions] Cluster version: v1.11.3
[upgrade/versions] kubeadm version: v1.12.2
[upgrade/confirm] Are you sure you want to proceed with the upgrade? [y/N]: y
...
Static pod: kube-apiserver-113-master hash: a938ca9216f70c1fac6b5bb16f287b10
Static pod: kube-controller-manager-113-master hash: d2d06f85586f03d377afe565910fbd4b
Static pod: kube-scheduler-113-master hash: 6c67bdf3d84a94cb775bc5ef7eab375b
Static pod: etcd-113-master hash: 79325f4f545b5cd7c16abcc3d974adff
[etcd] Wrote Static Pod manifest for a local etcd instance to "/etc/kubernetes/tmp/kubeadm-upgraded-manifests244088976/etcd.yaml"
[upgrade/staticpods] Moved new manifest to "/etc/kubernetes/manifests/etcd.yaml" and backed up old manifest to "/etc/kubernetes/tmp/kubeadm-backup-manifests-2018-11-10-01-04-28/etcd.yaml"
...
[upgrade/successful] SUCCESS! Your cluster was upgraded to "v1.12.2". Enjoy!
[upgrade/kubelet] Now that your control plane is upgraded, please proceed with upgrading your kubelets if you haven't already done so.
$
実行ノードに対しても同様の手順でアップグレードしていく。 まずは、実行ノードで動作している Pod を別のところに移動させる。
$ kubectl drain $NODE --ignore-daemonsets
そして実行ノードにログインし、アップグレードを行う。
$ sudo apt-get update
$ sudo apt-get upgrade -y kubelet kubeadm
master ノードアップグレード後、kubectl get nodes のバージョンが変化しないのはなぜ?
$ kubectl get nodes
NAME STATUS ROLES AGE VERSION
113-master Ready master 43d v1.11.3
113-node01 Ready <none> 43d v1.11.3
113-node02 Ready <none> 37d v1.11.3
上記は kubelet のバージョン情報を見ている模様。 master と node01 の kubelet をバージョンアップ後、下記のように更新された。
$ kubectl get nodes
NAME STATUS ROLES AGE VERSION
113-master Ready master 43d v1.12.2
113-node01 Ready <none> 43d v1.12.2
113-node02 Ready <none> 37d v1.11.3
https://kubernetes.io/docs/tasks/administer-cluster/kubeadm/kubeadm-upgrade-1-12/#upgrade-the-control-plane に 1. の手順が二つあって、最初に kubeletとkubeadm のアップグレードを行うことを見逃しやすい・・・ 修正すべき。 k/website/pull/10941 として投稿済み。
バージョンアップ完了
k8s cluster のバージョンアップ方法を調べる。
現状: v1.11.3