Початок роботи з Kubernetes: вступ для початківців

Kubernetes – це найпоширеніша платформа з відкритим кодом для автоматизації процесів розгортання контейнерних застосунків.

Згідно з щорічним дослідженням Cloud Native Computing Foundation (CNCF), 96% організацій вже використовують Kubernetes або активно розглядають його впровадження. Якщо поглянути на цифри, то понад 5,8 мільйона розробників у всьому світі працюють з Kubernetes, що становить 31% від загальної кількості розробників серверних застосунків.

Популярність Kubernetes зумовлена його здатністю покращувати масштабованість, доступність та прискорювати процеси розгортання. У той час, як багато розробників розпочинають шлях своїх контейнерів з Docker (інтегрований інструмент, який використовує командний рядок для взаємодії з окремими контейнерами), Kubernetes пропонує абстракції вищого рівня, дозволяючи описувати застосунки та їхню інфраструктуру за допомогою схем, придатних для спільної роботи.

Якщо ви тільки починаєте знайомитися з Kubernetes, ця стаття допоможе вам розібратися в основних поняттях та надасть початкові знання для початку роботи. Ви дізнаєтесь, як Kubernetes може допомогти вам, як розробнику, розширити можливості цифрових продуктів.

Що таке Kubernetes і для чого він потрібен?

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

Розглянемо простий приклад. Уявіть собі додаток, який ви контейнеризували. Для обслуговування користувачів вам потрібно запустити кілька екземплярів цього контейнера. Проблема виникає, коли необхідно керувати цими контейнерами, особливо, якщо вони розташовані на різних машинах. Як вирішити це завдання?

Kubernetes приходить на допомогу, забезпечуючи ефективний спосіб керування усіма цими процесами. Хоча Kubernetes можна порівняти з інструментами контейнеризації, такими як Docker, він є саме оркестратором контейнерів. Як розробнику-початківцю, вам не потрібно хвилюватися про деталі оркестрування Kubernetes. Малоймовірно, що ви будете самостійно налаштовувати кластер Kubernetes для свого застосунку; ми торкнемося цього питання пізніше.

Однак, ви будете взаємодіяти з кластерами, створеними вашою інфраструктурною командою. Важливо ознайомитися з об’єктами, з якими ви будете працювати. Але перш ніж це зробити, варто розібратися в його архітектурі, щоб зрозуміти, що відбувається “під капотом”.

Особливості Kubernetes

Kubernetes має широкий спектр можливостей для запуску контейнерів та пов’язаної інфраструктури. Ось деякі з них:

  • Автоматичне розгортання, масштабування та відкат: Kubernetes автоматично створює вказану кількість реплік, розподіляє їх на відповідному обладнанні та переплановує контейнери у разі виходу вузла з ладу. Ви можете швидко масштабувати кількість копій залежно від потреб, наприклад, при збільшенні використання ЦП.
  • Виявлення сервісів, балансування навантаження та мережа: Kubernetes надає рішення для мережі, зокрема виявлення внутрішніх сервісів та відкриття публічних контейнерів.
  • Підтримка застосунків зі станом та без стану: Спочатку Kubernetes фокусувався на контейнерах без стану. Однак з розвитком технології він тепер містить вбудовані об’єкти для роботи з програмами, що зберігають стан. Фактично, будь-який застосунок може працювати на Kubernetes.
  • Керування сховищем: Незалежно від того, використовуєте ви локальну файлову систему, мережевий ресурс або хмару, Kubernetes надає абстраговане постійне сховище для контейнерних застосунків. Це дозволяє визначати вимоги до сховища незалежно від інфраструктури. Хоча це виходить за рамки даної статті, реалізується це через такі поняття, як Persistent Volume (PV), Persistent Volume Claim (PVC) та класи сховища.
  • Декларативний стан: Kubernetes використовує файли YAML (Yet Another Markup Language), так звані маніфести об’єктів, для визначення бажаного стану кластера. Маніфести описують вигляд вашого кластера, включаючи бажану кількість екземплярів додатків та правила мережі. Коли ви застосовуєте маніфести, Kubernetes автоматично обробляє всі зміни стану без необхідності писати скрипти.
  • Підтримка різних середовищ: Ви можете використовувати Kubernetes не тільки в хмарі, але й на робочій станції розробника. Існує безліч дистрибутивів, призначених для різних сценаріїв використання. Основні хмарні провайдери, такі як Amazon Web Services, Google Cloud та Microsoft Azure, пропонують керовані сервіси Kubernetes, а дистрибутиви з одним вузлом, такі як Minikube та K3s, доступні для локального використання.
  • Розширюваність: Функціональність Kubernetes може бути розширена за допомогою плагінів та розширень. Ви можете створювати власні об’єкти, оператори та контролери для оптимізації робочих процесів.

Архітектура Kubernetes

Архітектура Kubernetes складається з одного головного вузла (master node) та декількох робочих вузлів (worker nodes). Головний вузол керує кластером, тоді як робочі вузли запускають програми за вказівками головного вузла.

Джерело: kubernetes.io

Розглянемо детальніше.

Головний вузол(и)

Головний вузол визначає стан кластера та керує діями робочих вузлів. Для функціонування головного вузла необхідно декілька процесів:

  • Сервер API:
    Він служить основою для всіх комунікацій в кластері. Це шлюз, який дозволяє компонентам кластера обмінюватися інформацією. Він надає Kubernetes API. Сервер API виконує дві важливі функції: він є точкою входу для взаємодії користувачів з кластером (наприклад, через Kubectl) та виконує контроль доступу для аутентифікації та перевірки запитів, обмежуючи доступ до кластера лише авторизованим користувачам.
  • Планувальник:
    Планувальник призначає програми або об’єкти робочого навантаження Kubernetes робочим вузлам. Він розміщує модулі на вузлах на основі їхніх вимог до ресурсів. Модуль – це мінімальна одиниця розгортання в Kubernetes.
  • Менеджер контролера:
    Менеджер контролера стежить за станом кластера, реагуючи на події, такі як збої вузлів, та підтримує необхідну кількість модулів. Він виявляє зміни стану кластера, такі як загибель контейнерів, і намагається відновити його до заданого стану. Наприклад, якщо модуль випадково вийшов з ладу, менеджер контролера запитує планувальник про те, на якому вузлі запустити новий модуль на заміну, а потім kubelet запускає новий модуль.
  • etcd:
    Цей компонент можна назвати мозком кластера. Це сховище “ключ-значення” для конфігурації кластера. Усі зміни стану кластера записуються тут. Ви можете зробити резервну копію кластера, зберігши розподілене сховище значень. Важливо зауважити, що тут зберігаються лише дані про стан кластера, а не дані програми. etcd зберігає інформацію про стан кластера, яка використовується для керування його роботою.

Підлеглий вузол(и)

На кожному робочому вузлі встановлені три процеси, які дозволяють Kubernetes взаємодіяти з ним та запускати модулі. Необхідні процеси:

  • Kubelet:
    Це основна служба Kubernetes, яка відповідає за виконання контейнерів. Kubernetes, по суті, є REST API, що використовує сховище “ключ-значення”. Kubelet відповідає за фактичний запуск контейнерних програм. Контейнери завжди ізольовані від основної системи. Це дає можливість відокремити управління окремими програмами від фізичної чи віртуальної інфраструктури.

    Хоча система управління доступом API може відхиляти модулі або додавати додаткові обмеження, kubelet є остаточним визначником того, які модулі працюють на певному вузлі, на відміну від планувальника або наборів демонів. Kubelet взаємодіє з вузлом та контейнером. Він отримує файли конфігурації та запускає модулі через середовище виконання контейнера.

  • Середовище виконання контейнера:
    Цей компонент відповідає за запуск контейнерів. Наприклад, можна використовувати Docker, rkt або containerd.
  • Kube-proxy:
    Цей блок забезпечує рівень абстракції для груп модулів на вузлах, відповідно до загальних правил, зокрема балансування навантаження. Усі вузли застосовують Kube-proxy для надання віртуальної IP-адреси для клієнтів, які отримують доступ до динамічних модулів. Така структура дозволяє ефективно балансувати навантаження з мінімальними накладними витратами.

Як працює контейнеризація

Контейнеризація – це процес віртуалізації всіх необхідних компонентів програми в одному блоці. Контейнер містить необхідні бібліотеки, бінарні файли та конфігурації програми, але не включає ресурси ядра або віртуалізоване обладнання.

Контейнери виконуються “поверх” середовища виконання, яке визначає ресурси. Оскільки контейнери містять лише основні компоненти та залежності додатків, вони є легкими та швидкими, на відміну від віртуальних машин.

Читайте також: Контейнери проти віртуальних машин: пояснення відмінностей

Як встановити та налаштувати Kubernetes

Тепер перейдемо від теорії до практики та розглянемо процес встановлення Kubernetes. Цей підручник зосереджено на встановленні Kubernetes в операційній системі Windows.

Існує кілька способів встановлення Kubernetes у Windows: через командний рядок або через графічний інтерфейс. Переконайтеся, що ваша система відповідає наступним вимогам:

Для вашого обладнання потрібен головний вузол з мінімум 2 ГБ пам’яті та 700 МБ для робочого вузла. Щодо програмного забезпечення, необхідні Hyper-V, Docker Desktop, унікальна MAC-адреса та унікальний UUID продукту для кожного вузла. Ось покрокова інструкція.

Встановлення та налаштування Hyper-V

Hyper-V – це стандартне програмне забезпечення для віртуалізації в Windows. По суті, це VirtalBox на стероїдах. Він дозволяє керувати віртуальними машинами через графічний інтерфейс Windows або командний рядок. Щоб ввімкнути Hyper-V, виконайте наступні дії:

  • Відкрийте Панель керування.
  • Натисніть “Програми” на лівій панелі.
  • Під “Програми та компоненти” натисніть “Увімкнення або вимкнення компонентів Windows”.
  • Виберіть “Hyper-V” та “Hypervisor для Windows”.
  • Натисніть “OK”; комп’ютер має перезавантажитися, щоб активувати нові налаштування.

Можливо, комп’ютер перезавантажиться кілька разів, щоб упевнитися, що все налаштовано правильно. Ви можете перевірити успішність встановлення, ввівши наступну команду в Power Shell:

Get-WindowsOptionalFeature -Online -FeatureName Microsoft-Hyper-V

Переконайтеся, що в результаті ви бачите статус “Enabled”.

Встановлення Docker

Як ви вже знаєте, Kubernetes – це інструмент оркестрування контейнерів, а Docker є популярним вибором для контейнеризації. Kubernetes взаємодіє з Docker та керує ним на рівні підприємства. Завантажте Docker для Windows. Docker Desktop спрощує розробку, доставку та запуск контейнеризованих застосунків.

Це найшвидший спосіб створювати Docker-застосунки у Windows за допомогою Hyper-V та мережі. Після успішного встановлення Docker доступний у будь-якому терміналі. Детальну інструкцію зі встановлення можна знайти в офіційній документації Docker. Якщо після встановлення виникають проблеми, такі як приховані значки, перезавантажте комп’ютер.

Встановлення Kubernetes

Графічний інтерфейс Docker дозволяє налаштовувати параметри, встановлювати та вмикати Kubernetes. Щоб встановити Kubernetes, виконайте наступні дії:

  • Клацніть правою кнопкою миші піктограму Docker у системному треї та виберіть “Settings”.
  • Виберіть “Kubernetes” на лівій панелі та натисніть “Apply”.

Docker встановить додаткові пакети та залежності. Процес займає від п’яти до десяти хвилин залежно від швидкості вашого Інтернету. Ви можете перевірити, чи все працює правильно, за допомогою програми Docker.

Оскільки програми Kubernetes можна розгортати через командний рядок, вам може знадобитися встановити інформаційну панель Kubernetes, оскільки її немає за замовчуванням. Встановіть панель, виконавши наступні кроки:

  • Завантажте конфігурацію YAML.
  • Розгорніть програму за допомогою команди: `kubectl apply -f <ім’я_файлу>.recommended.yaml`.
  • Переконайтеся, що все налаштовано правильно, за допомогою команди: `kubectl get -f <ім’я_файлу>.recommended.yaml.txt`.

Щоб отримати доступ до інформаційної панелі, виконайте наступну команду в Power Shell (не CMD):

  • Виконайте наступний код: `((kubectl -n kube-system describe secret default | select-string “token:”) -split “+”)[1]`
  • Скопіюйте згенерований токен та запустіть проксі `kubectl proxy`.
  • У своєму браузері відкрийте посилання.
  • Натисніть `Токен` і вставте свій токен.
  • Увійдіть.

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

Читайте також: Як встановити Kubernetes на Ubuntu 18

Як створити та керувати кластером Kubernetes

Якщо ви дійшли до цього етапу, ви повинні були успішно встановити Kubernetes на своєму хості. Далі виконайте такі кроки, щоб створити кластер та керувати ним:

  • Налаштувати мережу: вам необхідно налаштувати мережу між вузлами кластера, щоб вони могли спілкуватися.
  • Налаштувати аутентифікацію кластера: створити механізми аутентифікації та авторизації для доступу до кластера.
  • Налаштувати основні компоненти: включити сервер API, планувальник та менеджер контролера.
  • Під’єднати робочі вузли: підключити робочі вузли до кластера за допомогою файлів конфігурації, отриманих у процесі налаштування кластера.
  • Розгорнути доповнення: встановити розширення для покращення функціональності кластера.
  • Керувати робочими навантаженнями: розпочати розгортання ваших програм.

Хоча це лише загальний огляд процесу створення кластера, він включає багато кроків та використання багатьох команд. Для детальнішої інформації ознайомтесь з офіційним посібником з документації зі створення кластерів перед розгортанням. Це має бути ваш основний посібник.

Як розгорнути свій перший додаток за допомогою Kubernetes

Найпоширенішою командою під час використання Kubernetes є `kubectl action resource`, яка дозволяє виконувати певні дії, такі як створення або видалення вказаного ресурсу.

Якщо у вас виникають труднощі, ви можете скористатися опцією `–help` після певної підкоманди для отримання додаткової інформації.

Наприклад, `kubectl get nodes –help`. Розгорніть свій перший застосунок Kubernetes за допомогою команди: `kubectl create deployment Kubernetes-bootcamp –image=gcr.io/google-samples/kubernetes-bootcamp:v1`.

Заключні слова

Цей посібник є точкою входу в світ технології Kubernetes. Ви дізналися про переваги, можливості та архітектуру Kubernetes. Сподіваюся, він дав вам необхідні знання для початку роботи.

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

Далі перегляньте навчальні посібники Kubernetes для початківців.