null

Kubernetes: Начало

"У самурая нет цели, только путь, а путь самурая - это смерть".

Примерно такие мысли возникают, когда впервые видишь K8s (сокращенное название Kubernetes). Kubernetes поначалу сложен и непонятен, но стоит разобраться в основах, так все сразу встанет на свои места, глаза откроются и вы познаете для себя новый мир - мир, в котором есть blue-green deployment, load balancer, auto scaling и прочие радости жизни. Данная статья рассчитана на тех, кто уже имеет базовое представление о Docker и контейнеризации приложений, ведь K8s это следующий уровень. Kubernetes поддерживает несколько сред для запуска контейнеров, однако мы будем рассматривать именно Docker.

Сегодня мы разберем несколько главных объектов K8s:

Cluster

Cluster - это основной компонент K8s, который состоит из Nodes. Каждый Kubernetes Cluster состоит минимум из одного рабочего Node.

Node

Node - это сервер, так называемый узел. Узлы бывают двух типов, Master Node и Worker Node.

Worker Node - сервер, на котором работают два гланых процесса K8s, благодаря которым запускаются и работают контейнеризированные приложения.

Control PLane (Master Node) - сервер, на котором работают три других главных процесса K8s, благодаря которым он управляет Worker Nodes. Команды управления CLI всегда посылаются на Master Node, поэтому напрямую с Worker Node мы не работаем.

По минимуму для полноценного кластера нужен один Worker Node и один Control Plane.

Диаграмма кластера Kubernetes, где можно рассотреть узлы и их процессы:

Pod

Pod - минимальный объект, который может запустить Kubernetes. Состоит из контейнеров (Docker), однако в большинстве случаев используется один контейнер, так как если понадобится scaling одного из приложений внутри пода, то нужно будет создавать реплики пода целиком, вместе с теми приложениями, которым scaling не нужен. Таким образом Pod является некоторой оболочкой нашего приложения, которое можно запустить с любым Image, открывая нужные порты, а также создавая реплики для scaling'а.

Deployment

Deployment - это достаточно интересный объект K8s. Представляет собой набор (set) подов одного типа, с помощью которого можно настраивать auto scaling, поддерживать минимальное количество работающих подов, производить бесшовные обновления (blue-green deployment), перезапускать поды и выполнять другие полезные действия.

При создании Deployment, можно указать необходимое количество реплик пода, которое будет поддерживаться. В таком случае создается объект ReplicaSet, который и занимается этой поддержкой.

Расмотрим горизонтальное масштабирование приложения. При конфигурации подобного K8s создает дополнительный объект, Horizontal Pod Autoscaling, который при достижении заданных параметров, например среднее значение использования процессора у всех подов в Deployment, дает указание ресурсу рабочей нагрузки, в нашем случае Deployment, увеличить количество подов.

Service

Service - это некоторая абстракция, которая определяет политику доступа к логическому набору подов. Данный набор подов чаще всего определяется с помощью меток (labels - пары ключ/значение), которые назначаются подам. Необходимость создания Service заключается в том, что поды в кластере Kubernetes постоянно создаются и уничтожаются и при этом их IP-адрес, который под получает при создании, может измениться. K8s предоставляет нам несколько типов Service, каждый из которых по разному предоставляет доступ к приложениям:

  • ClusterIP (по умолчанию) - приложение доступно по внутреннему IP-адресу только внутри K8s Cluster;
  • NodePort - приложение доступно по определенному порту на всех K8s Worker Nodes не только внутри кластера, но и за его пределами, используя адреса формата <NodeIP>:<NodePort>;
  • LoadBalancer - приложение доступно через балансировщик нагрузки облачного провайдера (AWS, GCP, etc);
  • ExternalName - нужен для интеграции внешних сервисов. Сопоставляет имя сервиса и externalName поле в конфигурации, после чего служба DNS в кластере возвращает CNAME запись. Таким образом перенаправление происходит на уровне DNS и не происходит ни проксирования, ни переадресации.

Заключение

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

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

Назад