Kubernetes v1.16
документация больше не поддерживается. Версия, которую вы сейчас просматриваете, является статической. Актуальную документацию вы можете найти
последняя версия.
Kubernetes - это портативная расширяемая платформа с открытым исходным кодом для управления контейнерными рабочими нагрузками и службами, которая облегчает декларативную настройку и автоматизацию. У платформы есть большая, быстро растущая экосистема. Kubernetes службы, поддержка и инструменты широко доступны.
Название Kubernetes происходит от греческого, что означает рулевой или штурман. Google открыл проект Kubernetes в 2014 году. Kubernetes базируется на десятилетнем опыте Google, при работе с масштабными рабочими нагрузками, в сочетании с лучшими в своем классе идеями и практиками сообщества.
История
Давайте вернемся назад и посмотрим, почему Kubernetes так полезен.
Традиционная эра развертывания:
Ранее организации запускали приложения на физических серверах. Не было никакого способа определить границы ресурсов для приложений на физическом сервере, и это вызвало проблемы с распределением ресурсов. Например, если несколько приложений выполняются на физическом сервере, могут быть случаи, когда одно приложение будет занимать большую часть ресурсов, и в результате другие приложения будут работать хуже. Решением для этого было бы запустить каждое приложение на другом физическом сервере. Но это не масштабировалось, поскольку ресурсы использовались непрактично, и организациям было дорого поддерживать множество физических серверов.
Эра виртуального развертывания: В качестве решения была введена виртуализация. Это позволило запускать несколько виртуальных машин (ВМ) на одном физическом сервере ЦП. Виртуализация позволяет изолировать приложения между виртуальными машинами и обеспечивает уровень безопасности, поскольку информация одного приложения не может быть свободно доступна другому приложению.
Виртуализация позволяет лучше использовать ресурсы на физическом сервере и обеспечивает лучшую масштабируемость, поскольку приложение можно легко добавить или обновить, также снижаются затраты на оборудование и многое другое. С помощью виртуализации вы можете представить набор физических ресурсов в виде кластера одноразовых виртуальных машин.
Каждая виртуальная машина представляет собой полноценную машину, на которой выполняются все компоненты, включая собственную операционную систему, поверх виртуализированного оборудования.
Эра контейнеров: Контейнеры похожи на виртуальные машины, но у них есть свойства изоляции для совместного использования операционной системы (ОС) между приложениями. Поэтому контейнеры считаются легкими. Подобно виртуальной машине, контейнер имеет свою собственную файловую систему, процессор, память, пространство процесса и многое другое. Поскольку они не связаны с базовой инфраструктурой, они переносимы между облаками и дистрибутивами ОС.
Контейнеры стали популярными, потому что они предоставляют дополнительные преимущества, например:
Гибкое создание и развертывание приложений: простота и эффективность создания образа контейнера по сравнению с использованием образа виртуальной машины.
Непрерывная разработка, интеграция и развертывание: обеспечивает надежную и частую сборку и развертывание образа контейнера с быстрым и простым откатом (благодаря неизменности образа).
Разделение задач между Dev и Ops: создавайте образы контейнеров приложений во время сборки / релиза, а не во время развертывания, тем самым отделяя приложения от инфраструктуры.
Наблюдаемость охватывает не только информацию и метрики на уровне ОС, но также информацию о работоспособности приложений и другие сигналы.
Идентичная окружающая среда при разработке, тестировании и релизе: на ноутбуке работает так же, как и в облаке.
Переносимость облачных и операционных систем: работает на Ubuntu, RHEL, CoreOS, on-prem, Google Kubernetes Engine и в любом другом месте.
Управление, ориентированное на приложения: повышает уровень абстракции от запуска ОС на виртуальном оборудовании до запуска приложения в ОС с использованием логических ресурсов.
Слабосвязанные, распределенные, гибкие, выделенные микроуслуги: приложения разбиты на более мелкие независимые части, которые можно динамически развертывать и управлять ими, а не монолитным стеком, работающим на одной большой специализированной машине.
Грамотное использование ресурсов: высокая эффективность и компактность.
Зачем вам Kubernetes и что он может сделать?
Контейнеры - хороший способ связать и запустить ваши приложения. В производственной среде вам необходимо управлять контейнерами, которые запускают приложения, и обеспечивать отсутствие простоев. Например, если контейнер выходит из строя, необходимо запустить другой контейнер. Не было бы проще, если бы такое поведение обрабатывалось системой?
Вот тут Kubernetes приходит на помощь! Kubernetes предоставляет вам платформу для гибкой работы распределенных систем. Он заботится о масштабировании и обработке ошибок для вашего приложения, предоставляет шаблоны развертывания и многое другое. Например, Kubernetes может легко управлять canary-развертыванием для вашей системы.
Kubernetes предоставляет вам:
Мониторинг сервисов и распределение нагрузки Kubernetes может обноружить контейнер, используя DNS-имя или собственный IP-адрес. Если трафик в контейнере высокий, Kubernetes может сбалансировать нагрузку и распределить сетевой трафик, чтобы развертывание было стабильным.
Орекстрация хранилища Kubernetes позволяет вам автоматически смонтировать систему хранения по вашему выбору, такую как локальное хранилище, провайдеры общедоступного облака и многое другое.
Автоматическое развертывание и откаты Вы можете описать желаемое состояние для ваших развернутых контейнеров, используя Kubernetes, и это может изменить фактическое состояние на желаемое состояние с высокой скоростью. Например, вы можете автоматизировать Kubernetes для создания новых контейнеров для вашего развертывания, удаления существующих контейнеров и распределения всех их ресурсов в новый контейнер.
Автоматическое распределение нагрузки Вы предоставляете Kubernetes кластерных нод, который он может использовать для запуска контейнерных задач. Вы сообщаете Kubernetes, сколько ЦП и памяти (ОЗУ) требуется каждому контейнеру. Kubernetes может разместить контейнеры на ваших нодах, чтобы наилучшим образом использовать ваши ресурсы.
Самоконтроль Kubernetes перезапускает контейнеры, которые дают сбой, заменяет контейнеры, убивает контейнеры, которые не отвечают на ваши проверки работоспособности, определенные пользователем, и не показывает их клиентам, пока они не будут готовы к обслуживанию.
Управление конфиденциальной информацией и конфигурацией Kubernetes позволяет хранить и управлять конфиденциальной информацией, такой как пароли, токены OAuth и ключи ssh. Вы можете развертывать и обновлять конфиденциальную информацию и конфигурацию приложения, не перестраивая образы контейнеров и не раскрывая конфиденциальную информацию в конфигурации стека.
Чем Kubernetes не является
Kubernetes - это не традиционная комплексная система PaaS (платформа как услуга). Поскольку Kubernetes работает на уровне контейнеров, а не на уровне оборудования, он предоставляет некоторые общеприменимые функции, общие для PaaS, такие как развертывание, масштабирование, балансировка нагрузки, ведение журналов и мониторинг. Тем не менее, Kubernetes не является монолитным, и эти решения по умолчанию являются дополнительными и подключаемыми. Kubernetes предоставляет строительные блоки для построения платформы, но сохраняет выбор за пользователем и гибкость там, где это важно.
Kubernetes:
Не ограничивает типы поддерживаемых приложений. Kubernetes стремится поддерживать чрезвычайно разнообразные рабочие нагрузки, включая рабочие нагрузки без сохранения состояния и обработки данных. Если приложение может работать в контейнере, оно должно отлично работать в Kubernetes.
Не развертывает исходный код и не создает ваше приложение. Рабочие процессы непрерывной интеграции, доставки и развертывания (CI / CD) определяются культурой и предпочтениями организации, а также техническими требованиями.
Не предоставляет сервисы уровня приложения, такие как промежуточное программное обеспечение (например, очереди сообщений), платформы обработки данных (например, Spark), базы данных (например, mysql), кэши или кластерные системы хранения (например, Ceph), как встроенные сервисы. Такие компоненты могут работать в Kubernetes и / или могут быть доступны для приложений, работающих в Kubernetes, через переносные механизмы, такие как Open Service Broker.
Не требует ведения журнала, мониторинга или оповещения. Он обеспечивает некоторые интеграции в качестве доказательства концепции и механизмы для сбора и экспорта метрик.
Не предоставляет и не требует настройки языка / системы (например, jsonnet). Он предоставляет декларативный API, который может быть нацелен на произвольные формы декларативных спецификаций.
Не предоставляет и не принимает никаких комплексных систем конфигурации, технического обслуживания, управления или самовосстановления.
Кроме того, Kubernetes - это не просто система оркестровки. Фактически это устраняет необходимость в оркестровке. Техническое определение оркестровки - это выполнение определенного рабочего процесса: сначала делайте A, затем B, затем C. В отличие от этого, Kubernetes содержит набор независимых, компонуемых процессов управления, которые непрерывно приводят текущее состояние к предоставленному желаемому состоянию. Неважно, как добраться от А до С. Централизованный контроль также не требуется. В результате получается система, которая более проста в использовании и является более мощной, надежной, устойчивой и расширяемой.