Рубрики
Uncategorized

Введение в Kubernetes

Задумывались ли вы, как такие компании, как Facebook, могут обслуживать заявки на миллиарды … Tagged with Kubernetes, DevOps.

Задумывались ли вы, как такие компании, как Facebook, могут обслуживать приложения для миллиардов пользователей, управлять всеми различными серверами приложений, обновлениями и многочисленными компонентами приложений? Ответ заключается в распределенных вычислениях. Распределенная система-это система с несколькими компонентами, которая общается и координирует действия друг с другом, чтобы отображаться в качестве единого приложения к конечному пользователю. В этой статье я буду обсуждать один инструмент, который поможет достичь распределенных вычислений. В моей предыдущей статье я объяснил Docker и о том, как он помогает в доставке программного обеспечения в пакетах, называемых контейнерами, тем самым создавая надежные веб -приложения, которые легкие, легко запустить и масштабируйте со скоростью. Вы можете проверить это здесь, если вы не читали его, поскольку он предоставляет основу для Kubernetes, о котором я буду обсуждать здесь.

Почему kubernetes

Чтобы понять, как работает Kubernetes, лучше всего мы понимаем проблему, чтобы решить. Давайте предположим, что вы создали потрясающее веб -приложение для знакомств. Это веб -приложение было упаковано в несколько контейнеров, каждый из которых обрабатывает разные части приложения. Например, один контейнер для логики аутентификации. Другой для рекомендации пользователя и т. Д. Представьте, что у вас есть несколько тысяч этих контейнеров, и вам нужно развернуть их на нескольких серверах. Поскольку приложение для знакомств получает больше пользователей, вам также нужно подумать о масштабировании. то есть добавление новых серверов для обработки дополнительной нагрузки. Теперь, когда мы начнем управлять миллионами пользователей в секунду, вы согласитесь со мной, что это всего лишь количество времени, прежде чем вся система станет сложной и трудной для управления. Эта проблема была тем, что было сделано Kubernetes для решения. Он родился в результате опыта Google, работающих на производственных нагрузках.

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

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

АППАРАТНОЕ ОБЕСПЕЧЕНИЕ

УЗЕЛ

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

Кластер

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

Фото Ивана Фиораванти на Hackernoon

Постоянные объемы

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

ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ

Контейнеры

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

Стручки

Kubernetes не запускает контейнеры напрямую, а вместо этого упаковывает несколько контейнеров в структуру более высокого уровня, называемую POD. Контейнеры в одной и той же сети POD Share и ресурсы могут легко общаться друг с другом. Единица развертывания Kubernetes — это стручок. Давайте предположим, что у вас есть несколько контейнеров для веб -приложения сайта знакомств, которое вы только что создали. Один контейнер имеет веб -приложение с вашей логикой приложений. У другого контейнера есть рекомендация пользователя WebAPI. Вы можете упаковать эти два контейнера в капсулу. И они будут служить одному развертыванию. Если ваше приложение для знакомств набирает обороты, и вы хотите масштабировать его до большего количества пользователей, вы можете просто повторить этот POD и развернуть его в кластере по мере необходимости. Стручки могут содержать несколько контейнеров, но ограничивать себя разумной суммой в качестве контейнеров в шкале стручков вместе, и это может привести к потраченным впустую ресурсам при масштабировании контейнеров, которые не нужно масштабироваться.

Развертывание

Стручки обычно управляются слоем абстракции, называемого развертыванием. Развертывание запускает несколько копий вашего приложения (POD) и автоматически заменяет любые экземпляры, которые не получают неудачу или не отвечают. Развертывание похоже на менеджера для стручков, оно автоматически раскрутит количество запрашиваемых стручков, оно будет следить за стручками и воссоздает стручки в случае сбоя. Таким образом, развертывания помогают гарантировать, что один или несколько случаев вашего приложения доступны для обслуживания запросов пользователей.

УСЛУГА

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

Внешний трафик

Таким образом, у вас есть все услуги, работающие в вашем кластере, но теперь вопрос в том, как получить внешний трафик в свой кластер? Есть несколько способов сделать это, но я выставлю один контроллер Ingress.

Контроллер входа

Ingress — это не сервис, а объект API, который управляет внешним доступом к службам в кластере. Он действует как единственная точка входа в ваш кластер, который направляет запрос на разные службы. Контроллер Ingress является компонентом, ответственным за выполнение этих запросов. Чтобы разоблачить вход, лучшее решение, готовое к производству,-это использование балансировщика нагрузки.

Теперь давайте глубже погрузимся в архитектуру Kubernetes. Как Kubernetes автоматически управляет всеми узлами, кластерами, услугами и стручками?

Фото от JEF Spaleta Sensu Blog

Плоскость управления Kubernetes

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

Компоненты мастер -сервера

  1. Etcd хранилище: Это хранилище данных с ключами с открытым исходным кодом, разработанный командой Coreos, и может быть доступен всеми узлами в кластере. Kubernetes использует «etcd» для хранения данных конфигурации кластера для представления общего состояния кластера в любое время. Он хранит текущее состояние системы и желаемое состояние. Если Kubernetes находит различия в ETCD между текущими и желаемыми состояниями, он выполняет необходимые корректировки.

  2. Kube API-Server: API-сервер-это центральная организация управления, которая получает запросы REST для модификаций услуг, служащих в качестве интерфейса для управления кластером. Этот компонент обнажает через API плоскость управления Kubernetes. Вот как Kubernetes CLI или «kubectl» взаимодействуют с кластером. Все остальные компоненты кластера делают запросы на сервер API, и он обновляет информацию о ETCD.

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

  4. Менеджер контроллера: Это фоновый процесс, который наблюдает за общим состоянием кластера через Apierver и вносит изменения, пытающиеся переместить текущее состояние в желаемое состояние. Когда в службе произойдут какие -либо изменения, контроллер замечает изменения и начинает работать над новым желаемым состоянием.

Компоненты рабочих узлов

  1. Кубелет Основной точкой контакта для каждого узла с группой кластеров является небольшая служба под названием Kubelet. Kubelet гарантирует, что все контейнеры работают и здоровы. Эта служба отвечает за передачу информации в службы плоскости управления и из -за взаимодействия с хранилищем ETCD для чтения деталей конфигурации или записи новых значений. Работа получена в виде манифеста, который определяет рабочую нагрузку и эксплуатационные параметры.

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

  3. Время выполнения контейнера Время выполнения контейнера является компонентом, который отвечает за запуск контейнеров, наиболее распространенным выбором времени является Docker.

Заворачивается …..

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

Плона управления Kubernetes управляет стручками, назначающими их различным узлам в кластере и автоматически гарантируя, что желаемое состояние развертывания сохраняется. Если приложение приобретает больше пользователей, эти развертывания POD могут быть легко воспроизведены и масштабируются соответствующим образом с большим количеством узлов в кластер. Разработчик может управлять всеми этими процессами, общаясь с плоскостью управления, используя сервер Kube API с командами Kubectl. Добро пожаловать в мир Kubernetes!

Kubernetes — это не просто новый синтаксис — это совершенно новый способ мышления о распределенных вычислениях.

Для большего количества подобного контента, обязательно следуйте за мной здесь, на Dev и Twitter (@Elegberundaniel).

Сноски

  1. Kubernetes 101: Стручки, узлы, контейнеры и кластеры
  2. Kubernetes-101
  3. Введение в Kubernetes
  4. Как работает Kubernetes
  5. Глупые простые Кубернеты

Следуйте за мной здесь и через мои социальные сети, чтобы узнать больше о подобном контенте Twitter LinkedIn

Оригинал: «https://dev.to/gbengelebs/an-introduction-to-kubernetes-5h05»