Kubernetes

Матеріал з Вікіпедії — вільної енциклопедії.
Перейти до навігації Перейти до пошуку
Kubernetes
Kubernetes logo.svg
Тип Linux Foundation Projectd і вільне та відкрите програмне забезпечення
Розробник Google[1]
Перший випуск 7 червня 2014
Стабільний випуск 1.8.1 (12 жовтня 2017; 3 роки тому (2017-10-12))
Версії 1.21.0 (8 квітня 2021)[2]
Репозиторій github.com/kubernetes/kubernetes
Операційна система Багатоплатформність
Мова програмування Go
Ліцензія Apache Software License, Version 2.0d[3]
Вебсайт kubernetes.io

CMNS: Kubernetes у Вікісховищі

«Kubernetes» (K8s) — відкрита система автоматичного розгортання, масштабування та управління застосунками у контейнерах.[4] Розроблена компанією «Google». Система підтримує ряд інструментаріїв з управління контейнерами, у тому числі Docker.

Дизайн[ред. | ред. код]

Kubernetes визначає набір будівельних блоків («примітивів»), які спільно забезпечують механізми для розгортання, підтримки та масштабування застосунків. Kubernetes слабко зв'язний[en], та розширюваний, щоб відповідати різноманітним робочим навантаженням. Розширюваність в основному забезпечується API Kubernetes, що використовується внутрішніми компонентами, а також розширеннями та контейнерами, що працюють на Kubernetes.[5]

Поди[ред. | ред. код]

Основною одиницею планувальника в Kubernetes є под (англ. pod). Він додає вищий рівень абстракції групуючи контейнеризовані компоненти. Под складається з одного чи більше контейнерів, для яких гарантується розміщення на одному хості і які можуть ділитись ресурсами.[5] Кожен под в Kubernetes в кластері має унікальну IP адресу що дозволяє застосункам використовувати порти без ризику конфлікту.[6] Под може визначати том (англ. volume), такий як локальна директорія, або мережевий диск, і надавати його контейнерам в поді.[7] Подами можна керувати вручну через API Kubernetes, або делегувати керування ними контролеру.[5]

Мітки та селектори[ред. | ред. код]

Kubernetes дозволяє клієнтам (користувачам, чи власним компонентам) додавати до будь-якого об'єкту API такого як ноди чи вузли (англ. nodes) пари ключ-значення, які називаються «мітками» (англ. labels). Відповідно, «селектори міток» (англ. label selectors) — це запити щодо цих міток, які дають відповідні об'єкти.[5]

Мітки та селектори — це основний спосіб групування в Kubernetes, і вони визначають компоненти до яких застосовується операція.[8]

Наприклад, якщо поди мають мітку tier (з такими значеннями як front-end, back-end) та release_track (зі значеннями на зразок staging, production), тоді операція зі всіма нодами back-end і staging може використовувати селектор на зразок:[9]

tier=back-end AND release_track=staging

Контролери[ред. | ред. код]

Контролер — це цикл узгодження, який приводить поточний стан кластера до бажаного.[10] Це здійснюється за допомогою керування набором подів. Одним з різновидів контролерів є контролер реплікації (англ. replication controller), який завідує реплікацією та масштабуванням запускаючи задане число копій пода в кластері. Також він займається створенням подів на заміну тих які впали.[10] Іншими контролерами які входять до ядра системи Kubernetes, є «DaemonSet Controller» для запуску рівно одного пода на кожній машині (чи підмножині машин), і «Job Controller» для запуску подів які працюють до логічного завершення, наприклад як частина пакетної задачі.[11] Набір подів якими керує контролер визначається селектором міток в описі контролера.[9]

Архітектура[ред. | ред. код]

Діаграма архітектури Kubernetes

Kubernetes дотримується архітектури master/slave[en]. Його компоненти можна розділити на ті що керують окремим вузлом[en], і ті які є частиною control plane.[5][12]

Kubernetes control plane (master)[ред. | ред. код]

Kubernetes Master — це основний модуль контролю кластера, який керує навантаженням та комунікаціями у системі. Kubernetes control plane складається з різних компонентів, кожен з яких є окремим процесом, які можуть запускатись як на одному так і на багатьох вузлах, підтримуючи кластер високої доступності.[12] Цими компонентами є:

etcd[ред. | ред. код]

etcd — персистентне, легковагове, розподілене, сховище даних ключ-значення, розроблене в CoreOS яке надійно зберігає дані про конфігурацію кластера, і опис його стану в кожен конкретний момент часу. Інші компоненти стежать за змінами в цьому сховищі щоб привести себе до бажаного стану.[12]

Сервер API[ред. | ред. код]

Сервер API надає API Kubernetes використовуючи JSON через HTTP, яке дає як внутрішній так і зовнішній інтерфейс до Kubernetes.[5][13] Сервер API обробляє і валідує REST запити і оновлює стан об'єктів в etcd, таким чином дозволяючи клієнтам налаштовувати задачі і контейнери на різних робочих вузлах.[14]

Планувальник (англ. Scheduler)[ред. | ред. код]

Планувальник це під'єднуваний компонент, який вибирає на якому вузлі буде виконуватись под (основна сутність якою керує планувальник), покладаючись на доступність ресурсів. Планувальник відслідковує використання ресурсів на кожному вузлі, щоб переконатися що навантаження не надмірне для доступних ресурсів. Для цього, планувальнику треба знати потреби в ресурсах, доступність ресурсів, та інші обмеження і директиви політик які надає користувач, такі як quality-of-service, вимоги афінності/анти-афінності, локальність даних і т. д. По суті, роллю планувальника є звести «пропозицію» ресурсів з «попитом» навантаження.[15]

Менеджер контролерів (англ. Controller manager)[ред. | ред. код]

Менеджер контролерів — це процес який керує вбудованими котролерами Kubernetes такими як DaemonSet Controller та Replication Controller. Контролери спілкуються з сервером API щоб створювати, оновлювати і видаляти ресурси якими вони керують (поди, сервіси і т. д.).[13]

Вузол Kubernetes (slave)[ред. | ред. код]

Вузол (англ. The Node), також може називатись робітником або посіпакою (англ. Worker, Minion) — це машини, на яких розгортаються контейнери (робочі навантаження (англ. workloads)). Кожен вузол кластера має містити систему виконання[en] таку як Docker, і компоненти перелічені нижче.

Kubelet[ред. | ред. код]

Kubelet відповідальний за робочий стан вузла, і він забезпечує «здоровий» стан всіх контейнерів на вузлі. Він займається запуском, зупинкою та підтримкою контейнерів застосунків об'єднаних в поди.[5][16]

Kubelet спостерігає за станом пода, і якщо стан незадовільний, под перерозгортається на той самий вузол. Статус вузла повідомляється master вузлу кожні кілька секунд. Як тільки master виявляє несправність вузла, Replication Controller запускає поди на робочому вузлі.[джерело?]

Контейнер[ред. | ред. код]

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

Kube-proxy[ред. | ред. код]

Kube-proxy — це реалізація мережевого проксі та балансера навантаження[en], яка підтримує абстракцію сервісу та інші мережеві операції.[5] Відповідає за маршрутизацію трафіка до відповідного контейнера на основі IP та номера порту вхідного запиту.

cAdvisor[ред. | ред. код]

cAdvisor — це агент спостереження, він також збирає дані про використання ресурсів та метрики продуктивності, такі як використання процесора, пам'яті, файлової системи та мережі контейнерами на кожному вузлі.


Локальна розробка[ред. | ред. код]

Існують реалізації Kubernetes кластера, які можна запускати на одній робочій станції, призначені для локальної розробки і тестування: minikube[17] та microk8s[18].

Історія[ред. | ред. код]

Доповідь про Google Container Engine на Google Cloud Summit

Kubernetes (грец. κυβερνήτης, «керівник», «стерновий» чи «капітан»)[19] був створений Джо Біда (англ. Joe Beda), Бренданом Бернсом (англ. Brendan Burns) та Крейгом МакЛаккі (англ. Craig McLuckie),[20] до яких незабаром приєднались інші інженери Google, серед них Браян Грант (англ. Brian Grant) та (англ. Tim Hockin). Вперше він був анонсований Google в середині 2014.[21] На розробку і проектування системи сильно вплинула система Google Borg,[22][23] і багато хто з активних учасників проекту до того займались системою Borg. Початково мав робочу назву Project Seven, на честь персонажа Star Trek Seven of Nine[en], яка є «дружнішим» Борґом.[24] Початково проект Borg було написано на C++[22], але Kubernetes переписаний на Go.

Kubernetes v1.0 випущений 21 липня, 2015.[25] Одночасно з випуском першої Kubernetes v1.0, Google став партнером Linux Foundation сформувавши Cloud Native Computing Foundation (CNCF)[26]. 6 березня 2018, проект Kubernetes зайняв дев'яте місце за кількістю комітів на GitHub, та друге місце за кількістю авторів і відкритих задач, поступившись місцем лише ядру Linux.[27]

Джерела[ред. | ред. код]

  1. http://kubernetes.io/
  2. Release 1.21.0 — 2021.
  3. https://github.com/kubernetes/kubernetes/blob/master/LICENSE
  4. What is Kubernetes?. Kubernetes. Процитовано 2017-03-31. 
  5. а б в г д е ж и An Introduction to Kubernetes. DigitalOcean. Процитовано 24 вересня 2015. 
  6. Langemak, Jon (2015-02-11). Kubernetes 101 – Networking. Das Blinken Lichten. Архів оригіналу за 2015-10-25. Процитовано 2015-11-02. 
  7. Strachan, James (2015-05-21). Kubernetes for Developers. Medium. Архів оригіналу за 2015-09-07. Процитовано 2015-11-02. 
  8. Surana, Ramit (2015-09-16). Containerizing Docker on Kubernetes. LinkedIn. Процитовано 2015-11-02. 
  9. а б Intro: Docker and Kubernetes training - Day 2. Red Hat. 2015-10-20. Архів оригіналу за 2015-10-29. Процитовано 2015-11-02. 
  10. а б Overview of a Replication Controller. Documentation. CoreOS. Архів оригіналу за 2015-09-22. Процитовано 2015-11-02. 
  11. Sanders, Jake (2015-10-02). Kubernetes: Exciting Experimental Features. Livewyer. Архів оригіналу за 2015-10-20. Процитовано 2015-11-02. 
  12. а б в Kubernetes Infrastructure. OpenShift Community Documentation. OpenShift. Архів оригіналу за 6 July 2015. Процитовано 24 September 2015. 
  13. а б Marhubi, Kamal (2015-09-26). Kubernetes from the ground up: API server. kamalmarhubi.com. Архів оригіналу за 2015-10-29. Процитовано 2015-11-02. 
  14. Ellingwood, Justin (2 May 2018). An Introduction to Kubernetes (html). DigitalOcean (en). Архів оригіналу за 5 July 2018. Процитовано 20 July 2018. «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.» 
  15. The Three Pillars of Kubernetes Container Orchestration - Rancher Labs. rancher.com. 18 May 2017. Архів оригіналу за 24 June 2017. Процитовано 22 May 2017. 
  16. Marhubi, Kamal (2015-08-27). What [..] is a Kubelet?. kamalmarhubi.com. Архів оригіналу за 2015-11-13. Процитовано 2015-11-02. 
  17. https://github.com/kubernetes/minikube
  18. https://microk8s.io/
  19. What is Kubernetes?. Kubernetes. Процитовано 2017-03-31. 
  20. Google Made Its Secret Blueprint Public to Boost Its Cloud (en-US). Архів оригіналу за 2016-07-01. Процитовано 2016-06-27. 
  21. Google Open Sources Its Secret Weapon in Cloud Computing. Wired. Архів оригіналу за 10 September 2015. Процитовано 24 September 2015. 
  22. а б Abhishek Verma; Luis Pedrosa; Madhukar R. Korupolu; David Oppenheimer; Eric Tune; John Wilkes (April 21–24, 2015). Large-scale cluster management at Google with Borg. Proceedings of the European Conference on Computer Systems (EuroSys). Архів оригіналу за 2017-07-27. 
  23. Borg, Omega, and Kubernetes - ACM Queue. queue.acm.org. Архів оригіналу за 2016-07-09. Процитовано 2016-06-27. 
  24. Early Stage Startup Heptio Aims to Make Kubernetes Friendly. Процитовано 2016-12-06. 
  25. As Kubernetes Hits 1.0, Google Donates Technology To Newly Formed Cloud Native Computing Foundation. TechCrunch. Архів оригіналу за 23 September 2015. Процитовано 24 September 2015. 
  26. Cloud Native Computing Foundation. Архів оригіналу за 2017-07-03. 
  27. Conway, Sarah. Kubernetes Is First CNCF Project To Graduate (html). Cloud Native Computing Foundation (en). Архів оригіналу за 29 October 2018. Процитовано 3 December 2018. «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.» 

Посилання[ред. | ред. код]