Upgrade klastra
Wersje Kubernetes
Zaleca się wykonywanie procedury upgrade'u maksymalnie o jedną wersję minor w górę. Przykładowo: z v1.35.1 do v1.36.2.
Aktualizację zaczynamy od węzłów control-plane. Po nich aktualizujemy workery. Upgrade wykonujemy sekwencyjnie – węzeł po węźle – jednocześnie monitorując, czy wszystko działa prawidłowo. Nie wykonujemy upgrade'u na kilku węzłach jednocześnie.
Procedura upgrade'u
Lista wszystkich węzłów klastra wraz z ich rolami:
| Node | Rola | Host |
|---|---|---|
| k3s-master1 | control-plane | hp1 |
| k3s-master2 | control-plane | hp2 |
| k3s-master3 | control-plane | proxmox |
| k3s-aarch64-worker1 | worker | raspberry pi |
| k3s-aarch64-worker2 | worker | raspberry pi |
| k3s-amd64-worker3 | worker | proxmox |
| k3s-amd64-worker4 | worker | proxmox |
| k3s-amd64-worker5 | worker | hp2 |
Control-plane
Opcjonalnie wykonujemy snapshot bazy ETCD. Polecenie uruchamiamy na pierwszym węźle (k3s-master1).
sudo k3s etcd-snapshot save --name pre-upgrade-1-35Kolejne polecenia wykonujemy na wszystkich węzłach control-plane.
Opróżnianie węzła
Wykonanie polecenia spowoduje terminację wszystkich aplikacji z wyjątkiem daemonsetów. Control-plane uruchomi je na jednym z pozostałych węzłów klastra.
kubectl drain k3s-master1 --ignore-daemonsets --delete-emptydir-dataPostęp można obserwować, wykonując kubectl get pods z odpowiednimi parametrami.
kubectl get pods -A --field-selector spec.nodeName=k3s-master1Aktualizacja Kubernetes
Logujemy się na wybrany węzeł przez SSH i wykonujemy aktualizację.
sudo su -
curl -sfL https://get.k3s.io | INSTALL_K3S_VERSION=v1.36.2+k3s1 sh -Skrypt od razu restartuje usługę k3s. Po jej uruchomieniu Kubernetes raportuje już nową wersję. Ostatnim etapem jest odblokowanie węzła, co umożliwi uruchamianie na nim podów z aplikacjami.
kubectl uncordon k3s-master1Porady
Aplikacje, które zostały wyłączone na początku, nie wrócą automatycznie na swoje miejsce. Stanie się to dopiero podczas aktualizacji kolejnych węzłów.
Po przejściu przez wszystkie węzły control-plane można zaktualizować węzły typu worker.
Węzły worker
Procedura wygląda podobnie jak w przypadku control-plane, ale zanim przystąpimy do aktualizacji, należy ustalić dwie rzeczy:
- adres IP pierwszego węzła master (control-plane),
- token klastra.
Token
Token serwera można znaleźć na węźle master w pliku: /var/lib/rancher/k3s/server/node-token
Opróżnianie węzła
Wykonanie polecenia spowoduje terminację wszystkich aplikacji z wyjątkiem daemonsetów. Control-plane uruchomi je na jednym z pozostałych węzłów klastra.
kubectl drain k3s-aarch64-worker1 --ignore-daemonsets --delete-emptydir-dataPostęp można obserwować, wykonując kubectl get pods z odpowiednimi parametrami.
kubectl get pods -A --field-selector spec.nodeName=k3s-aarch64-worker1Aktualizacja Kubernetes
Logujemy się na wybrany węzeł przez SSH i wykonujemy aktualizację.
sudo su -
curl -sfL https://get.k3s.io | K3S_URL=https://x.x.x.x:6443 K3S_TOKEN=K10fa******** INSTALL_K3S_VERSION=v1.36.2+k3s1 sh -Skrypt od razu restartuje usługę k3s. Po jej uruchomieniu Kubernetes raportuje już nową wersję. Ostatnim etapem jest odblokowanie węzła, co umożliwi uruchamianie na nim podów z aplikacjami.
kubectl uncordon k3s-aarch64-worker1Operację wykonujemy sekwencyjnie na każdym węźle worker.
