Поиск по сайту:

Подробное объяснение функций Kubernetes

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

1. Автоматическая упаковка контейнеров.

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

Kubernetes предлагает управление ресурсами и может автоматически указывать, как каждый контейнер в модуле потребляет такие ресурсы, как ЦП и ОЗУ.

Автоматическая упаковка контейнеров

2. Обнаружение сервисов и балансировка нагрузки

Обнаружение сервисов и балансировка нагрузки предоставляются как сервисы в Kubernetes. Службы подключают модули к сети согласованным образом во всех кластерах. Процесс определения способа подключения к службе известен как обнаружение службы.

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

Каждому POD будет назначен IP-адрес и единое DNS-имя для службы (набор POD). Благодаря этой архитектуре Kubernetes будет иметь четко определенный контроль над сетью и связью между POD, а также возможность балансировки нагрузки.

Балансировка нагрузки и обнаружение сервисов

Размещение балансировщика нагрузки (обратного прокси-сервера, такого как Nginx или HAProxy) перед набором экземпляров, составляющих один сервис, является распространенным методом решения проблемы обнаружения сервиса.

Адрес балансировщика нагрузки (DNS-имя или, реже, IP-адрес) представляет собой значительно более надежный фрагмент данных. Он может предоставляться клиентам на этапах разработки или настройки и может быть постоянным в течение всего срока службы одного клиента.

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

3. Оркестровка хранилища

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

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

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

  • Интерфейс хранения контейнеров (CSI): это стандарт, который позволяет всем оркестраторам контейнеров единообразным образом подключаться к системам хранения, таким как Ondat. Поставщики хранилищ должны написать свой уровень интеграции непосредственно в исходный код Kubernetes до выпуска CSI. В результате обновления были трудными и отнимали много времени, поскольку любые дефекты могли привести к сбою Kubernetes.
  • Класс хранилища. Администраторы могут заранее определить типы хранилища, которые пользователи Kubernetes смогут предоставлять и подключать к своим приложениям с помощью класса хранилища Kubernetes.
  • Постоянный том (PV). Постоянный том — это экземпляр виртуального хранилища, добавленный в кластер в качестве тома. PV может ссылаться на физическое оборудование хранения или программно-определяемое хранилище, такое как Ondat.
  • Заявка на постоянный том (PVC): это запрос на предоставление хранилища определенного типа и конфигурации.

4. Самоисцеление

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

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

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

  • Если контейнер выходит из строя, Kubernetes перезапускает контейнер.
  • Если какой-либо узел выходит из строя, Kubernetes перепланирует контейнеры на других узлах.
  • Если контейнер не отвечает клиенту/пользователю, Kubernetes убивает контейнер.

Операционные уровни приложения

5. Автоматическое развертывание и откат

5.1. Посадочная дистанция

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

Благодаря постепенному обновлению экземпляров Pods новыми, непрерывные обновления позволяют обновлять развертывания без простоев. Новые модули будут запланированы на узлах, на которых есть доступные ресурсы.

Постоянное обновление Kubernetes

  1. Клиент обновляется до новой версии POD, скажем, V2.
  2. В наборе реплик допускается использование только одной и той же версии POD. Итак, Kubernetes создаст набор реплик 2, куда будет добавлена новая версия POD V2, и будет обеспечена проверка работоспособности. Как только POD V2 заработает нормально, он заменит один из POD V1.
  3. Он будет действовать по тому же принципу и заменит все POD V1 на POD V2.

5.2. Откат

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

На изображении выше POD V1 сохраняется в истории, поэтому вы можете выполнить откат, если при развертывании POD V2 возникнут какие-либо проблемы.

6. Секретные и конфиг-карты

6.1. Секрет

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

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

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

6.2. Карта конфигурации

ConfigMap — это хранилище пар «ключ-значение» и объект API для хранения неконфиденциальных данных. ConfigMaps могут использоваться модулями в качестве переменных среды, параметров командной строки или файлов конфигурации тома.

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

Настройка ConfigMaps разделена на два этапа. Первым шагом является создание ConfigMaps, а затем внедрение их в модуль.

Секрет Kubernetes и ConfigMap

7. Горизонтальное масштабирование

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

Horizontal Pod Autoscaler реализован как контроллер и ресурс API в Kubernetes. Поведение контроллера определяется ресурсом.

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

Горизонтальное масштабирование

8. Заключение

В этой статье мы рассмотрели концептуальное понимание ключевых особенностей Kubernetes. В следующей статье мы подробно рассмотрим другие основные концепции Kubernetes, такие как ETCD, Kube Controller Manager, Kube Scheduler и т. д.

Читать далее:

  • Как установить Kubernetes с помощью Minikube в CentOS Linux
  • Установить кластер Kubernetes с помощью Kubeadm в RHEL, CentOS, AlmaLinux, Rocky Linux
  • Как создавать модули Kubernetes и управлять ими в Linux

Ресурсы:

  • https://kubernetes.io/docs/tutorials/kubernetes-basics/
  • https://kubernetes.io/docs/concepts/

Статьи по данной тематике