Бесплатная миграция IT-инфраструктуры в облако

Топ вопросов и ответов на собеседовании по Kubernetes

Александр Бархатов
Александр Бархатов
Технический писатель
29 октября 2024 г.
67
12 минут чтения
Средний рейтинг статьи: 5

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

Что такое Kubernetes?

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

Перечислите основные компоненты кластера Kubernetes

В основу Kubernetes заложен компонент Control Plane, который расположен на мастер-ноде кластера. В состав Control Plane входят следующие объекты:

  • kube-api-server — API-сервер для обработки REST-запросов. Является «мозгом» всего кластера Kubernetes, так как через сервер API происходит обработка всех запросов, включая запросы на создание и удаление объектов в кластере. Также через API-сервер осуществляется взаимодействие между всеми объектами кластера.

  • etcd — высокодоступное (highly-available) хранилище формата «ключ-значение». Хранит настройки и состояние кластера. etcd можно развернуть отдельно (вне кластера) для создания дополнительного уровня отказоустойчивости. etcd является независимым компонентом — программа разрабатывается отдельной командой разработки. 

  • kube-scheduler — планировщик, который определяет, на каких узлах (нодах) кластера будут запущены поды (pods). Важной задачей kube-scheduler является мониторинг ресурсов на каждой ноде кластера с целью распределения нагрузки. 

  • kube-controller-manager — предназначен для запуска контроллеров — объектов, которые отслеживают ресурсы и состояние кластера с целью запроса и внесения изменений для приведения состояния кластера к необходимому состоянию..

  • kube-proxy — сетевая служба, представляющая собой балансировщик нагрузки. Распределяет сетевой трафик между подами. kube-proxy присутствует на каждой ноде кластера.

Что такое Pod в Kubernetes?

Pod в Kubernetes — это объект (абстракция), в котором запускаются контейнеры. Как правило, в состав пода входит один или несколько контейнеров, собственный IP-адрес и хранилище данных. Kubernetes не работает с контейнерами напрямую, а взаимодействует при помощи объекта pod (под).

В чем разница между Deployment и StatefulSet?

Объекты типа Deployment и StatefulSet представляют собой два разных объекта, предназначенных для запуска и управления приложениями, но они различаются по своим характеристикам.

Deployment

  1. Deployment используется для управления stateless-приложениями — приложениями, которые не хранят свое состояние. К таким приложениям относятся, например, веб-серверы.
  2. Deployment поддерживает стратегию развертывания Rolling Update, при помощи которой можно производить обновление версии приложения без простоя кластера.
  3. Объекты типа pod, созданные при помощи Deployment, являются временными. Им не назначаются постоянные идентификаторы в именах пода, и при перезапуске могут быть созданы новые поды с новыми IP-адресами.
  4. Объект Deployment не обеспечивает постоянного хранения состояния. Это означает, что при удалении пода будут удалены все данные, находившиеся в нем.

StatefulSet

  1. StatefulSet используется для управления stateful-приложениями — приложениями, которые требуют сохранения состояния. К таким приложениям относятся, например, базы данных.
  2. Объекты типа pod, управляемые StatefulSet, создаются с уникальными и постоянными числовыми идентификаторами, которые сохраняются при перезапуске пода.
  3. StatefulSet поддерживает работу с постоянными томами (они же Persistent Volumes). Благодаря этому открывается возможность хранить данные между перезапусками подов.
  4. StatefulSet использует другой порядок обновления приложений, при котором поды запускаются и останавливаются в определенном порядке (по одному за раз).

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

kube

Что такое сервис (service) и какие типы сервисов существуют в Kubernetes?

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

В Kubernetes существует четыре основных типа сервисов:

  • ClusterIP — предоставляет доступ к поду, используя внутренний IP-адрес в кластере. Данный тип сервиса делает под доступным только внутри кластера без внешнего доступа.

  • NodePort — предоставляет доступ к поду путем открытия заранее определенного порта для всех узлов кластера сразу. Трафик на открытый порт перенаправляется к подам. NodePort позволяет получить доступ до пода с запущенным приложением вне кластера (из внешней сети).

  • LoadBalancer — представляет собой внешний балансировщик нагрузки, которому назначается внешний IP-адрес. Выполняет такие операции, как распределение входящего трафика и предоставление доступа до подов из внешней сети. Как правило, используется в кластерах, которые развернуты в облаке.

  • ExternalName — предоставляет доступ к поду путем сопоставления имени сервиса внутри кластера с внешним именем хоста или IP-адресом. ExternalName функционирует исключительно на уровне DNS, так как при работе с данным типом сервиса создается CNAME-запись.

Что такое Ingress?

Ingress — это объект в кластере Kubernetes, в котором определяются правила по распределению входящего трафика между объектами в кластере Kubernetes. Для работы правил Ingress необходим Ingress-контроллер.

Что такое Ingress-контроллер?

Ingres-контроллер — это объект кластера Kubernetes, который обрабатывает правила, описанные в объекте Ingress. Ingress Controller состоит из двух основных компонентов — обратного прокси-сервера (reverse proxy) и контроллера, который обращается к API-серверу Kubernetes. 

Как организовать хранение чувствительных данных (секретов), включая логины, пароли, токены, ключи?

Для хранения чувствительных данных в Kubernetes предусмотрен объект secrets. Существует шесть типов secrets:

  • Opaque — универсальный тип для хранения секретов, с помощью которого можно хранить любые данные.
  • Service account token — используется для работы с объектом service account путем генерации JWT-токена. В большинстве случаев токен создается автоматически при создании объекта service account в кластере.
  • Basic-auth — используется формат Логин:пароль в формате кодировки Base64.
  • Ssh-auth — используется для аутентификации с помощью протокола SSH. Внутри секрета указывается заранее сгенерированный приватный ключ.
  • TLS-сертификаты — при данном методе используются сертификаты и их приватные ключи, которые указываются в поле tls.crt и tls.key манифестов. Сертификат и приватный ключ указываются в Base64-кодировке.
  • Bootstrap token — представляет собой специальный тип токенов, который используется для безопасного добавления новых нод в кластер Kubernetes.

Объекты типа secrets должны добавляться в контейнер при помощи механизма volumeMount или механизма secretKeyRef.

Также можно воспользоваться сторонними решениями для хранения секретов, например, HashiCorp Vault.

Что такое метки и селекторы и для чего они используются?

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

Селекторы (Selectors) позволяют производить выборку и фильтрацию объектов на основе значений, указанных в метках (labels). Под селекторами понимают запрос, получающий ссылку на необходимые объекты, которые соответствуют запрашиваемым меткам.

Что такое пробы (probes) в Kubernetes, какие типы проб существуют и для чего используются?

Пробы (Probes) — это функционал в кластере Kubernetes который предназначен для проверки готовности приложения. В Kubernetes существуют следующие пробы:

  • Liveness-проба — предназначена для проверки работоспособности запущенного пода с контейнером. Если под не пройдет проверку Liveness-пробы, он будет перезапущен автоматически. 
  • Readiness-проба — проверяет, может ли запущенный под принимать сетевой трафик. Если под не в состоянии принимать и обрабатывать сетевой трафик, он будет исключен из балансировки, то есть не сможет принимать сетевой трафик, однако сам под с приложением будет продолжать работать.
  • Startup-проба — запускается после того, как был запущен под. Применяется для приложений, которые долго запускаются.

Что такое Pod Disruption Budget и для чего используется?

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

Использование Pod Disruption Budget на примере выглядит следующим образом. Предположим, у нас в кластере запущено приложение состоящее из трех копий (реплик). Приложение продолжит функционировать, если одна из копий будет недоступна. Однако при недоступности уже двух копий из трех, приложение перестанет функционировать.

При помощи Pod Disruption Budget можно указать, сколько подов могут быть недоступны при наступлении добровольных сбоев. В данном примере нам необходимо задать, что может быть недоступен только один под.

Как контролировать использование ресурсов для контейнеров?

Для контроля ресурсов в Kubernetes используется функционал запросов (requests) и лимитов (limits).

  • Запросы (requests) — функционал, при помощи которого можно указывать ресурсы оперативной памяти и процессора, минимально необходимые для запуска пода. Если ресурсов кластера будет недостаточно для указанных запросов в манифесте, то под запущен не будет.
  • Лимиты (limits) — функционал, при помощи которого можно указывать ограничения для пода на использование таких ресурсов, как оперативная память и процессор. Под не сможет расходовать больше ресурсов, чем задано в лимитах.

Более подробно ознакомиться с функционалом запросов и лимитов в Kubernetes можно в нашей статье.

Как предоставить доступ до запущенного приложения из внешней сети?

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

Помимо Ingress-контроллера также можно использовать один из следующих типов сервисов (service): NodePort, Load Balancer.

Что такое CNI-интерфейс?

CNI (Container Network Interface — сетевой интерфейс контейнера) — это проект некоммерческой организации Cloud Native Computing Foundation, который представляет собой спецификацию и библиотеки для работы и настройки сетевых интерфейсов в контейнерах Linux. С технической стороны, CNI занимается подключением контейнеров к сети. Разрабатываемые сетевые функции реализуются в качестве плагинов. Среди самых распространенных сторонних плагинов CNI можно выделить Calico, Weave, Flannel, Cilium.

Что такое CRI?

CRI (Container Runtime Interface) — это основной способ связи между компонентом kubelet в кластере Kubernetes и исполняемой средой контейнеров. С помощью CRI Kubernetes взаимодействует с контейнерным движком который создает контейнеры (сам Kubernetes не создает контейнеры а только управляет ими). В качество CRI можно использовать такие движки как containerd, CRI-O.

Что такое Persistent Volume (PV)?

Persistent Volume (постоянный том) — объект кластера Kubernetes, который используется для хранения данных в кластере. Тома представлены в виде плагинов. Kubernetes поддерживает следующие типы плагинов для томов, которые можно использовать в кластере:

  • Container Storage Interface (CSI)
  • Fibre Channel (FC)
  • hostPath
  • iSCSI 
  • local storage
  • Network File System (NFS)

Что такое Persistent Volume Claim (PVC)?

Persistent Volume Claim — это запрос к объекту Persistent Volumes на хранение от пользователя. В качестве основных параметров запроса выступают запросы на объем pvc и тип доступа. При помощи PVC можно управлять хранилищем путем динамического выделения Persistent Volume.

Как назначать права доступа в кластере Kubernetes?

В Kubernetes работа с пользователями и правами основана на модели RBAC (Role-based access control), с помощью которой можно назначать права доступа к объектам в кластере Kubernetes. RBAC в Kubernetes использует пять сущностей для работы с правами доступа:

  • Role — содержит правила, которые предоставляют набор разрешений.
  • RoleBinding — привязывает роли к определенным группам и пользователям.
  • ClusterRole — описывает права на объекты в кластере.
  • ClusterRoleBinding — предоставляет доступ только к тем объектам, которые находятся в том и том же пространстве имен (namespace), что и манифест RoleBinding. ClusterRoleBinding позволяет предоставить доступ ко всем объектам кластера во всех пространствах имен.
  • ServiceAccount — представляет собой учетную запись для каждого объекта в кластере Kubernetes.

Заключение

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

29 октября 2024 г.
67
12 минут чтения
Средний рейтинг статьи: 5
Пока нет комментариев