Kubernetes

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

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

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

Дизайн

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

Поди

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

Мітки та селектори

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

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

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

tier=back-end AND release_track=staging

Контролери

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

Архітектура

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

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

Kubernetes control plane (master)

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

etcd

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

Сервер API

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

Планувальник (англ. Scheduler)

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

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

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

Вузол Kubernetes (slave)

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

Kubelet

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

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

Контейнер

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

Kube-proxy

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

cAdvisor

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


Локальна розробка

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

Історія

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

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

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

Джерела

  1. http://kubernetes.io/
  2. https://github.com/kubernetes/kubernetes/blob/master/LICENSE
  3. What is Kubernetes?. Kubernetes. Процитовано 31 березня 2017.
  4. An Introduction to Kubernetes. DigitalOcean. Процитовано 24 вересня 2015.
  5. Langemak, Jon (11 лютого 2015). Kubernetes 101 – Networking. Das Blinken Lichten. Архів оригіналу за 25 жовтня 2015. Процитовано 2 листопада 2015.
  6. Strachan, James (21 травня 2015). Kubernetes for Developers. Medium. Архів оригіналу за 7 вересня 2015. Процитовано 2 листопада 2015.
  7. Surana, Ramit (16 вересня 2015). Containerizing Docker on Kubernetes. LinkedIn. Процитовано 2 листопада 2015.
  8. Intro: Docker and Kubernetes training - Day 2. Red Hat. 20 жовтня 2015. Архів оригіналу за 29 жовтня 2015. Процитовано 2 листопада 2015.
  9. Overview of a Replication Controller. Documentation. CoreOS. Архів оригіналу за 22 вересня 2015. Процитовано 2 листопада 2015.
  10. Sanders, Jake (2 жовтня 2015). Kubernetes: Exciting Experimental Features. Livewyer. Архів оригіналу за 20 жовтня 2015. Процитовано 2 листопада 2015.
  11. Kubernetes Infrastructure. OpenShift Community Documentation. OpenShift. Архів оригіналу за 6 July 2015. Процитовано 24 вересня 2015.
  12. Marhubi, Kamal (26 вересня 2015). Kubernetes from the ground up: API server. kamalmarhubi.com. Архів оригіналу за 29 жовтня 2015. Процитовано 2 листопада 2015.
  13. Ellingwood, Justin (2 травня 2018). An Introduction to Kubernetes (html). DigitalOcean (англ.). Архів оригіналу за 5 липня 2018. Процитовано 20 липня 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.»
  14. The Three Pillars of Kubernetes Container Orchestration - Rancher Labs. rancher.com. 18 травня 2017. Архів оригіналу за 24 червня 2017. Процитовано 22 травня 2017.
  15. Marhubi, Kamal (27 серпня 2015). What [..] is a Kubelet?. kamalmarhubi.com. Архів оригіналу за 13 листопада 2015. Процитовано 2 листопада 2015.
  16. https://github.com/kubernetes/minikube
  17. https://microk8s.io/
  18. What is Kubernetes?. Kubernetes. Процитовано 31 березня 2017.
  19. Google Made Its Secret Blueprint Public to Boost Its Cloud (амер.). Архів оригіналу за 1 липня 2016. Процитовано 27 червня 2016.
  20. Google Open Sources Its Secret Weapon in Cloud Computing. Wired. Архів оригіналу за 10 вересня 2015. Процитовано 24 вересня 2015.
  21. 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). Архів оригіналу за 27 липня 2017.
  22. Borg, Omega, and Kubernetes - ACM Queue. queue.acm.org. Архів оригіналу за 9 липня 2016. Процитовано 27 червня 2016.
  23. Early Stage Startup Heptio Aims to Make Kubernetes Friendly. Процитовано 6 грудня 2016.
  24. As Kubernetes Hits 1.0, Google Donates Technology To Newly Formed Cloud Native Computing Foundation. TechCrunch. Архів оригіналу за 23 вересня 2015. Процитовано 24 вересня 2015.
  25. Cloud Native Computing Foundation. Архів оригіналу за 3 липня 2017.
  26. Conway, Sarah. Kubernetes Is First CNCF Project To Graduate (html). Cloud Native Computing Foundation (англ.). Архів оригіналу за 29 жовтня 2018. Процитовано 3 грудня 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.»

Посилання

This article is issued from Wikipedia. The text is licensed under Creative Commons - Attribution - Sharealike. Additional terms may apply for the media files.