October 26, 2018

Введение в Kubernetes

Что такое Kubernetes?

Kubernetes происходит от греческого слова κυβερνήτης:, что означает «рулевой» или «капитан корабля». Зная эту аналогию, мы можем сказать, что Kubernetes это менеджер по управлению контейнерами. Kubernetes также называют k8s, так как между k и s находится 8 символов.

Kubernetes была написана под вдохновлением от Google Borg. Это проект компании Google с открытым исходным кодом, написанный на языке Go, и под лицензией Apache 2.0. Kubernetes был разработан Google для сервиса Cloud Native Computing Foundation (CNCF).

Сама Google говорит о Borg, следующее:

Borg — это кластерный менеджер, который выполняет сотни тысяч заданий из многих тысяч различных приложений в нескольких кластерах с десятками тысяч виртуальных машин в каждом.

На протяжении более десяти лет Borg был секретом Google для запуска контейнеров в продакшн. Любые услуги, которые мы используем от Google, такие как Gmail, Drive, и т. д. все они обслуживаются с помощью Borg.

Некоторые из первоначальных разработчиков Kubernetes были сотрудниками Google, которые использовали Borg и разработали его в прошлом. Они вложили свои ценные знания и опыт в проектирование Kubernetes. Вот некоторые особенности/объектов Kubernetes:

  • API servers
  • Pods
  • IP-per-Pod
  • Services
  • Labels

Особенности Kubernetes

Kubernetes предлагает очень богатый набор функций для оркестрации контейнеров. Некоторые из них:

  • Automatic binpacking
  • Kubernetes автоматически планирует контейнеров на основе использования ресурсов и ограничений, без ущерба для доступности.
  • Self-Healing
  • Kubernetes автоматически заменяет и меняет контейнеры, если есть поврежденные. Он также “убивает” и перезапускает контейнеры, которые не отвечают на проверки работоспособности, на основе существующих правил / политик.
  • Horizontal scaling
  • Kubernetes может автоматически масштабировать приложения на основе использования ресурсов, таких как процессор и память. В некоторых случаях он также поддерживает динамическое масштабирование, основанное на показателях клиентов.
  • Service discovery and Load balancing
  • Kubernetes группирует несколько контейнеров и ссылается на них через систему доменных имен (DNS). Этот DNS также называется службой Kubernetes. Kubernetes может автоматически открывать эти службы и делать балансировку между контейнерами данной службы.
  • Automated rollouts and rollbacks
  • Kubernetes может развертывать и откатывать новые версии / конфигурации приложения без каких-либо простоев.
  • Secrets and configuration management
  • Kubernetes может управлять секретами и конфигурационными данными для приложения без повторной сборки соответствующих изображений. С секретами мы можем передавать конфиденциальную информацию в наше приложение, не подвергая его конфигурации стека, например, на GitHub.
  • Storage orchestration
  • С Kubernetes и его плагинами мы можем автоматически монтировать локальные, внешние и хранилища в контейнеры бесшовно, основываясь на программном хранилище (SDS).
  • Batch execution
  • Помимо продолжительных рабочих заданий, Kubernetes также поддерживает пакетное выполнение.

Зачем использовать Kubernetes?

Мы только что рассмотрели некоторые из полностью поддерживаемых функций Kubernetes. Следует также отметить, что Kubernetes очень переносим и расширяем. Kubernetes может быть развернут в любой среде, будь то виртуальные машины, “голый металл” или общедоступные/частные/гибридные / мульти-облачные установки. Кроме того, Kubernetes имеет модульную и подключаемую архитектуру. Мы можем написать пользовательские API или плагины для расширения его функциональных возможностей.

Для успешного проекта с открытым исходным кодом, сообщество так же важно, как и большой код. Kubernetes имеет очень процветающее сообщество по всему миру. Она насчитывает более 1600 участников, которые со временем сделали более 62 000 коммитов. Есть встреча группы в разных городах, которые регулярно встречаются, чтобы обсудить Kubernetes и его экосистемы. Существуют специальные группы интересов (Sig), которые сосредоточены на особых интересах, таких как масштабирование, голый металл, сети и т.д. Мы будем говорить о них больше в нашей последней главе, Kubernetes общин.