oomichi / try-kubernetes

12 stars 5 forks source link

Learn the upgrade way of k8s cluster #61

Closed oomichi closed 5 years ago

oomichi commented 5 years ago

k8s cluster のバージョンアップ方法を調べる。

現状: v1.11.3

oomichi commented 5 years ago

https://kubernetes.io/docs/reference/setup-tools/kubeadm/kubeadm-upgrade/

kubeadm upgrade はユーザフレンドリーなコマンドであり、複雑なアップグレードロジックを1つのコマンドにラッピングしてくれている。このコマンドは、アップグレードのプランニングと実際のアップグレード実施の両方をサポートしている。kubeadm upgrade はダウングレードもサポートしている。

kubeadm upgrade guidance (こんなコマンド、v1.11.3 の kubeadm では存在しない)

全てのアップグレードプロセスは少しずつ異なる。よって、我々は個別の小さなアップグレードプロセスをそれぞれ記載している。バージョン固有のアップグレードについては以下を見て欲しい。

v1.11.0 以降では、static pod manifests に対して適用される変更を見るため、kubeadm upgrade diff が使えるようになる。

oomichi commented 5 years ago

https://kubernetes.io/docs/tasks/administer-cluster/kubeadm/kubeadm-upgrade-1-12/

v1.11.x -> v1.12.y のバージョンアップ手順

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
oomichi commented 5 years ago

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
oomichi commented 5 years ago

https://kubernetes.io/docs/tasks/administer-cluster/kubeadm/kubeadm-upgrade-1-12/#upgrade-the-control-plane に 1. の手順が二つあって、最初に kubeletとkubeadm のアップグレードを行うことを見逃しやすい・・・ 修正すべき。 k/website/pull/10941 として投稿済み。

oomichi commented 5 years ago

バージョンアップ完了