Что такое pods kubernetes

Kubernetes (k8s) Tutorial — pod, кластер, node, yaml, helm

Что такое pods kubernetes. Смотреть фото Что такое pods kubernetes. Смотреть картинку Что такое pods kubernetes. Картинка про Что такое pods kubernetes. Фото Что такое pods kubernetes

Что такое pods kubernetes. Смотреть фото Что такое pods kubernetes. Смотреть картинку Что такое pods kubernetes. Картинка про Что такое pods kubernetes. Фото Что такое pods kubernetes

Docker и Docker-Compose Tutorial (Контейнеры, install, run, image, daemon, etc.)

Краткое введение в терминологию и архитектуру — Kubernetes (k8s) Tutorial

Kubernetes (или K8S) — это платформа с открытым исходным кодом, которая запускает контейнерные приложения. Kubernetes стал стандартом в сфере devops для масштабного развертывания контейнерных приложений в частных, общедоступных и гибридных облачных средах.

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

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

Что такое pods kubernetes. Смотреть фото Что такое pods kubernetes. Смотреть картинку Что такое pods kubernetes. Картинка про Что такое pods kubernetes. Фото Что такое pods kubernetes

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

Что такое pods kubernetes. Смотреть фото Что такое pods kubernetes. Смотреть картинку Что такое pods kubernetes. Картинка про Что такое pods kubernetes. Фото Что такое pods kubernetes

Чтобы начать работать с Kubernetes, можно использовать Minikube. Minikube — это упрощённая реализация Kubernetes, которая создает виртуальную машину на вашем локальном компьютере и разворачивает простой кластер с одним узлом. Minikube доступен для Linux, macOS и Windows. В CLI-инструменте Minikube есть основные операции для инициализации кластера, включая запуск, завершение, просмотра состояния и удаления кластера.

Модель развертывания приложений

Что такое pods kubernetes. Смотреть фото Что такое pods kubernetes. Смотреть картинку Что такое pods kubernetes. Картинка про Что такое pods kubernetes. Фото Что такое pods kubernetes

На приведенном выше рисунке показана модель развертывания приложений высокого уровня в Kubernetes. Он использует ресурс ReplicaSet для оркестровки контейнеров.

ReplicaSet можно рассматривать как файл метаданных на основе YAML или JSON, который определяет образы контейнеров, порты, количество реплик, проверки работоспособности активации, проверки работоспособности, переменные среды, монтирование томов, правила безопасности и т.д.

Контейнеры всегда создаются в Kubernetes как группы, называемые подами (pod), которые являются Kubernetes metadata definition или resource. Каждый pod позволяет совместно использовать файловую систему, сетевые интерфейсы, пользователей операционной системы и т.д.

Основные термины, которые нужны для понимания Kubernetes

master — объект, ответственный за управление состоянием кластера. Он состоит из 3-х основных компонентов:

Kubernetes Helm

Helm — это менеджер пакетов для Kubernetes, аналог NPM или YARN. Однако это не только диспетчер пакетов, это еще и средство управления развертыванием Kubernetes. Для простоты Helm Chart можно сравнить с Docker Image.

Что такое pods kubernetes. Смотреть фото Что такое pods kubernetes. Смотреть картинку Что такое pods kubernetes. Картинка про Что такое pods kubernetes. Фото Что такое pods kubernetes

Helm chart— это просто набор файлов шаблонов YAML, организованных в определенную структуру каталогов.

Источник

Сети Kubernetes: поды

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

Что такое pods kubernetes. Смотреть фото Что такое pods kubernetes. Смотреть картинку Что такое pods kubernetes. Картинка про Что такое pods kubernetes. Фото Что такое pods kubernetes

Что такое pods kubernetes. Смотреть фото Что такое pods kubernetes. Смотреть картинку Что такое pods kubernetes. Картинка про Что такое pods kubernetes. Фото Что такое pods kubernetes

Контейнер Docker, запущенный на локальной машине

Что такое pods kubernetes. Смотреть фото Что такое pods kubernetes. Смотреть картинку Что такое pods kubernetes. Картинка про Что такое pods kubernetes. Фото Что такое pods kubernetes

Два контейнера Docker, запущенные на локальной машине

Всё это хорошо, но это не описывает пока то, что мы, в применении к подам Kubernetes, называем «разделяемым сетевым стеком». К счастью, пространства имён отличаются большой гибкостью. Docker может запустить контейнер, и, вместо того, чтобы создавать для него новый виртуальный сетевой интерфейс, сделать так, чтобы он использовал бы, совместно с другими контейнерами, существующий интерфейс. При таком подходе нам придётся изменить вышеприведённую схему так, как показано ниже.

Что такое pods kubernetes. Смотреть фото Что такое pods kubernetes. Смотреть картинку Что такое pods kubernetes. Картинка про Что такое pods kubernetes. Фото Что такое pods kubernetes

Контейнеры используют общий сетевой интерфейс

Что такое pods kubernetes. Смотреть фото Что такое pods kubernetes. Смотреть картинку Что такое pods kubernetes. Картинка про Что такое pods kubernetes. Фото Что такое pods kubernetes

Контейнеры в гипотетическом поде

Сеть подов

Один под, полный контейнеров, это строительный блок некоей системы, но пока ещё не сама эта система. В основе архитектуры Kubernetes лежит требование, в соответствии с которым у подов должна быть возможность взаимодействовать с другими подами вне зависимости от того, выполняются ли они на одном и том же компьютере или на разных машинах. Для того чтобы узнать о том, как всё это устроено, нам нужно перейти на более высокий уровень абстракции и поговорить о том, как в кластере Kubernetes работают узлы. Здесь мы затронем тему сетевой маршрутизации и маршрутов. Данной темы в материалах, подобных этому, нередко избегают, считая её слишком сложной. Непросто найти понятное и не слишком длинное руководство по IP-маршрутизации, но если вам хочется взглянуть на краткий обзор этой проблемы — можете взглянуть на этот материал.

Кластер Kubernetes состоит из одного узла или из большего количества узлов. Узел — это хост-система, физическая или виртуальная, которая содержит разные программные средства и их зависимости (речь идёт, в основном, о Docker), а также несколько системных компонентов Kubernetes. Узел подключён к сети, что позволяет ему обмениваться данными с другими узлами кластера. Вот как может выглядеть простой кластер, состоящий из двух узлов.

Что такое pods kubernetes. Смотреть фото Что такое pods kubernetes. Смотреть картинку Что такое pods kubernetes. Картинка про Что такое pods kubernetes. Фото Что такое pods kubernetes

Простой кластер, состоящий из двух узлов

Что такое pods kubernetes. Смотреть фото Что такое pods kubernetes. Смотреть картинку Что такое pods kubernetes. Картинка про Что такое pods kubernetes. Фото Что такое pods kubernetes

Что такое pods kubernetes. Смотреть фото Что такое pods kubernetes. Смотреть картинку Что такое pods kubernetes. Картинка про Что такое pods kubernetes. Фото Что такое pods kubernetes

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

Итоги

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

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

Источник

Как расширить приложение в Kubernetes при помощи мультиконтейнерных подов: основные рекомендации

Запустить облачные микросервисы или 12-факторные приложения в Kubernetes относительно просто. Но как насчет запуска приложений, которые явно не предназначены для работы в контейнерной среде?

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

Итак, посмотрим на примере.

Защита HTTP

Elasticsearch разработали до того, как контейнеры стали популярны (хотя сейчас его можно запустить в Kubernetes). И его можно рассматривать в качестве замены для устаревшего Java-приложения, которое предназначено для работы на виртуальной машине.

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

Вот очень простой, но не для продакшена, деплой и сервис для Elasticsearch:

Переменная окружения dicsovery.type нужна, чтобы запустить одиночную реплику.

Elasticsearch слушает HTTP-порт 9200 по умолчанию.

Вы можете убедиться, что под работает, запустив в кластере другой под и подключившись к службе elasticsearch:

Теперь предположим, что вы хотите получить модель безопасности с нулевым доверием и зашифровать весь трафик в сети. Как поступить, если в приложении нет встроенной поддержки TLS?

Последние версии Elasticsearch поддерживают TLS, раньше эта функция была платной.

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

Что такое pods kubernetes. Смотреть фото Что такое pods kubernetes. Смотреть картинку Что такое pods kubernetes. Картинка про Что такое pods kubernetes. Фото Что такое pods kubernetes

Внешний трафик проходит через Ingress и направляется к подам

Что такое pods kubernetes. Смотреть фото Что такое pods kubernetes. Смотреть картинку Что такое pods kubernetes. Картинка про Что такое pods kubernetes. Фото Что такое pods kubernetes

Если вы завершите TLS на входе, остальной трафик не будет зашифрован

Решение, которое соответствует требованиям, — прикрепить прокси-контейнер Nginx к поду, доступному по TLS. Тогда трафик будет зашифрован на всем пути от пользователя к поду.

Что такое pods kubernetes. Смотреть фото Что такое pods kubernetes. Смотреть картинку Что такое pods kubernetes. Картинка про Что такое pods kubernetes. Фото Что такое pods kubernetes

Если вы включаете прокси-контейнер в модуль, то можете завершить TLS в модуле Nginx

Что такое pods kubernetes. Смотреть фото Что такое pods kubernetes. Смотреть картинку Что такое pods kubernetes. Картинка про Что такое pods kubernetes. Фото Что такое pods kubernetes

До контейнера Elasticsearch трафик идет в зашифрованном виде

Вот как выглядит деплоймент:

Давайте немного поясню:

Таким образом, запросы извне пода поступают в Nginx через порт 9200 HTTPS, а затем попадают в Elasticsearch через порт 9201.

Что такое pods kubernetes. Смотреть фото Что такое pods kubernetes. Смотреть картинку Что такое pods kubernetes. Картинка про Что такое pods kubernetes. Фото Что такое pods kubernetes

Вы можете проверить, что все работает, отправив HTTPS-запрос из кластера:

Беглый взгляд на логи показывает, что запрос прошел через прокси Nginx:

Вы также можете убедиться: нельзя подключиться к Elasticsearch через незашифрованные соединения.

Поздравляю, вы включили TLS, не меняя кода Elasticsearch или образа в контейнере!

Практика добавления прокси-контейнера в под распространена, поэтому у нее есть свое имя — шаблон Ambassador.

Все шаблоны в этом посте подробно описаны в отличной статье от Google.

Добавление базовой поддержки TLS — только начало. Вот еще несколько вещей, которые можно сделать с шаблоном Ambassador:

Принцип работы мультиконтейнерных подов

Давайте вернемся назад и посмотрим, в чем разница между подами и контейнерами в Kubernetes. Это поможет лучше понять происходящее под капотом.

Традиционный контейнер, например запущенный при помощи Docker, обеспечивает несколько форм изоляции:

Docker позволяет настраивать и другие вещи, но эти — наиболее важные.

Контрольные группы — удобный способ ограничить ресурсы, которые может использовать конкретный процесс, например CPU или память. Допустим, вы указываете: процесс может использовать только 2 ГБ памяти и одно из четырех ядер CPU.

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

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

Что такое pods kubernetes. Смотреть фото Что такое pods kubernetes. Смотреть картинку Что такое pods kubernetes. Картинка про Что такое pods kubernetes. Фото Что такое pods kubernetes

Начиная с версии ядра 5.6, есть восемь видов пространств имен, и mount — одно из них

Что такое pods kubernetes. Смотреть фото Что такое pods kubernetes. Смотреть картинку Что такое pods kubernetes. Картинка про Что такое pods kubernetes. Фото Что такое pods kubernetes

Используя пространство имен mount, вы заставляете процесс поверить, что ему доступны все каталоги на хосте, хотя это не так

Что такое pods kubernetes. Смотреть фото Что такое pods kubernetes. Смотреть картинку Что такое pods kubernetes. Картинка про Что такое pods kubernetes. Фото Что такое pods kubernetes

Пространство имен mount предназначено для изоляции ресурсов, в данном случае — файловой системы

Что такое pods kubernetes. Смотреть фото Что такое pods kubernetes. Смотреть картинку Что такое pods kubernetes. Картинка про Что такое pods kubernetes. Фото Что такое pods kubernetes

Каждый процесс видит одну и ту же файловую систему, но при этом изолирован от других

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

В Kubernetes контейнер обеспечивает все перечисленные формы изоляции, кроме изоляции сети.

Изоляция сети происходит на уровне пода. Другими словами: у каждого контейнера в поде — своя файловая система, таблица процессов и так далее. Но все они совместно используют одно и то же сетевое пространство имен.

Чтобы лучше понять, как все работает, давайте поиграемся с простым подом, состоящим из нескольких контейнеров:

Вы можете убедиться, что том смонтирован в первом контейнере, используя kubectl exec:

Команда подключает терминальный сеанс к контейнеру c1 в поде podtest. Вы можете проверить прикрепленные тома с1 с помощью команды:

Как видите, том смонтирован на /shared — общем томе, который мы создали ранее. Теперь создадим несколько файлов:

Проверим те же файлы из второго контейнера. Сначала подключимся к нему с помощью команды:

Как видите, файл, созданный в общем каталоге, доступен в обоих контейнерах, а файл в /tmp — нет. Так случилось, поскольку за исключением тома, файловые системы контейнеров полностью изолированы друг от друга.

Теперь посмотрим на сеть и изоляцию процессов. Простой способ понять, как настроена сеть, — использовать команду ip link, она показывает сетевые устройства системы Linux.

Выполним команду в первом контейнере:

А теперь ту же команду в другом контейнере:

Вы можете видеть, что в обоих контейнерах есть:

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

Теперь давайте посмотрим на совместное использование сети в действии. Подключимся к первому контейнеру с помощью команды:

Запустим очень простой сетевой листенер nc:

Команда запускает листенер на локальном хосте на порту 5000 и показывает дату любому подключенному TCP-клиенту. Может ли к нему подключиться второй контейнер? Откроем терминал во втором контейнере с помощью команды:

Посмотрите сами — второй контейнер может подключиться к сетевому порту, но не видит процесс nc:

Подключившись через telnet, вы можете увидеть дату, это доказывает, что листенер nc работает. Но ps aux, показывающий все процессы в контейнере, вообще не отображает nc. Это связано с тем, что у контейнеров внутри модуля есть изоляция процессов, но нет изоляции сети.

И это объясняет, как работает паттерн Ambassador:

Контейнер, который получает внешний трафик, называют Ambassador — отсюда и название шаблона.

Что такое pods kubernetes. Смотреть фото Что такое pods kubernetes. Смотреть картинку Что такое pods kubernetes. Картинка про Что такое pods kubernetes. Фото Что такое pods kubernetes

Поскольку сетевое пространство имен общее, то несколько контейнеров в поде не могут прослушивать один и тот же порт!

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

Предоставление метрик по стандартному интерфейсу

Допустим, вы используете Prometheus для мониторинга всех сервисов в вашем кластере Kubernetes. Но есть приложения, которые изначально не экспортируют метрики Prometheus, например Elasticsearch.

Можете ли вы добавить метрики Prometheus в свои поды, не меняя код приложения? Можете, если используете шаблон адаптера.

В примере с Elasticsearch давайте добавим в под контейнер «экспортер», он предоставляет метрики Elasticsearch в формате Prometheus. Это легко сделать, поскольку для Elasticsearch есть экспортер с открытым исходным кодом (вам нужно добавить соответствующий порт в сервис).

Как только вы примените этот манифест, метрики станут доступны на порту 9114.

Еще раз — вы можете изменить поведение приложения, фактически не меняя код или образы контейнеров. В данном случае мы предоставили стандартизированные метрики Prometheus, которые используют кластерные инструменты (такие, как оператор Prometheus). И таким образом добились хорошего разделения между приложением и базовой инфраструктурой.

Просмотр логов

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

Шаблон Sidecar — общий и применяется в различных вариантах использования. Так, вы можете услышать, что любые контейнеры в модуле, кроме первого, называют «sidecars».

Сначала рассмотрим один из классических вариантов использования — log tailing sidecar.

В контейнерной среде рекомендуют всегда писать в стандартный вывод, чтобы собирать и агрегировать журналы логов централизованно. Но многие старые приложения разработаны для логирования в файлы, и изменить это иногда нетривиальная задача. Благодаря log tailing sidecar вам, возможно, не придется ничего менять!

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

Вот как выглядит деплой:

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

У обоих контейнеров есть общий том с именем logs. Контейнер Elasticsearch записывает журналы на этот том, а контейнер журналов логов — читает из соответствующего файла и выводит его в стандартный формат.

Вы можете получить поток журнала логов, указав нужный контейнер в kubectl logs:

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

Другие примеры использования Sidecars

Есть множество вариантов использования Sidecars, контейнер логов — только один и довольно простой пример.

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

Что такое pods kubernetes. Смотреть фото Что такое pods kubernetes. Смотреть картинку Что такое pods kubernetes. Картинка про Что такое pods kubernetes. Фото Что такое pods kubernetes

Подготовка пода к запуску

Во всех примерах многоконтейнерных подов, которые мы рассмотрели выше, несколько контейнеров работают одновременно.

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

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

Давайте посмотрим на примере Elasticsearch. В документации Elasticsearch рекомендуют устанавливать параметр sysctl vm.max_map_count в продакшен развертываниях. В контейнерных средах это проблематично — для sysctl нет изоляции на уровне контейнера, и любые изменения происходят на уровне узла.

Что делать с этим, если вы не можете настраивать узлы Kubernetes? Один из способов — запустить Elasticsearch в привилегированном контейнере. Это позволяет Elasticsearch изменять системные настройки на своем хост-узле и сценарий точки входа для добавления sysctl.

Но это чрезвычайно опасно с точки зрения безопасности! Если служба Elasticsearch будет скомпрометирована, то злоумышленник получил бы root-доступ к своему хост-узлу.

Чтобы снизить этот риск, можно использовать контейнер инициализации:

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

Источник

Что такое Pods, Nodes, Containers и Clusters в Kubernetes

Что такое pods kubernetes. Смотреть фото Что такое pods kubernetes. Смотреть картинку Что такое pods kubernetes. Картинка про Что такое pods kubernetes. Фото Что такое pods kubernetes

Kubernetes (k8s) очень стремительно становится новым стандартом для деплоймента и менеджмента вашего кода в клауде. Вместе с тем, сколько фич предоставляет k8s, для новичка наступает высокий порог входа в новую технологии.

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

Hardware

Nodes

Что такое pods kubernetes. Смотреть фото Что такое pods kubernetes. Смотреть картинку Что такое pods kubernetes. Картинка про Что такое pods kubernetes. Фото Что такое pods kubernetes

Если обсуждать про машину как «ноду», можем разбавить это слоем абстракции, мы можем представлять ее как некий набор CPU, RAM ресурсов которые можно использовать. Таким образом любая такая машина может заменить любую другую машину как k8s кластер.

Cluster

Что такое pods kubernetes. Смотреть фото Что такое pods kubernetes. Смотреть картинку Что такое pods kubernetes. Картинка про Что такое pods kubernetes. Фото Что такое pods kubernetes

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

В Kubernetes ноды объединяют свои ресурсы для формирования более мощной машины. Когда вы развертываете программы в кластере, он балансирует нагрузку по индивидуальным нодам для вас. Если какие-либо nodes добавляются или удаляются, кластер будет перемещаться по мере необходимости. Для программы или девелопера не должно быть важно, на каких машинах выполняется код в k8s. Можно сравнить такую систему с улием.

Persistent Volumes

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

Что такое pods kubernetes. Смотреть фото Что такое pods kubernetes. Смотреть картинку Что такое pods kubernetes. Картинка про Что такое pods kubernetes. Фото Что такое pods kubernetes

Software

Контейнеры

Что такое pods kubernetes. Смотреть фото Что такое pods kubernetes. Смотреть картинку Что такое pods kubernetes. Картинка про Что такое pods kubernetes. Фото Что такое pods kubernetes

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

Контейнеризация позволяет вам создавать self-contained environments. Любая программа и все ее зависимости могут быть объединены в один файл и затем опубликованы в Интернете. Любой может загрузить контейнер и развернуть его в своей инфраструктуре с минимальными настройками. Создание контейнера может быть сделано и скриптом, позволяя строить CI/CD пайплайны.

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

Что такое pods kubernetes. Смотреть фото Что такое pods kubernetes. Смотреть картинку Что такое pods kubernetes. Картинка про Что такое pods kubernetes. Фото Что такое pods kubernetes

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

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

Pod’ы могут содержать несколько контейнеров, но вы должны ограничивать их количество, когда это возможно. Поскольку контейнеры масштабируются как единое целое, все контейнеры в паке должны масштабироваться вместе, независимо от их индивидуальных потребностей. Это приводит к потраченным впустую ресурсам и дорогому счету. Чтобы решить эту проблему, Pod’ы должны оставаться меньше на сколько это возможно, обычно вмещая только основной процесс и его тесно связанные вспомогательные контейнеры (эти вспомогательные контейнеры обычно называют Side-cars).

Deployments

Что такое pods kubernetes. Смотреть фото Что такое pods kubernetes. Смотреть картинку Что такое pods kubernetes. Картинка про Что такое pods kubernetes. Фото Что такое pods kubernetes

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

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

Ingress

Что такое pods kubernetes. Смотреть фото Что такое pods kubernetes. Смотреть картинку Что такое pods kubernetes. Картинка про Что такое pods kubernetes. Фото Что такое pods kubernetes

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

Есть несколько способов добавить ingress в ваш кластер. Наиболее распространенными способами являются добавление либо ingress controller, либо LoadBalancer. Описание различий и что лучше выбрать выходит за рамки этой статьи, но вы должны держать в голове что вам нужно разобратся с доступом к сервису, если вы хотите работать с k8s.

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *