Ця сторінка присвячена короткому огляду Kubernetes.

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

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

Історія

Давайте повернемося назад і розберемося, чому Kubernetes так корисний.

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

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

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

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

Ера контейнерів: Контейнери схожі на віртуальні машини, але вони мають властивості ізоляції для спільного використання операційної системи (ОС) між додатками. Тому ємності вважаються легкими. Подібно до віртуальної машини, контейнер має власну файлову систему, процесор, пам’ять, простір для процесів тощо. Оскільки вони не підключені до базової інфраструктури, вони є портативними між хмарами та дистрибутивами ОС.

Контейнери стали популярними через додаткові переваги, такі як:

  • Гнучке створення та розгортання додатків: Створити образ контейнера легко та ефективно порівняно з використанням образу віртуальної машини.
  • Постійна розробка, інтеграція та розгортання: забезпечує надійне та часте збирання та розгортання зображення контейнера з швидким та легким відкатом (завдяки незмінності зображення).
  • Розділення завдань між Dev та Ops: Створюйте зображення контейнерів додатків під час побудови/випуску, а не під час розгортання, тим самим відокремлюючи програми від інфраструктури.
  • Спостережуваність охоплює не тільки інформацію та показники на рівні ОС, але й інформацію про справність додатків та інші сигнали.
  • Ідентичне середовище в розробці, тестуванні та випуску: на ноутбуці працює так само, як і в хмарі.
  • Переносимість хмари та операційної системи: працює на Ubuntu, RHEL, CoreOS, on-prem, Google Kubernetes Engine та будь-де ще.
  • Управління, орієнтоване на додаток: Підвищує рівень абстракції від запуску ОС на віртуальному обладнанні до запуску програми на ОС з використанням логічних ресурсів.
  • Слабо пов’язані, розподілені, гнучкі, виділені мікросервіси: замість монолітного стека на одній великій виділеній машині програми розбиваються на менші, незалежні частини, які можна динамічно розгортати та керувати.
  • Ізоляція ресурсів: передбачувана продуктивність програми.
  • Грамотне використання ресурсів: висока ефективність і компактність.

Навіщо потрібен Kubernetes і що він може зробити?

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

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

Kubernetes надає вам:

  • Моніторинг сервісу та балансування навантаження Kubernetes може виявити контейнер, використовуючи ім’я DNS або власну IP-адресу. Якщо трафік в контейнері високий, Kubernetes може завантажувати баланс і розподіляти мережевий трафік, щоб розгортання було стабільним.
  • Оркестрування зберігання Kubernetes дозволяє автоматично монтувати систему зберігання на ваш вибір, таку як локальне сховище, загальнодоступні хмарні провайдери тощо.
  • Автоматичне розгортання і відкати За допомогою Kubernetes можна описати потрібний стан розгорнутих контейнерів і змінити фактичний стан до потрібного стану. Наприклад, ви можете автоматизувати Kubernetes, щоб створювати нові контейнери для розгортання, видаляти існуючі контейнери та розподіляти всі їхні ресурси в новий контейнер.
  • Автоматичне балансування навантаження Ви надаєте Kubernetes кластер вузлів, які він може використовувати для виконання контейнерних завдань. Ви повідомляєте Kubernetes, скільки процесора і пам’яті (RAM) вимагає кожен контейнер. Kubernetes може розміщувати контейнери на ваших хостах, щоб максимально ефективно використовувати ресурси.
  • Самоконтроль Kubernetes перезапускає контейнери, що вийшли з ладу, замінює та вимикає контейнери, які не проходять перевірку стану здоров’я, визначену користувачем, і не показує їх клієнтам, поки вони не будуть готові обслуговувати.
  • Керування конфіденційною інформацією та конфігурацією Kubernetes може зберігати конфіденційну інформацію та керувати нею, таку як паролі, токени OAuth та ключі SSH. Ви можете розгортати та оновлювати конфіденційну інформацію та конфігурацію програм, не змінюючи контейнери та не розміщуючи конфіденційну інформацію в конфігурації стеку.

Чим не є Kubernetes

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

Kubernetes:

  • Не обмежує типи підтримуваних додатків. Kubernetes прагне підтримувати широкий спектр робочих навантажень, включаючи ті, що мають штат або без нього, а також ті, що пов’язані з обробкою даних. Якщо ваш додаток може працювати в контейнері, він повинен нормально працювати і на Kubernetes.
  • Не розгортає вихідний код і не створює додаток. Робочі процеси безперервної інтеграції, доставки та розгортання (CI/CD) визначаються культурою, уподобаннями та технічними вимогами організації.
  • Не надає послуги для програми, такі як проміжне програмне забезпечення (наприклад, черги повідомлень), платформи обробки даних (наприклад, Spark), бази даних (наприклад, MySQL), кеші або кластерні системи зберігання даних (наприклад, Ceph), такі як вбудовані служби. Такі компоненти можуть працювати на Kubernetes та/або можуть бути доступні додаткам, що працюють на Kubernetes, через портативні механізми, такі як Open Service Broker.
  • Не включає рішення для реєстрації, моніторингу або оповіщення. Він забезпечує деякі інтеграції як доказ концепції та механізмів збору та експорту показників.
  • Не вказує і не вимагає конфігурації мови/системи (наприклад, Jsonnet). Він надає декларативний API, який може орієнтуватися на довільні форми декларативних специфікацій.
  • Не надає і не приймає будь-які комплексні системи конфігурації, обслуговування, управління або самовідновлення.
  • Крім того, Kubernetes – це не просто система оркестровки. По суті, Кубернетес позбавляє від необхідності в цьому. Технічне визначення оркестровки – це виконання певного робочого процесу: спочатку роблять А, потім В, потім С. На відміну від нього, Кубернетес містить набір незалежних, композиційних процесів управління, безперервно переводять поточний стан в намічений стан. Неважливо, як дістатися від А до С. Централізоване управління також не потрібно. Це робить систему простішою у використанні, потужнішою, надійнішою, стійкою та розширюваною.