Upgrade Kubernetes Cluster
Делаю: 11.04.2019
Не для production
По материалам из видео индуса:
https://www.youtube.com/watch?v=-MZ-l2HG368&list=PL34sAs7_26wNBRWM6BDhnonoA5FMERax0&index=23
Подготовили кластер и окружение как здесь. Для версии 1.11.6
Оф. док: https://kubernetes.io/docs/reference/setup-tools/kubeadm/kubeadm-upgrade/
Информация
$ kubectl version --short
Client Version: v1.14.1
Server Version: v1.11.9
$ kubectl get nodes
NAME STATUS ROLES AGE VERSION
master.k8s Ready master 8m v1.11.6
node1.k8s Ready <none> 6m v1.11.6
node2.k8s Ready <none> 4m v1.11.6
$ kubectl get nodes -o wide
docker://1.13.1
###
$ kubectl run nginx --image nginx
$ kubectl scale deploy nginx --replicas=2
Поехали обновляться до 1.12
$ kubectl get pods -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE
nginx-64f497f8fd-d9thn 1/1 Running 0 32s 10.244.1.2 node1.k8s <none>
nginx-64f497f8fd-hd789 1/1 Running 0 10m 10.244.2.2 node2.k8s <none>
Обновляем мастер
на хосте:
$ kubectl drain master.k8s --ignore-daemonsets
$ kubectl get nodes
NAME STATUS ROLES AGE VERSION
master.k8s Ready,SchedulingDisabled master 38m v1.12.0
node1.k8s Ready <none> 36m v1.11.6
node2.k8s Ready <none> 34m v1.11.6
// Пароль: kubeadmin
$ ssh [email protected]
# yum upgrade -y kubeadm-1.12.0 kubelet-1.12.0
# kubeadm upgrade plan
[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] Fetching available versions to upgrade to
[upgrade/versions] Cluster version: v1.11.9
[upgrade/versions] kubeadm version: v1.12.0
[upgrade/versions] Latest stable version: v1.14.1
[upgrade/versions] Latest version in the v1.11 series: v1.11.9
[upgrade/versions] WARNING: No recommended etcd for requested kubernetes version (v1.14.1)
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.6 v1.14.1
Upgrade to the latest stable version:
COMPONENT CURRENT AVAILABLE
API Server v1.11.9 v1.14.1
Controller Manager v1.11.9 v1.14.1
Scheduler v1.11.9 v1.14.1
Kube Proxy v1.11.9 v1.14.1
CoreDNS 1.1.3 1.2.2
Etcd 3.2.18 N/A
You can now apply the upgrade by executing the following command:
kubeadm upgrade apply v1.14.1
Note: Before you can perform this upgrade, you have to update kubeadm to v1.14.1.
# kubeadm upgrade apply v1.12.0
# systemctl daemon-reload
# systemctl restart kubelet
На хосте
$ kubectl uncordon master.k8s
$ kubectl get nodes
NAME STATUS ROLES AGE VERSION
master.k8s Ready master 40m v1.12.0
node1.k8s Ready <none> 38m v1.11.6
node2.k8s Ready <none> 35m v1.11.6
Обновляем узылы
$ kubectl drain node1.k8s --ignore-daemonsets
$ kubectl get nodes
NAME STATUS ROLES AGE VERSION
master.k8s Ready master 42m v1.12.0
node1.k8s Ready,SchedulingDisabled <none> 40m v1.11.6
node2.k8s Ready <none> 38m v1.11.6
$ ssh [email protected]
# yum upgrade -y kubeadm-1.12.0 kubelet-1.12.0
# kubeadm upgrade node config --kubelet-version $(kubelet --version | cut -d ' ' -f 2)
# systemctl daemon-reload
# systemctl restart kubelet
На хосте
$ kubectl uncordon node1.k8s
$ kubectl get nodes
NAME STATUS ROLES AGE VERSION
master.k8s Ready master 48m v1.12.0
node1.k8s Ready <none> 46m v1.12.0
node2.k8s Ready <none> 44m v1.11.6
Повторяем для node2.k8s
$ kubectl get nodes
NAME STATUS ROLES AGE VERSION
master.k8s Ready master 50m v1.12.0
node1.k8s Ready <none> 48m v1.12.0
node2.k8s Ready <none> 46m v1.12.0
Обновление до версии 1.3
Докер у нас старый. По хорошему нужно обновить и его!
Обновляем master
$ kubectl drain master.k8s --ignore-daemonsets
$ ssh [email protected]
# yum upgrade -y kubeadm-1.13.* kubelet-1.13.*
# kubeadm upgrade plan
[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] Fetching available versions to upgrade to
[upgrade/versions] Cluster version: v1.12.0
[upgrade/versions] kubeadm version: v1.13.5
I0411 12:52:05.577434 21682 version.go:237] remote version is much newer: v1.14.1; falling back to: stable-1.13
[upgrade/versions] Latest stable version: v1.13.5
[upgrade/versions] Latest version in the v1.12 series: v1.12.7
Components that must be upgraded manually after you have upgraded the control plane with 'kubeadm upgrade apply':
COMPONENT CURRENT AVAILABLE
Kubelet 2 x v1.12.0 v1.12.7
1 x v1.14.1 v1.12.7
Upgrade to the latest version in the v1.12 series:
COMPONENT CURRENT AVAILABLE
API Server v1.12.0 v1.12.7
Controller Manager v1.12.0 v1.12.7
Scheduler v1.12.0 v1.12.7
Kube Proxy v1.12.0 v1.12.7
CoreDNS 1.2.2 1.2.6
Etcd 3.2.24 3.2.24
You can now apply the upgrade by executing the following command:
kubeadm upgrade apply v1.12.7
_____________________________________________________________________
Components that must be upgraded manually after you have upgraded the control plane with 'kubeadm upgrade apply':
COMPONENT CURRENT AVAILABLE
Kubelet 2 x v1.12.0 v1.13.5
1 x v1.14.1 v1.13.5
Upgrade to the latest stable version:
COMPONENT CURRENT AVAILABLE
API Server v1.12.0 v1.13.5
Controller Manager v1.12.0 v1.13.5
Scheduler v1.12.0 v1.13.5
Kube Proxy v1.12.0 v1.13.5
CoreDNS 1.2.2 1.2.6
Etcd 3.2.24 3.2.24
You can now apply the upgrade by executing the following command:
kubeadm upgrade apply v1.13.5
_____________________________________________________________________
# kubeadm upgrade apply v1.13.5 -y
# systemctl daemon-reload
# systemctl restart kubelet
На хосте
$ kubectl uncordon master.k8s
$ kubectl get nodes
NAME STATUS ROLES AGE VERSION
master.k8s Ready master 79m v1.13.5
node1.k8s Ready <none> 76m v1.12.0
node2.k8s Ready <none> 74m v1.12.0
Обновляем узылы
$ kubectl drain node1.k8s --ignore-daemonsets
$ kubectl get nodes
NAME STATUS ROLES AGE VERSION
master.k8s Ready master 42m v1.12.0
node1.k8s Ready,SchedulingDisabled <none> 40m v1.11.6
node2.k8s Ready <none> 38m v1.11.6
$ ssh [email protected]
# yum upgrade -y kubeadm-1.13.* kubelet-1.13.*
# kubeadm upgrade node config --kubelet-version $(kubelet --version | cut -d ' ' -f 2)
# systemctl daemon-reload
# systemctl restart kubelet
На хосте
$ kubectl uncordon node1.k8s
$ kubectl get nodes
NAME STATUS ROLES AGE VERSION
master.k8s Ready master 80m v1.13.5
node1.k8s Ready <none> 78m v1.13.5
node2.k8s Ready <none> 76m v1.12.0
Повторяем для node2.k8s
$ kubectl get nodes
NAME STATUS ROLES AGE VERSION
master.k8s Ready master 82m v1.13.5
node1.k8s Ready <none> 80m v1.13.5
node2.k8s Ready <none> 78m v1.13.5
Обновление до версии 1.14.1
Обновляем мастер
$ kubectl drain master.k8s --ignore-daemonsets
$ ssh [email protected]
# yum upgrade -y kubeadm kubelet
# kubeadm version
v1.14.1
# kubelet --version
Kubernetes v1.14.1
# kubeadm upgrade plan
[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] Fetching available versions to upgrade to
[upgrade/versions] Cluster version: v1.13.5
[upgrade/versions] kubeadm version: v1.14.1
[upgrade/versions] Latest stable version: v1.14.1
[upgrade/versions] Latest version in the v1.13 series: v1.13.5
Components that must be upgraded manually after you have upgraded the control plane with 'kubeadm upgrade apply':
COMPONENT CURRENT AVAILABLE
Kubelet 3 x v1.13.5 v1.14.1
Upgrade to the latest stable version:
COMPONENT CURRENT AVAILABLE
API Server v1.13.5 v1.14.1
Controller Manager v1.13.5 v1.14.1
Scheduler v1.13.5 v1.14.1
Kube Proxy v1.13.5 v1.14.1
CoreDNS 1.2.6 1.3.1
Etcd 3.2.24 3.3.10
You can now apply the upgrade by executing the following command:
kubeadm upgrade apply v1.14.1
_____________________________________________________________________
# kubeadm upgrade apply v1.14.1 -y
# systemctl daemon-reload
# systemctl restart kubelet
На хосте
$ kubectl uncordon master.k8s
$ kubectl get nodes
NAME STATUS ROLES AGE VERSION
master.k8s Ready master 90m v1.14.1
node1.k8s Ready <none> 87m v1.13.5
node2.k8s Ready <none> 85m v1.13.5
Обновляем узылы
$ kubectl drain node1.k8s --ignore-daemonsets
$ kubectl get nodes
NAME STATUS ROLES AGE VERSION
master.k8s Ready master 42m v1.12.0
node1.k8s Ready,SchedulingDisabled <none> 40m v1.11.6
node2.k8s Ready <none> 38m v1.11.6
$ ssh [email protected]
# yum upgrade -y kubeadm kubelet
# kubeadm upgrade node config --kubelet-version $(kubelet --version | cut -d ' ' -f 2)
# systemctl daemon-reload
# systemctl restart kubelet
На хосте
$ kubectl uncordon node1.k8s
$ kubectl get nodes
NAME STATUS ROLES AGE VERSION
master.k8s Ready master 91m v1.14.1
node1.k8s Ready <none> 89m v1.14.1
node2.k8s Ready <none> 87m v1.13.5
Повторяем для node2.k8s
$ kubectl get nodes
NAME STATUS ROLES AGE VERSION
master.k8s Ready master 93m v1.14.1
node1.k8s Ready <none> 91m v1.14.1
node2.k8s Ready <none> 89m v1.14.1
$ kubectl get pods
NAME READY STATUS RESTARTS AGE
nginx-64f497f8fd-kvjww 1/1 Running 0 7m45s
nginx-64f497f8fd-vhv7p 1/1 Running 0 7m45s