Оновлюємо Kubernetes до останньої версії

В цій статті я продемонструю як за допомогою стандартних утиліт оновити ваш Kubernetes кластер до нової версії. Може виникнути питання: якщо в мене все працює і задовільняє в поточній версії Kubernetes, чи є потреба оновлюватися? На мою думку так і головна причина не в нових фічах, а у виправленні помилок в безпеці. Не дивлячись на те що Kubernetes є продуктом з відкритим кодом, над яким працюють тисячі спеціалістів зі всього світу, від помилок ніхто не застрахований Якщо помилка буде знайдена, то її виправлять тільки в останніх кількох версіях. Офіційна політика – підтримка тільки 3-ох останніх мінорних версій Kubernetes. Враховуючи, що в 2020 році був здійснений перехід на трьох разовий реліз то ми отримуємо, що кожна версія Kubernetes підтримується на протязі одного року. А багато security bugs можуть знаходити і в продуктах випущених більше ніж 10 років тому (рекомендую ознайомитися з вразливостями Spectre та Meltdown в процесорах).

Оновлення основного вузла

Отже для чого потрібне оновлення (як мінімум раз в рік) ми розібралися. Давайте тепер здійснимо upgrade, але слід зауважити якщо у вас різниця між мінорними версіями більша за 1, то оновлення слід робити послідовно, версія за версією, що уникнути проблем. В цій статті ми будемо оновлюватися з версії 1.19.3 до 1.20.5. Інформація про то, як оновлювати старіші версії доступна на офіційній сторінці.

sudo apt-get install -y --allow-change-held-packages kubeadm=1.20.5-00

Цією командою ми оновлюємо утиліту kubeadm до версії 1.20.5. Прапорець allow-change-held-packages дозволяє оновити пакет, навіть якщо раніше ви користувалися командою hold (можна подивитися в статті про встановлення control plane).

sudo kubeadm upgrade apply v1.20.5

У мене процес оновлення зайняв лише кілька хвилин. Після завершення на екрані буде виведено:

[upgrade/successful] SUCCESS! Your cluster was upgraded to "v1.20.5". Enjoy!
[upgrade/kubelet] Now that your control plane is upgraded, please proceed with upgrading your kubelets if you haven't already done so.

Перевіримо результат за допомогою команди kubectl get nodes:

Цікаво… не дивлячись на оновлення в нас і далі відображається версія v1.19.3. Це пов’язано з тим, що команда kubectl get nodes, відображає версії kubelet, який працює на вузлах. Тому нам необхідно оновити і його:

sudo apt-get install -y --allow-change-held-packages kubelet=1.20.5-00 kubectl=1.20.5-00

І перезапустити kubelet:

sudo systemctl daemon-reload && sudo systemctl restart kubelet

Оновлення робочих вузлів

Для робочих вузлів необхідно провести аналогічні операції. Але щоб уникнути втрати зв’язку з аплікаціями на вузлах, слід повідомити Kubernetes, що з вузла слід забрати всі поди (крім демонів):

kubectl drain node-1 --ignore-daemonsets

якщо перевірити статус вузла, за допомогою kubectl get nodes, то можна побачити що його статус змінився на SchedulingDisabled. Тепер на вузлі виконуємо наступні команди:

sudo apt-get update 
sudo apt-get install -y --allow-change-held-packages kubeadm=1.20.5-00 kubelet=1.20.5-00 kubectl=1.20.5-00
sudo kubeadm upgrade node
sudo systemctl daemon-reload && sudo systemctl restart kubelet

Останній крок – відновлюємо початковий статус вузла за допомогою команди:

kubectl uncordon node-1

Ці кроки необхідно повторити для всіх вузлів. В кінці перевіряємо статус:

Чесно кажучи, коли я починав писати цю статтю, то очікував куди більше проблем. Але на практиці весь процес зводиться до виконання кількох простих команд. Тим не менш надіюся, що ця стаття була корисна.

about author

admin

lobur.marian@gmail.com

Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.

Залишити відповідь

Ваша e-mail адреса не оприлюднюватиметься. Обов’язкові поля позначені *