На цій сторінці показано неперевірені зміни
| Тип | вільне та відкрите програмне забезпечення сертифікація[1] і container orchestratord |
|---|---|
| Розробники | Google[2] і Cloud Native Computing Foundation |
| Перший випуск | 7 червня 2014 |
| Стабільний випуск | 1.8.1 (12 жовтня2017; 8 років тому (2017-10-12)) |
| Операційна система | Багатоплатформність |
| Мова програмування | Go |
| Ліцензія | Apache Software License 2.0d[3] |
| Онлайн-документація | kubernetes.io/docs/ kubernetes.io/docs/home/ |
| Репозиторій | github.com/kubernetes/kubernetes |
| Вебсайт | kubernetes.io/uk |
| Неофіційний переклад документації українською —https://andygol-k8s.netlify.app/uk/ | |
Kubernetes, абоK8s — цевідкрита система автоматичногорозгортання, масштабування та управліннязастосунками уконтейнерах.[4] Розроблена компанієюGoogle. Система підтримує ряд інструментаріїв з управління контейнерами, у тому числіDocker.
Назва «Kubernetes» походить відгрец.κυβερνήτης,трансліт. kubernḗtēs(губернатор,керманич,лоцман). «Kubernetes» часто скорочують як «K8s», враховуючи вісім літер між «K» та «s» (нумеронім).[5]
Kubernetes визначає набір будівельних блоків («примітивів»), які спільно забезпечують механізми для розгортання, підтримки та масштабування застосунків. Kubernetesслабко зв'язний[en], та розширюваний, щоб відповідати різноманітним робочим навантаженням. Розширюваність в основному забезпечується API Kubernetes, що використовується внутрішніми компонентами, а також розширеннями та контейнерами, що працюють на Kubernetes.[6]
Основною одиницеюпланувальника в Kubernetes є под (англ.pod). Він додає вищий рівень абстракції групуючи контейнеризовані компоненти. Под складається з одного чи більше контейнерів, для яких гарантується розміщення на одному хості і які можуть ділитись ресурсами.[6] Кожен под в Kubernetes в кластері має унікальнуIP адресу що дозволяє застосункам використовувати порти без ризику конфлікту.[7] Под може визначатитом (англ.volume), такий як локальна директорія, або мережевий диск, і надавати його контейнерам в поді.[8] Подами можна керувати вручну через API Kubernetes, або делегувати керування ними контролеру.[6]
Kubernetes дозволяє клієнтам (користувачам, чи власним компонентам) додавати до будь-якого об'єкту API такого як ноди чи вузли (англ.nodes) пари ключ-значення, які називаються «мітками» (англ.labels). Відповідно, «селектори міток» (англ.label selectors) — це запити щодо цих міток, які дають відповідні об'єкти.[6]
Мітки та селектори — це основний спосіб групування в Kubernetes, і вони визначають компоненти до яких застосовується операція.[9]
Наприклад, якщо поди мають міткуtier (з такими значеннями якfront-end,back-end) таrelease_track (зі значеннями на зразокstaging,production), тоді операція зі всіма нодамиback-end іstaging може використовувати селектор на зразок:[10]
tier=back-end AND release_track=staging
Контролер — це цикл узгодження, який приводить поточний стан кластера до бажаного.[11] Це здійснюється за допомогою керування набором подів. Одним з різновидів контролерів єконтролер реплікації (англ.replication controller), який завідує реплікацією та масштабуванням запускаючи задане число копій пода в кластері. Також він займається створенням подів на заміну тих які впали.[11] Іншими контролерами які входять до ядра системи Kubernetes, є «DaemonSet Controller» для запуску рівно одного пода на кожній машині (чи підмножині машин), і «Job Controller» для запуску подів які працюють до логічного завершення, наприклад як частинапакетної задачі.[12] Набір подів якими керує контролер визначається селектором міток в описі контролера.[10]

Kubernetes дотримуєтьсяархітектури master/slave. Його компоненти можна розділити на ті що керують окремимвузлом[en], і ті які є частиною control plane.[6][13]
Kubernetes Master — це основний модуль контролю кластера, який керує навантаженням та комунікаціями у системі. Kubernetes control plane складається з різних компонентів, кожен з яких є окремим процесом, які можуть запускатись як на одному так і на багатьох вузлах, підтримуючикластер високої доступності.[13] Цими компонентами є:
etcd —персистентне, легковагове, розподілене,сховище даних ключ-значення, розроблене вCoreOS яке надійно зберігає дані про конфігурацію кластера, і опис його стану в кожен конкретний момент часу. Інші компоненти стежать за змінами в цьому сховищі щоб привести себе до бажаного стану.[13]
Сервер API надає API Kubernetes використовуючиJSON черезHTTP, яке дає як внутрішній так і зовнішній інтерфейс до Kubernetes.[6][14] Сервер API обробляє і валідуєREST запити і оновлює стан об'єктів вetcd, таким чином дозволяючи клієнтам налаштовувати задачі і контейнери на різних робочих вузлах.[15]
Планувальник це під'єднуваний компонент, який вибирає на якому вузлі буде виконуватись под (основна сутність якою керує планувальник), покладаючись на доступність ресурсів. Планувальник відслідковує використання ресурсів на кожному вузлі, щоб переконатися що навантаження не надмірне для доступних ресурсів. Для цього, планувальнику треба знати потреби в ресурсах, доступність ресурсів, та інші обмеження і директиви політик які надає користувач, такі якquality-of-service, вимогиафінності/анти-афінності, локальність даних і т. д. По суті, роллю планувальника є звести «пропозицію» ресурсів з «попитом» навантаження.[16]
Менеджер контролерів — це процес який керує вбудованими контролерами Kubernetes такими як DaemonSet Controller та Replication Controller. Контролери спілкуються з сервером API щоб створювати, оновлювати і видаляти ресурси якими вони керують (поди, сервіси і т. д.).[14]
Вузол (англ.The Node), також може називатись робітником або посіпакою (англ.Worker, Minion) — це машини, на яких розгортаються контейнери (робочі навантаження (англ.workloads)). Кожен вузол кластера має міститисистему виконання[en] таку якDocker, і компоненти перелічені нижче.
Kubelet відповідальний за робочий стан вузла, і він забезпечує «здоровий» стан всіх контейнерів на вузлі. Він займається запуском, зупинкою та підтримкою контейнерів застосунків об'єднаних в поди.[6][17]
Kubelet спостерігає за станом пода, і якщо стан незадовільний, под перерозгортається на той самий вузол. Статус вузла повідомляється master вузлу кожні кілька секунд. Як тільки master виявляє несправність вузла, Replication Controller запускає поди на робочому вузлі.[джерело?]
Контейнер міститься всередині пода. Контейнер — це найнижчий рівеньмікросервісу, що містить запущений застосунок, бібліотеки і їх залежності. Контейнери можуть робитись доступними для світу через зовнішню IP адресу.
Kube-proxy — це реалізаціямережевого проксі табалансера навантаження, яка підтримує абстракцію сервісу та інші мережеві операції.[6] Відповідає замаршрутизацію трафіка до відповідного контейнера на основі IP та номера порту вхідного запиту.
cAdvisor — це агент спостереження, він також збирає дані про використання ресурсів та метрики продуктивності, такі як використання процесора, пам'яті,файлової системи та мережі контейнерами на кожному вузлі.
Існують реалізації Kubernetes кластера, які можна запускати на одній робочій станції, призначені для локальної розробки і тестування: minikube[18] та microk8s[19].

Kubernetes було анонсовано компанією Google 6 червня 2014 року.[20] Проєкт був задуманий та створений співробітниками Google Джо Бедою, Бренданом Бернсом та Крейгом Маклакі. Невдовзі до участі в розробці проєкту долучилися й інші співробітники Google, зокрема Вілле Айкас, Дон Чен, Браян Грант, Тім Хокін та Деніел Сміт.[21][22] Невдовзі до зусиль приєдналися й інші компанії, такі якRed Hat таCoreOS, а також такі помітні учасники, як Клейтон Коулман та Келсі Хайтауер.[23]
На розробку і проектування системи сильно вплинула система Google Borg,[24][25] і багато хто з активних учасників проекту до того займались системою Borg. Початково мав робочу назву Project Seven, на честь персонажаStar TrekSeven of Nine[en], яка є «дружнішим»Борґом.[26] Початково проект Borg було написано на C++[24], але Kubernetes переписаний наGo.
Kubernetes v1.0 випущений 21 липня, 2015.[27] Одночасно з випуском першої Kubernetes v1.0, Google став партнеромLinux Foundation сформувавшиCloud Native Computing Foundation (CNCF)[28]. 6 березня 2018, проект Kubernetes зайняв дев'яте місце за кількістю комітів наGitHub, та друге місце за кількістю авторів і відкритих задач, поступившись місцем лишеядру Linux.[29]
{{cite web}}:Cite має пустий невідомий параметр:|df= (довідка){{cite web}}:Cite має пустий невідомий параметр:|df= (довідка){{cite web}}:Cite має пустий невідомий параметр:|df= (довідка)[Архівовано 2015-10-29 уWayback Machine.]{{cite web}}:Cite має пустий невідомий параметр:|df= (довідка){{cite web}}:Cite має пустий невідомий параметр:|df= (довідка){{cite web}}:Cite має пустий невідомий параметр:|df= (довідка)[Архівовано 2015-07-06 уWayback Machine.]{{cite web}}:Cite має пустий невідомий параметр:|df= (довідка)One of the most important master services is an API server. This is the main management point of the entire cluster as it allows a user to configure Kubernetes' workloads and organizational units. It is also responsible for making sure that the etcd store and the service details of deployed containers are in agreement. It acts as the bridge between various components to maintain cluster health and disseminate information and commands.
{{cite web}}:Cite має пустий невідомий параметр:|df= (довідка){{cite web}}:Cite має пустий невідомий параметр:|df= (довідка){{cite web}}: Обслуговування CS1: Сторінки з текстом «archived copy» як значення параметру title (посилання){{cite web}}: Обслуговування CS1: Сторінки з текстом «archived copy» як значення параметру title (посилання){{cite journal}}:Cite має пустий невідомий параметр:|df= (довідка){{cite web}}:Cite має пустий невідомий параметр:|df= (довідка){{cite news}}: Обслуговування CS1: Сторінки з параметром url-status, але без параметра archive-url (посилання){{cite web}}:Cite має пустий невідомий параметр:|df= (довідка){{cite web}}:Cite має пустий невідомий параметр:|df= (довідка)Compared to the 1.5 million projects on GitHub, Kubernetes is No. 9 for commits and No. 2 for authors/issues, second only to Linux.