Kubernetes

Материал из Википедии — свободной энциклопедии
Перейти к: навигация, поиск
Kubernetes
Kubernetes (container engine).png
Тип

Управление конфигурацией, системное администрирование

Разработчик

Первоначальный Google в настоящее время Cloud Native Computing Foundation

Написана на

Go

Операционная система

Linux

Первый выпуск

7 июня 2014

Последняя версия
Состояние

Актуальное

Лицензия

Apache License 2.0

Сайт

kubernetes.io

Kubernetes (часто так же используется обозначение «K8s»[2], название образовано от греческого κυβερνήτης, — «кормчий»,"рулевой"[2], по русски — Кубернетес или Кубернетис) — открытое программное обеспечение для автоматизации развёртывания, масштабирования и управления контейнеризированными приложениями[3]. Оригинальная версия была разработана компанией Google. Впоследствии Kubernetes был передан под управление Cloud Native Computing Foundation. Предназначение Kubernetes — предоставить «платформу для автоматического развёртывания, масштабирования, управления приложениями на кластерах или отдельных хостах».[4] Кубернетис поддерживает различные технологии контейнеризации, включая Docker.

Kenernetes используется фондом Wikimedia Foundation, инфраструктура которого мигрировала на это приложение с самостоятельно разработанного ПО для организации кластеров[5].

История[править | править код]

Google Container Engine talk at Google Cloud Summit

Kubernetes начала разрабатываться программистами компании Google Joe Beda, Brendan Burns и Craig McLuckie,[6], к которым, в дальнейшем присоединились их коллеги Brian Grant и Tim Hockin. Впервые он был анонсирован Google в середине 2014 года.[7] На разработку и внутреннюю идеологию Kubernetes серьёзно повлиял другой продукт Google, оставшийся внутренней разработкой — система управления кластерами Google Borg, [8][9] над которым ранее работали многие из наиболее важных разработчиков Kubernetes.

Оригинальное наименование проекта — Project Seven, отсылка к героине сериала Star Trek, возвращённой в индивидуальное и дружественное к людям состояние из статуса члена нечеловеческого роевого кибернетического разума Коллектива Боргов.[10] Семь ручек на штурвале логотипа проекта — аллюзия на этот художественный образ.

Kubernetes v1.0 был выпущен в 21 июля 2015 года.[11] После выпуска этой версии Google, в партнёрстве с Linux Foundation, организовал специальный фонд Cloud Native Computing Foundation (CNCF)[12], которому передал Kubernetes в качестве начального технологического вклада в деятельность CNCF.

Концепции и внутреннее устройство[править | править код]

Как и многие другие сложные продукты, Kubernetes в рамках своей экосистемы определяет ряд специфических для этой экосистемы понятий и концепций. Ниже перечислены наиболее важные:

Ноды (узлы)[править | править код]

Нода (узел, node) — это отдельная физическая или виртуальная машина, на которой развёрнуты и выполняются контейнеры приложений. Каждый узел в кластере Kubernetes содержит сервисы для запуска приложений в контейнерах (например Docker), а так же компоненты, предназначенные для централизованного управления нодой.

Поды[править | править код]

Базовая единица для управления и запуска приложений в Kubernetes называется «под» (англ."pod"). Под — это один или несколько контейнеров, которым гарантирован запуск на одном узле (то есть на одной физической или виртуальной машине), обеспечивается разделение ресурсов[13] и предоставляется уникальный в пределах кластера IP-адрес[14]. Последнее позволяет приложениям, развёрнутым на поде, использовать фиксированные и предопределённые номера портов без риска конфликта. Для совместного использования из контейнеров, развёрнутых в пределах под может быть определён — том (volume), представляющий из себя каталог на локальном диске или сетевой диск[15].

Поды могут напрямую управляться с использованием API Kubernetes или управление ими может быть передано контроллеру.[13]

Разделы[править | править код]

Раздел (Volume) — это каталог или сетевой диск, возможно, с данными в нём, который доступен контейнерам пода.

Метки и селекторы[править | править код]

Kubernetes позволяет обеспечивает работу простого хранилища пар ключ-значение (key-value). Этот механизм, называемый метки («labels») может быть использован для маркировки любого объекта API Kubernetes, например пода или ноды. Селекторы меток («label selectors») — это запросы, которые позволяют получить ссылку на объекты, соответствующие какой-то из меток.[13]

Метки и селекторы — это главный механизм Kubernetes, который позволяет выбрать, какой из объектов следует использовать для запрашиваемой операции.[16]

Сервисы[править | править код]

Сервисом в Kubernetes называют совокупность набора логически связанного набора pod и политики доступа к ним[17]. Например, сервис может соответствовать одному из уровней программного обеспечения, разработанного в соответствии с принципами многоуровневой архитектуры ПО. Набор подов, соответствующий сервису, получается в результате выполнения селектора соответствующей метки[13]

Kubernetes обеспечивает функционал обнаружения сервисов, и маршрутизации по запросу. Он умеет переназначать необходимые для обращения к сервису IP-адрес и доменное имя сервиса различным подам, входящим в его состав. При этом обеспечивается балансировка нагрузки между подами, чьи метки соответствуют сервису в стиле Round robin DNS, а так же корректная работа в том случае, если один из узлов кластера вышел из строя и размещённые на нём поды автоматически переместились на другой.[14] По умолчанию сервис доступен внутри управляемого Kubernetes кластера, например поды бэкенда группируются для обеспечения балансироваки нагрузки и в таком виде предоставляются фронтенду, но он может быть настроен и для того, чтобы предоставлять доступ к входящим в его состав подам извне, как к единому фронтенду.[18]

Контроллеры[править | править код]

Контроллер — это процесс, который управляет состоянием кластера, пытаясь привести его от фактического к желаемому.[19] Он делает это, оперируя набором подов, который, определяется с помощью селекторов меток, являющихся частью определения контроллера.[20] Выполнение контроллеров обеспечивается компонентом Kubernetes Controller Manager.

Один из типов контроллеров, самый известный — это «Контроллер репликации» («Replication Controller»), который обеспечивает масштабирование, запустив указанное количество копий пода в кластере. Он также обеспечивает запуск новых инстансов пода, в том случае если узел, на который работает управляемый этим контроллером под, выходит из строя..[19]

Другие контроллеры, входящие в основную систему Kubernetes, включают в себя «DaemonSet Controller», который обеспечивает запуск пода на каждой машине (или подмножеством машин) и «Job Controller» для запуска подов, которые выполняются до завершения, например, как часть пакетного задания.[21]

Операторы[править | править код]

Операторы (Operators) — специализированный вид программного обеспечения Kubernetes, предназначенный для включения stateful (то есть сохраняющих своё состояние между выполнениями, таких как СУБД, системы мониторинга или кэширования) сервисов в инфраструктуру, создаваемую при помощи Kubernetes[22].

Назначение операторов — предоставить возможность управления stateful-приложениями в кластере Kubernetes прозрачным для Kubernetes способом и скрыть подробности их настроек от основного процесса управления кластером Kubernetes.

Архитектура и компоненты[править | править код]

Архитектура Kubernetes

Kenrnetes реализует архитектуру master/slave, Компоненты Kubernetes могут быть разделены на те, которые осуществляют управление индивидуальными нодами и входящими в состав подсистемы управления Kubernetes.[13][23]

Подсистема управления Kubernetes[править | править код]

Подсистема управления Kubernetes состоит из набора компонент, каждый из которых может выполняться или на одной мастер-ноде или на множестве паралелльно работающих мастер-нод, обеспечивающих, совместно, режим высокой доступнеости.[23] Подсистема обеспечивает управление распределением нагрузки и коммуникациями внутри кластера и состоит из следующих приложений:

etcd[править | править код]

Один из компонент Kubernetes — etcd — легкий распределённый движок хранилища key-value, разработанный CoreOS. Etcd не позиционируется как полноценная СУБД, а предназначен для хранения конфигурационных данных приложений кластера, представляя из себя функциональный эквивалент каталога /etc UNIX.

Сервер API[править | править код]

Сервер API Kubernetes — ключевой компонент системы. Он предоставляет JSON REST API, использующий HTTP в качестве транспорта. Этот API используется для организации внешнего и внутреннего доступа к функциям Kubernetes.[13][24] Сервер API обновляет состояние объектов, хранящееся в etcd, позволяя своим клиентам управлять распределением контейнеров и нагрузки между нодами управляемой системы.

Планировщик[править | править код]

Планировщик (Scheduller) — это компонент системы (один из контроллеров[25]), который выбирает, на какой ноде должен выполняться какой под, опираясь на критерии доступности ресурсов. Планировщик отслеживает использование ресурсов на каждом из узлов, обеспечивая распределение нагрузки так, чтобы она не превышала доступный объём ресурсов. Для этой цели планировщик должен обладать информацией о доступных на каждом из узлов ресурсах, требованиях к ним со стороны управляемых подов, а так же различных дополнительных пользовательских ограничениях и политиках, таких как QoS, требования affinity/anti-affinity выполняемых процессов, физической локализации данных и т. д.. Подводя итог, роль планировщика — находить и предоставлять ресурсы в зависимости от запросов, возникающих в связи с загрузкой.[26]

Controller manager[править | править код]

Сontroller manager — процесс, выполняющий основные контроллеры Kubernetes, такие как DaemonSet Controller и Replication Controller run in. Контроллеры взаимодействуют с сервером API Kubernetes, создавая, обновляя и удаляя управляемые ими ресурсы (поды, точки входа в сервисы, и т. д.)[24]

Kubectl[править | править код]

Kubectl — интерфейс командной строки Kubernetes, наряду с API обеспечивающий управление ресурсами, подконтрольными Kubernetes.[17],[27]

Нода (узел) Kubernetes[править | править код]

Процедура работы Kubernetes состоит в том, что ресурсы нод Kubernetes динамически распределяются между выполняемыми на них подами. Как уже было сказано выше, каждый узел в кластере Kubernetes содержит нижеперечисленные типовые компоненты:

Сервис для запуска контейнеров[править | править код]

В зависимости от типа используемого контейнерного движка, узел Kubernetes содержит сервис для запуска контейнеров соответствующего вида . С точки зрения программной среды Kubernetes контейнеры инкапсулируются в подах. Сами контейнеры являются наиболее низкоуровневыми программными компонентами, с которыми взаимодействует ПО Kubernetes. Они, в свою очередь, содержат выполняемые приложения, библиотеки и иные необходимые для работы этих приложений ресурсы. Для внешнего мира контейнеры доступны через назначаемый каждому из контейнеров IP-адрес.

Kubelet[править | править код]

Kubelet отвечает за статус выполнения подов на ноде, что включает в себя отслеживание того, что каждый из контейнеров корректно выполняется, находясь в рабочем состоянии. Kubelet обеспечивает запуск, останов и управление контейнерами приложений, организованными в поды. Функционально Kubelet можно рассматривать как аналог supervisord.[13][28]

Kubelet мониторит состояние подов и, в случае, если обнаруживает, что какой-то из подов находится в неверном состоянии, пытается осуществить его повторное развёртывание (деплой) и перезапуск на узле. Статус самой ноды отправляется на мастер-ноду Kubernetes каждые несколько секунд в диагностических сообщениях (heartbeat messages). Если мастер-нода, исходя из содержания этих сообщений или их пропадания, обнаруживает, что конкретный узел не работает должным образом, процесс Replication Controller, выполняемый на мастер-ноде, пытается перезапустить необходимые поды на другом узле, находящемся в рабочем состоянии.

Kube-proxy[править | править код]

Kube-proxy — это компонент, являющийся комбинацией сетевого прокси-сервера и балансировщика нагрузки. Реализованные в нём операции сетевого уровня используют абстракцию сервиса.[13] Он отвечает за маршрутизацию входящего трафика на конкретные контейнеры, работающие в пределах пода, расположенного на ноде. Маршрутизация обеспечивается на основе IP-адреса и порта входящего запроса.

cAdvisor[править | править код]

cAdvisor — агент системы внутреннего мониторинга Kubernetes, собирающий метрики производительности и информацию об использовании контейнерами, работающими в пределах ноды, таких ресурсов как время работы центрального процессора, оперативной памяти, нагрузку на файловую и сетевую системы.

Kubernetes и платформы управления облаками и контейнерами[править | править код]

Многие из поставщиков систем управления контейнерами поддержали Kubernetes, реализовав его поддержку в своих продуктах. Часть из них, так же, приняла участие в деятельности CNCF. Rancher Labs включила Kubernetes в дистрибутив своей системы управления контейнерами Rancher container management platform.[29] Компания Pivotal Software использовала Kubernetes в своём продукте Pivotal Container Service (PKS)[30], Red Hat — в составе системы OpenShift,[31][32] CoreOS включила его в состав коммерческой версии дистрибутива Container Linux Tectonic, а IBM использовала его в IBM Cloud Container Service[33][34] и в IBM Cloud Private product.[35][36][37] Компания Oracle присоединилась к Cloud Native Computing Foundation в сентябре 2017 и включила Kubernetes в состав Oracle Cloud и Oracle Linux.[38]

В настоящее время большинство широкоиспользуемых облачных платформ и сервисов контейнеризации в том или ином виде используют Kubernetes, постепенно становящийся стандартом де-факто. Kubernetes можно рассматривать как PaaS (Platform as a service), предоставляющую более высокий уровень абстракции чем традиционные платформы управления облаками[39].

Docker[править | править код]

OpenStack[править | править код]

AWS EC2[править | править код]

Microsoft Azure[править | править код]

Google Cloud Platform[править | править код]

Ссылки[править | править код]

Примечания[править | править код]

  1. https://api.github.com/repos/kubernetes/kubernetes/releases
  2. 1 2 What is Kubernetes (K8s)?. Dialogic Glossary of Telecom Terms. Архивировано 11 октября 2017 года.
  3. kubernetes/kubernetes (англ.). GitHub. Архивировано 21 апреля 2017 года.
  4. What is Kubernetes?. Kubernetes. Архивировано 1 апреля 2017 года.
  5. Раздел Case Studies на официальном сайте Kubernetes
  6. Google Made Its Secret Blueprint Public to Boost Its Cloud (англ.). Архивировано 1 июля 2016 года.
  7. Google Open Sources Its Secret Weapon in Cloud Computing. Wired. Проверено 24 сентября 2015. Архивировано 10 сентября 2015 года.
  8. (April 21–24, 2015) «Large-scale cluster management at Google with Borg». Proceedings of the European Conference on Computer Systems (EuroSys).
  9. Borg, Omega, and Kubernetes - ACM Queue. queue.acm.org. Архивировано 9 июля 2016 года.
  10. Early Stage Startup Heptio Aims to Make Kubernetes Friendly.
  11. As Kubernetes Hits 1.0, Google Donates Technology To Newly Formed Cloud Native Computing Foundation. TechCrunch. Проверено 24 сентября 2015. Архивировано 23 сентября 2015 года.
  12. Cloud Native Computing Foundation. Архивировано 3 июля 2017 года.
  13. 1 2 3 4 5 6 7 8 An Introduction to Kubernetes. DigitalOcean. Проверено 24 сентября 2015. Архивировано 1 октября 2015 года.
  14. 1 2 Langemak, Jon Kubernetes 101 – Networking. Das Blinken Lichten (11 февраля 2015). Проверено 2 ноября 2015. Архивировано 25 октября 2015 года.
  15. Strachan, James Kubernetes for Developers. Medium (21 мая 2015). Проверено 2 ноября 2015. Архивировано 7 сентября 2015 года.
  16. Surana, Ramit. Containerizing Docker on Kubernetes, LinkedIn (16 сентября 2015). Проверено 2 ноября 2015.
  17. 1 2 Основы Kubernetes (рус.). Проверено 17 февраля 2018.
  18. Langemak, Jon Kubernetes 101 – External Access Into The Cluster. Das Blinken Lichten (15 февраля 2015). Проверено 2 ноября 2015. Архивировано 26 октября 2015 года.
  19. 1 2 Overview of a Replication Controller. Documentation. CoreOS. Проверено 2 ноября 2015. Архивировано 22 сентября 2015 года.
  20. Intro: Docker and Kubernetes training - Day 2. Red Hat (20 октября 2015). Проверено 2 ноября 2015. Архивировано 29 октября 2015 года.
  21. Sanders, Jake Kubernetes: Exciting Experimental Features. Livewyer (2 октября 2015). Проверено 2 ноября 2015. Архивировано 20 октября 2015 года.
  22. Introducing Operators: Putting Operational Knowledge into Software. На сайте CoreOs
  23. 1 2 Kubernetes Infrastructure. OpenShift Community Documentation. OpenShift. Проверено 24 сентября 2015. Архивировано 6 июля 2015 года.
  24. 1 2 Marhubi, Kamal Kubernetes from the ground up: API server. kamalmarhubi.com (26 сентября 2015). Архивировано 29 октября 2015 года.
  25. Как на самом деле работает планировщик Kubernetes? (рус.). Проверено 14 февраля 2018.
  26. The Three Pillars of Kubernetes Container Orchestration - Rancher Labs. rancher.com (18 May 2017). Проверено 22 мая 2017. Архивировано 24 июня 2017 года.
  27. Overview of kubectl (англ.). Kubernetes. Проверено 17 февраля 2018.
  28. Marhubi, Kamal What [.. is a Kubelet?]. kamalmarhubi.com (27 августа 2015). Архивировано 13 ноября 2015 года.
  29. Deploy and Manage Kubernetes Clusters | Rancher Labs (англ.), Rancher Labs. Архивировано 16 апреля 2017 года.
  30. Software, Pivotal Pivotal Container Service (PKS) (EN). pivotal.io (17 января 2017).
  31. OpenShift v3 Platform Combines Docker, Kubernetes. blog.openshift.com. Проверено 14 августа 2014. Архивировано 6 июля 2015 года.
  32. Why Red Hat Chose Kubernetes for OpenShift. blog.openshift.com. Проверено 7 ноября 2016. Архивировано 21 февраля 2017 года.
  33. IBM Launches Bluemix Container Service with Kubernetes to Fuel Highly Secure and Rapid Development of Cognitive Apps (англ.). ibm.com.
  34. IBM chases Google, Microsoft with Kubernetes in the cloud (англ.). infoworld.com.
  35. IBM Announces IBM Cloud Private (англ.). ibm.com. Архивировано 1 ноября 2017 года.
  36. IBM Cloud Private brings cloud native computing to your data center (англ.). techcrunch.com. Архивировано 3 ноября 2017 года.
  37. IBM Cloud Private launches with bet open architecture wins hybrid cloud scrum (англ.). zdnet.com. Архивировано 3 ноября 2017 года.
  38. Oracle Joins Cloud Native Computing Foundation as Platinum Member - Cloud Native Computing Foundation (англ.), Cloud Native Computing Foundation (13 сентября 2017).
  39. Зачем нужен Kubernetes и почему он больше, чем PaaS? (рус.). Проверено 17 февраля 2018.