Що насправді робить Kubernetes? [зачинено]


134

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

Так що Kubernetes, точно , і що деякі конкретні проблеми , які вона вирішує?


Зважаючи на те, що всі проекти світового докера (кубернети / флот / рій / тощо) мають труднощі з поясненням того, що вони роблять, і що їх вирізняє, я думаю, що дещо бажане запитання - це все, що ми можемо надати користувачам ... запитує "в чому різниця між флотом і кубернетами", а відповідь - "ви можете використовувати флот для запуску кубернетів". Бампер. ;-)
Торстен Бронгер

3
Я вважаю, що це цілком справедливе питання і вказує на кілька коротких подій у doco. Закрити його як занадто широке - це недостовірно. Найкращим підходом для мене було просто завантажити кодову базу k8s і, наприклад, піти шукати там, щоб дізнатися, що таке стручок. Це мені дуже допомогло.
Beezer

Відповіді:


113

Мета Kubernetes - полегшити організацію та графік подання заявки на весь парк машин. На високому рівні це операційна система вашого кластеру.

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

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


3
Дякуємо @brendan (+1) - відповідь напевно допомагає. Однак одне наступне запитання: чи не це робить Apache Mesos? Чи є конкуренти Kubernetes та Mesos один одному? Якщо ні, то чи можна їх використовувати разом з собою (а якщо так, то як)? Знову дякую!
smeeb

2
@smeeb Mesos і Kubernetes доповнюють одна одну (Остання підтримується як Месос). Mesos забезпечує більш складне управління ресурсами. Іншими словами, Kubernetes дозволяє Mesos вирішувати, який хост використовується, виходячи з наявної потужності. Mesos підтримує інші рамки. Якщо ви прочитаєте документи, ви побачите, що Marathon - це ще один спосіб запуску контейнерів на сервері керованих серверів Mesos.
Марк О'Коннор

18

Як ви читаєте з його сторінки Github :

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

Kubernetes - це:

lean: lightweight, simple, accessible
portable: public, private, hybrid, multi cloud
extensible: modular, pluggable, hookable, composable
self-healing: auto-placement, auto-restart, auto-replication

Kubernetes ґрунтується на досвіді Google у масштабі масштабних виробничих навантажень у поєднанні з найкращими ідеями та практикою громади.

Для мене Kubernetes - це інструмент для оркестрування контейнерів від Google. Завдяки його дизайну ви можете реалізувати сумісність з будь-яким двигуном контейнерів, але я думаю, що зараз це обмежено Docker. У його архітектурі є кілька важливих понять:

Kubernetes працює з такими поняттями:

Кластери - це обчислювальні ресурси, над якими будуються ваші контейнери. Kubernetes може працювати будь-де! Інструкції з різних служб див. У Посібниках для початку роботи.

Струми - це колокована група контейнерів Docker із загальними обсягами. Це найменші розгорнуті підрозділи, які можна створювати, планувати та керувати за допомогою Kubernetes. Стручки можна створювати індивідуально, але рекомендується використовувати контролер реплікації, навіть якщо створюється один струк. Більше про стручки.

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

Послуги надають єдине, стабільне ім’я та адресу для набору стручків. Вони виступають основними балансирами навантаження. Детальніше про послуги.

Мітки використовуються для організації та вибору груп об'єктів на основі ключа: пари значень. Більше про етикетки.

Отже, у вас є група машин, яка утворює кластер, де запускаються ваші контейнери. Йо також може визначити групу контейнерів, які надають послугу, аналогічно тому, як ви робите з іншими інструментами, такими як fig (тобто: webapp pod може бути сервером рейлів та базою даних postgres). У вас є також інші інструменти, щоб забезпечити кількість контейнерів / стручків служби, яка працює одночасно, сховище ключа-значення, свого роду вбудований балансир навантаження ...

Якщо ви знаєте щось про coreos, це дуже схоже рішення, але від Google. Algo Kubernetes має гарну інтеграцію з Google Cloud Engine.


2
Дякую @jcortejoso (+1) - однак у мене є декілька запитань щодо подальшого використання, якщо ви не заперечуєте: (1) ви говорите, що Kubernetes схожий на CoreOS, але від Google. Це означає, що Kubernetes і CoreOS вирішують одну і ту ж проблему. Але з власного веб-сайту [Kubernetes] () сказано, що ви можете встановити Kubernetes на CoreOS. Так що це?!? Чи Kubernetes збігається з CoreOS, чи Kubernetes працює на CoreOS і вирішує конкретну проблему?
smeeb

1
Також (2) Я досі не бачу значення в "оркестрації" Кубернета тут. Ви заявляєте, що за допомогою Kubernetes можна визначити групу контейнерів, які надають послугу, і мене цікавлять дві окремі речі: (2a) чи не міг я просто зробити цей тип кластеризації на рівні програми, і помістити свою програму позаду балансир навантаження nginx? І (2b) це все, що існує для "оркестрації"? Знову ж таки, мені здається, що балансування навантаження, яке можна було б легко досягти на рівні програми. Думки? Ще раз дякую за чудову відповідь!
smeeb

1
Якщо кубернети "легкі", мені цікаво, який би жировий розчин.
Торстен Бронгер

@smeeb Я не так знайомий з nginx (тому пробачте мою наївність), але я не думаю, що nginx перезапустить сервер, який вийшов з ладу; і якщо машина (або цілий центр обробки даних) вийде з ладу, nginx не перезапустить додаток на іншій машині. kubernetes забезпечить, щоб ви завжди тримали десь "стручки", десь бігали, і не важливо, де і як.
kgreenek

10

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

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

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

https://kubernetes.io/docs/concepts/overview/what-is-kubernetes/#why-do-i-need-kubernetes-and-what-can-it-do

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.