Skip to content

Kiedy aktualizować klaster Kubernetes?

Należy zwracać uwagę na releasy - ostatnie 3 wersje minor releasów (np. 1.16, 1.17 oraz 1.18) są supportowane. Potem, gdy pojawia się kolejna wersja (1.18) depricated staje się 1.16.

Jak aktualizować klaster?

Polecenia

U dostawcy chmury

Tutaj to bardzo prosto, wystarczy kliknąć w guziczek i gotowe.

kubeadm

Upgrade Control-plane

Tutaj należy:

  • zaplanowanie i wyświetlenie możliwych aktualizacji, co zostanie zmienione:
kubeadm upgrade plan
  • zaaktualizowanie właściwe klastra
kubeadm upgrade apply

Warning

kubeadm upgrade apply nie aktualizuje kubelet!
Należy samemu taką aktualizację przeprowadzić, on aktualizuje tylko Control Plane!

Info

Jeżeli wersja kubeadm jest stara to również należy ją podnieść! Czyli należy podnieść wersję kubeadm:

apt install kubeadm=1.14.0-00
A póżniej podnieść już samą wersję klastra:
kubeadm upgrade apply v1.14.0
Gdzie końcowo podnosimy wersję kubelet:
apt upgrade kubelet=1.14.0-00 -y
I restartujemy usługę na każdym węźle:
systemctl restart kubelet

Tutaj jest to dobrze udokumentowane: https://kubernetes.io/docs/tasks/administer-cluster/kubeadm/kubeadm-upgrade/

Upgrade Worker Node

Ustalamy wersję Kubernetesa do której będzie robiona aktualizacja, należy w tym pliku zmienić wersję klastra:

Oznaczamy węzeł jako Unschedulable, usuwamy wszystkie Pody z niego (przenosimy na inne węzły):

kubectl drain <nazwa_node>

vim /etc/apt/sources.list.d/kubernetes.list

Aktualizujemy paczki po zmianie

apt update

Instalujemy wybraną wersję kubeadm (tutaj dla wersji 1.34.2-2.1.1):

sudo apt-mark unhold kubeadm && \
sudo apt-get update && sudo apt-get install -y kubeadm='1.34.2-*' && \
sudo apt-mark hold kubeadm

Upgradeujemy wersję kube-proxy, innych manifestów, dostosowujemy node do wersji control-plane:

sudo kubeadm upgrade node

Upgradeujemy wersję kubelet:

sudo apt-mark unhold kubelet kubectl && \
sudo apt-get update && sudo apt-get install -y kubelet='1.34.x-*' kubectl='1.34.x-*' && \
sudo apt-mark hold kubelet kubectl

Restartujemy kubelet:

sudo systemctl daemon-reload
sudo systemctl restart kubelet

Odznaczamy Node ze stanu Unschedulable -> Schedulable:

kubectl uncordon <nazwa_node>

Jak aktualizować, jakie kroki podjąć?

Warning

Należy robić każdą wersję po kolei! Nie można więcej niż jedną wersję różnicy mieć na klastrze, jedna minor wersja po drugiej.

Kroki do podjęcia:

  • Początkowo aktualizujemy Master Node, czekamy aż aktualizacja przebiegnie pomyślnie, wówczas robimy dalej na Worker Nodach.
  • Aktualizację na Workerach można robić na dwa sposoby:
    • Aktualizujemy stare węzły, pojedynczo, wyłączamy je z działania (drained, stan NotSchedulable) i robimy to z kolejnymi
    • Dodajemy maszyny do klastra z nową już wersją, a stare node wywalamy z klastra

Warning

Nie usuwaj tego pliku.

Może być wymagany przy buildzie.