Як оновити кластер Kubernetes корпоративного рівня в продуктивному середовищі

Чому це важливо?

Kubernetes випускає три нові версії кожні три місяці, і кожен інженер з обслуговування хмарних операцій повинен оновлювати ці кластери. Іноді хмарний провайдер підтримує старі версії Kubernetes, але більшість організацій підтримує останні три версії для своїх різних кластерів Kubernetes.

Перш ніж ми зможемо оновити ці кластери, потрібно знати вимоги та процес оновлення кластерів Kubernetes.

У цій статті ми розглянемо кластер Kubernetes корпоративного рівня.

Вимоги :

Припустимо, ви працюєте в критичному виробничому середовищі, вам потрібен нульовий час простою, і жодних ризиків не повинно бути.

  1. Переконайтеся, що ви закрили свої вузли, що означає, що ваші вузли не підлягають плануванню (unschedulable). Припустимо, ви плануєте зупинити будь-які розгортання протягом наступних 2–3 годин і сповістити свою команду.
  2. Переконайтеся, що ви ознайомилися з нотатками до релізу. Припустимо, ви оновлюєте Kubernetes з 1.30 до 1.31. Важливо знати зміни в журналі змін. Ви повинні бути в курсі застарілих API та розуміти все в нотатках до релізу.
  3. Оновлення кластерів Kubernetes є незворотними. Ви не можете здійснити зниження версії кластера Kubernetes, але для організації це може бути важливим зробити нову інсталяцію. Тому обов’язково протестуйте в нижчих середовищах. Почніть з оновлення кластеру в тестовому середовищі, пре-продакшн середовищі, а потім до продакшн середовища. Для цього процесу ви можете виділити 1–2 тижні.
  4. Ваш контрольний план (control plane) та вузли повинні бути на одній версії. Припустимо, ви використовуєте EKS, контрольний план EKS на версії 1.30, а вузли — на 1.31. Перше, що потрібно зробити, це оновити ваші вузли до 1.30, інакше ви отримаєте значний вплив на ваш кластер. В іншому випадку, якщо ваш контрольний план на одній версії, а сумісність з іншою версією, можуть виникнути проблеми.
  5. Якщо ви використовуєте кластерний автоскейлер (cluster autoscaler), компонент Kubernetes, потрібно переконатися, що версія автоскейлера та версія кластера збігаються, оскільки це може вплинути на оновлення кластера.
  6. Потрібно мати п'ять доступних IP-адрес, де потрібно, щоб було хоча б п’ять доступних IP-адрес у підмережі, яку ви вказали під час створення кластера Kubernetes.
  7. Компонент Kubelet вашого даного плану (data plane) має бути синхронізований та відповідати версії контрольного плану.

Процес оновлення:

  1. Оновлення контрольного плану : Керований кластер Kubernetes означає керований контрольний план, що означає, що вам все ще потрібно використовувати AWS CLI, UI, де EKS позбавляється від турбот щодо оновлення.

(i) Висока доступність контрольного плану
(ii) Відновлення після катастроф
(iii) Безпека
(iv) Масштабування запитів до API серверів

  1. Оновлення групи вузлів / Fargate / гібридне середовище / вузли в даному плані

  2. Оновлення додатків, таких як eksctl

Управляти власними групами вузлів в AWS (кастомні шаблони запуску / гібридний підхід), де є можливість прогресивних/поетапних оновлень.

Коли у вас є 3 групи вузлів, то найкращим варіантом є поетапне оновлення, так що оновлення відбувається вузол за вузлом. За допомогою підходу поетапного оновлення ви оновлюєте групу вузлів крок за кроком.

Для кастомних вузлів, де ви створюєте різні EC2 екземпляри та приєднуєте їх до кластера Kubernetes, вам потрібно по черзі закрити вузли (cordon), зробити їх незапланованими (unschedule) та оновити вузли. Припустимо, у вас є 100 вузлів, вони створюють нові вузли, видаляють попередні вузли та приєднують їх до Kubernetes. Це підходить для меншої кількості вузлів.
але для великої кількості вузлів використовуйте підхід поетапного оновлення (rollout).

Крок 1: створіть новий кластер EKS з ім'ям observability без групи вузлів, щоб створити контрольний план з високою доступністю за допомогою наступної команди eksctl.

eksctl create cluster — name=observability \ 
— region=us-east-1 \ 
— zones=us-east-1a,us-east-1b \ 
— without-nodegroup 

pic

Крок 2: зв’яжіть це з IAM OIDC провайдером (без цього ваші поди не зможуть взаємодіяти з іншими ресурсами AWS, що означає, що за допомогою вашого облікового запису служби Kubernetes зможе доступати ресурси AWS).

eksctl utils associate-iam-oidc-provider \ 
— region us-east-1 \ 
— cluster observability \ 
— approve 

Крок 3: створіть групу вузлів

eksctl create nodegroup — cluster=observability \ 
— region=us-east-1 \ 
— name=observability-ng-private \ 
— node-type=t3.medium \ 
— nodes-min=2 \ 
— nodes-max=3 \ 
— node-volume-size=20 \ 
— managed \ 
— asg-access \ 
— external-dns-access \ 
— full-ecr-access \ 
— appmesh-access \ 
— alb-ingress-access \ 
— node-private-networking 

Крок 4: зрозумійте кластер Kubernetes, такі як додатки, наявні вузли та мережеві налаштування.

Далі перевірте наявність оновлень додатків, оновлення кластерних інсайтів, натискаючи на оновлення інсайтів, як показано нижче:

pic

Далі виконайте цю команду (переконайтеся, що ви виконали вимоги, зазначені вище, перед використанням цієї команди):

eksctl upgrade cluster — name observability — region us-east-1 — version 1.31 — approve 

Після цього EKS позбавиться від турбот щодо оновлення контрольного плану.

Тепер натискайте на обчислення, додатки, як показано нижче, і прийміть відповідні дії:

pic

pic

Обчислювальні інсайти

Ця версія AMI має компоненти, якими керує даний план (data plane), і якщо це AMI, наданий Amazon, ви можете натискати на опцію "оновити зараз", як показано. Але якщо ви використовуєте власноруч створене AMI, то вам потрібно оновлювати його вручну.

У цьому випадку, оскільки ми використовуємо AMI, надане Amazon, натискаємо на опцію "оновити зараз".

Інший спосіб оновити версію — створити нову групу вузлів з шаблоном запуску / без шаблону запуску для нової версії.

pic

Після того як група вузлів буде готова і підключена до кластера Kubernetes

Для невеликої кількості оновлень груп вузлів можна використовувати другий варіант — додати нову групу вузлів, але коли у вас велика кількість груп вузлів, перший варіант є ідеальним — натискання "оновити зараз".

Коли ви натискаєте "оновити зараз", ви побачите опцію "поетапного оновлення", як обговорювалося раніше. Ваш кластер Kubernetes може бути оновлений з нульовим часом простою.

Примітка: цей підхід показано через UI для кращого розуміння, ви можете використовувати AWS CLI / командний рядок / термінал.

Якщо ви використовуєте свої шаблони запуску, це ваша відповідальність — оновлювати свої шаблони запуску.

Якщо ви використовуєте кастомне AMI, це ваша відповідальність — створити це кастомне AMI / створене AWS, використовуючи опцію оновлення.

pic

Аналогічно, приймайте дії з додатками / плагінами.

Перевірте, чи працює оновлення коректно, напишіть функціональні тести / QA можуть перевірити, чи працює оновлення безперебійно.

Щасливого навчання 🙂

Перекладено з: How to upgrade the Enterprise-grade Kubernetes cluster in production

Leave a Reply

Your email address will not be published. Required fields are marked *