Давайте вернемся во времени и узнаем, благодаря чему Kubernetes стал таким полезным.

Что такое Kubernetes? 

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

 Название Kubernetes происходит с греческого и означает рулевой или пилот. Google открыл доступ к исходному коду проекта Kubernetes в 2014 году. Kubernetes построен на базе пятнадцатилетнего опыта, который Google получил, оперируя масштабными рабочими нагрузками в сочетании с лучшими в своем классе идеями и практиками, которые может предложить сообщество. 

Оглядываясь на первопричины 

Давайте вернемся назад во времени и узнаем, благодаря чему Kubernetes стал таким полезным. 

Эра традиционного развертывания: В начале организации запускали приложения на физических серверах. Поскольку таким образом не было возможности задать ограничения использования ресурсов, это вызывало проблемы выделения и распределения ресурсов на физических серверах. Например: если много приложений было запущено на физическом сервере, могли случаться случаи, когда одно приложение забирало себе больше всего ресурсов, в результате чего другие программы просто не справлялись с обязанностями. Решением может быть запуск каждого приложения на отдельном физическом сервере. Но такой подход плохо масштабируется, поскольку ресурсы не полностью используются; вдобавок, это дорого, поскольку организациям нужно заботиться о многих физических серверах. 

 Эра виртуализированного развертывания: В качестве решения — была представлена виртуализация. Она позволяет запускать многочисленные виртуальные машины (Virtual Machines или VMs) на одном физическом ЦПУ сервера. Виртуализация позволила приложениям быть изолированными в пределах виртуальных машин и обеспечивала безопасность, поскольку информация приложения на одной VM не была доступна приложению на другой VM. 

Виртуализация обеспечивает лучшее использование ресурсов на физическом сервере и лучшую масштабируемость, поскольку позволяет легко добавлять и обновлять приложения, уменьшает затраты на физическое оборудование и тому подобное. С виртуализацией вы можете представить ресурсы в виде одноразовых виртуальных машин. 

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

Эра развертывания контейнеров: Контейнеры похожи на VM, но имеют упрощенный вариант изоляции и используют общую операционную систему для всех приложений. Именно поэтому контейнеры считаются «легкими», по сравнению с виртуалками. Подобно VM, контейнер имеет собственную файловую систему, ЦПУ, память, пространство процессов и т.д. Поскольку контейнеры освобождены от подчиненной инфраструктуры, их можно легко перемещать между облачными провайдерами или дистрибутивами операционных систем. 

Контейнеры стали популярными, потому что предоставляли дополнительные преимущества, такие как: 

  • Создание и развертывание приложений по методологии Agile: упрощенное и более эффективное создание образов контейнеров по сравнению с использованием образов виртуальных машин. 
  • Непрерывная разработка, интеграция и развертывание: обеспечение надежных и непрерывных сборок образов контейнеров, их быстрое развертывание и легкие откаты (за счет неизменности образов). 
  • Распределение ответственности команд разработки и эксплуатации: создание образов контейнеров приложений во время сборки/релиза в противовес времени развертывания, и как следствие, высвобождение приложений из инфраструктуры. 
  • Наблюдение не только за информацией и метриками на уровне операционной системы, но и за состоянием приложения и другими сигналами. 
  • Однородность среды для разработки, тестирования и рабочей нагрузки: запускается так же как на рабочем компьютере, так и у облачного провайдера. 
  • ОС и облачная кроссплатформенность: запускается на Ubuntu, RHEL, CoreOS, в собственном дата-центре, в Google Kubernetes Engine и вообще где угодно. 
  • Управление ориентированное на приложения: повышение уровня абстракции от запуска операционной системы в виртуальном аппаратном обеспечении до запуска приложения в операционной системе, используя логические ресурсы. 
  • Неплотно связанные, распределенные, эластичные, высвобожденные микросервисы: приложения разбиваются на меньшие, независимые части для динамического развертывания и управления, в отличие от монолитной архитектуры, работающей на одной большой выделенной машине. 
  • Изоляция ресурсов: предсказуемая производительность приложения. 
  • Использование ресурсов: высокая эффективность и плотность. 

Почему вам нужен Kubernetes и что он может делать 

Контейнеры — это отличный способ упаковать и запустить ваши приложения. В продуктивной среде вам нужно управлять контейнерами, в которых работают приложения, и следить за тем, чтобы не было простоев. Например, если один контейнер прекращает работу, вместо него должен быть запущен другой. Не легче было бы, если бы этим управляла сама система? 

Вот где Kubernetes приходит на помощь! Kubernetes предоставляет вам каркас для гибкого запуска распределенных систем. Он занимается масштабированием и аварийным восстановлением вашего приложения, предлагает шаблоны развертывания и т. Д. Например, Kubernetes позволяет легко создавать развертывания по стратегии canary в вашей системе. 

Kubernetes предоставляет вам: 

 Обнаружение сервисов и балансировка нагрузки Kubernetes может предоставлять доступ к контейнеру, используя DNS-имя или его собственный IP-адрес. Если контейнер испытывает слишком большую сетевую нагрузку, Kubernetes способен сбалансировать и распределить ее таким образом, чтобы качество обслуживания оставалось стабильным. 

Оркестрация хранилища информации Kubernetes позволяет вам автоматически монтировать системы хранения информации на ваш выбор: локальные хранилища, решения от облачных провайдеров и т. Д. 

Автоматическое развертывание и откат С помощью Kubernetes вы можете описать желаемое состояние развертываемых контейнеров, и он будет контролировать выполнение этого состояния в регулируемом режиме. Например, вы можете автоматизировать в Kubernetes процессы создания новых контейнеров для развертывания, удаления существующих контейнеров и передачи их ресурсов во вновь созданные контейнеры. 

Автоматическое размещение задач Вы предоставляете Kubernetes кластер для запуска контейнеризированных задач и указываете, сколько ресурсов ЦПУ и памяти (RAM) необходимо для работы каждого контейнера. Kubernetes распределяет контейнеры по узлам кластера для максимально эффективного использования ресурсов. 

Самоисцеление Kubernetes перезапускает отказавшие контейнеры; заменяет контейнеры; останавливает работу контейнеров, не отвечающих на заданную пользователем проверку состояния, и не сообщает о них клиентам, пока эти контейнеры не будут в состоянии рабочей готовности. 

Управление секретами и конфигурацией Kubernetes позволяет вам хранить и управлять чувствительной информацией, такой как пароли, токены OAuth и ключи SSH. Вы можете развертывать и обновлять секреты и конфигурацию без повторной сборки образов ваших контейнеров, не раскрывая секреты в конфигурации стека. 

Требуется консультация