• DevOps
  • Защита информации
  • ИТ-поддержка
  • Kubernetes - функции и компоненты

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

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

    Сравнение виртуальных машин и контейнеров

    Рисунок 1 - Сравнение виртуальных машин и контейнеров

    Kubernetes (K8s) - это открытое программное обеспечение для автоматизации развертывания, масштабирования и управления контейнеризированными приложениями. Это фреймворк для гибкой работы распределенных систем. Он занимается масштабированием и обработкой ошибок в приложении, предоставляет шаблоны развертывания и многое другое.

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

    Основные принципы Kubernetes:

    • Надежность

      Кластер Kubernetes должен соответствовать последним рекомендациям по безопасности.

    • Простота в использовании

      Кластер Kubernetes должен управляться с помощью нескольких простых команд.

    Основные возможности Kubernetes:

    • Мониторинг сервисов и распределение нагрузки

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

    • Оркестрация хранилища

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

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

      Используя Kubernetes, можно менять фактическое состояние развернутых контейнеров, а также описывать желаемое состояние новых контейнеров.

    • Автоматическое распределение нагрузки

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

    • Самоконтроль

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

    • Управление конфиденциальной информацией и конфигурацией

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

    Работающее развертывание Kubernetes называется кластером. Можно отобразить Kubernetes как две части: плоскость управления (Control plane) и вычислительные машины или узлы (nodes). Каждый узел представляет собой собственную среду Linux и может быть физической или виртуальной машиной. На каждом узле работают модули, состоящие из контейнеров.

    Архитектура:

    Архитектура Kubernetes

    Рисунок 2 - Архитектура Kubernetes

    Control plane

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

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

    kube-apiserver

    Сервер API — компонент Kubernetes панели управления, который представляет API Kubernetes.. Основной реализацией API-сервера Kubernetes является kube-apiserver.

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

    kube-scheduler

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

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

    kube-controller-manager

    Компонент Control Plane запускает процессы контроллера.

    Каждый контроллер в свою очередь представляет собой отдельный процесс.

    Эти контроллеры включают:

    • Контроллер узла (Node Controller) - уведомляет и реагирует на сбои узла.
    • Контроллер репликации (Replication Controller) - поддерживает правильное количество Pods для каждого объекта контроллера репликации в системе.
    • Контроллер конечных точек (Endpoints Controller) - связывает сервисы (Services) и поды (Pods).
    • Контроллеры учетных записей и токенов (Account & Token Controllers) - создают стандартные учетные записи и токены доступа API для новых пространств имен.

    cloud-controller-manager

    Запускает контроллеры, которые взаимодействуют с основными облачными провайдерами.

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

    Следующие контроллеры зависят от облачных провайдеров:

    • Контроллер узла (Node Controller) - проверяет облачный провайдер, чтобы определить, был ли удален узел в облаке после того, как он перестал работать.
    • Контроллер маршрутов (Route Controller) - настраивает маршруты в основной инфраструктуре облака.
    • Контроллер сервисов (Service Controller) - создает, обновляет и удаляет балансировщики нагрузки облачного провайдера.
    • Контроллер тома (Volume Controller) - создает, присоединяет и монтирует тома, а также взаимодействует с облачным провайдером для оркестрации томов.

    etcd

    Данные конфигурации и информация о состоянии кластера хранятся в etcd - базе данных хранилища ключей.

    Что происходит в ноде Kubernetes?

    Nodes

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

    Pods

    Pod - это самый маленький и простой модуль в объектной модели Kubernetes. Он представляет собой единственный экземпляр приложения. Каждый модуль состоит из контейнера или ряда контейнеров, а также параметров, определяющих их работу. Pods могут быть подключены к постоянному хранилищу для запуска приложений с отслеживанием состояния.

    kubelet

    Каждый вычислительный узел содержит kubelet - агент который следит за тем, чтобы контейнеры были запущены в Pod.

    kube-proxy

    Каждый вычислительный узел также содержит kube-proxy, сетевой прокси для упрощения работы сетевых служб Kubernetes.

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

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

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

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

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

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

    Не нашли ответа на свой вопрос?
    Содержание