Сегодня одним из самых популярных в использовании инструментов в стеке техкомпаний является Kubernetes. С момента своего выхода K8s получил массовое распространение, расширив свою экосистему и увеличив количество пользователей. В 2021 году CNCF (Cloud Native Computing Foundation) провел опрос, который показал, что 96% организаций (которые приняли в нём участие) используют или уже пробуют Kubernetes в своем технологическом стеке.
Без сомнения, с внедрением Kubernetes поиск квалифицированного персонала стал более востребованным, чем когда-либо. В этой статье мы рассмотрим наиболее распространенные вопросы, которые задают интервьюеры, и ответы на них.
Итак, давайте ознакомимся с самыми распространенными вопросами интервью по Kubernetes:
Какие компоненты мастер-узла (Control Plane) Kubernetes и каково их назначение?
Каковы компоненты рабочего узла (worker node) и их назначение?
В чем разница между Init- и Sidecar-контейнерами?
В чем разница между Deployment и StatefulSet?
Перечислите различные типы сервисов и для чего они используются.
Какие компоненты мастер-узла (Control Plane) Kubernetes и каково их назначение?
Узлы Control Plane Kubernetes являются “мозгом” кластера k8s. Узлы Control Plane управляют pod’ами в кластере и рабочими узлами, которые участвуют в кластере.
Control Plane Kubernetes состоит из четырех компонентов в кластере on-prem и пяти в кластерах cloud/hybrid Kubernetes. Как администраторы кластера, мы хотели бы иметь по крайней мере три узла Control Plane в производственной среде по соображениям отказоустойчивости.
Kube-api-server — API-сервер Kubernetes проверяет и настраивает данные для API-объектов, включая pod’ы, сервисы, контроллеры репликации и другие. API-сервер обслуживает REST-операции и предоставляет фронтэнд для общего состояния кластера, через которое взаимодействуют все остальные компоненты.
Kube-controller-manager — Kubernetes controller manager - демон, который реализует основные контуры управления, поставляемые с Kubernetes. В робототехнике и автоматизации контур управления - это непрерывный контур, регулирующий состояние системы. Примерами контроллеров, которые сегодня поставляются с Kubernetes, являются контроллеры replication, endpoints, namespace и serviceaccounts.
Kube-scheduler — Планировщик Kubernetes - это процесс Control Plane, который назначает pod’ы узлам. Планировщик определяет, какие узлы являются допустимыми местами размещения для каждого pod’а в очереди планирования в соответствии с ограничениями и доступными ресурсами. Затем планировщик ранжирует каждый допустимый узел и привязывает pod к подходящему узлу. Планировщиков может быть несколько.
Etcd — распределенное целостное хранилище ключей и данных с открытым исходным кодом, используемое для совместной конфигурации, обнаружения сервисов и координации планировщика распределенных систем или кластеров машин. В Control Plane Kubernetes Etcd используется для хранения и репликации всех состояний кластера k8s.
Cloud-controller-manager (используется в облачных провайдерах) — Cloud-controller-manager обеспечивает интерфейс между кластером Kubernetes и облачными API-сервисами. Диспетчер облачных контроллеров позволяет кластеру Kubernetes обеспечивать, отслеживать и удалять облачные ресурсы, необходимые для рабочих операций кластера.
В сценарии, при котором большинство узлов Control Plane не работает, кластер не сможет обслуживать API-запросы, поэтому кластер будет недоступен. Хотя, если рабочие узлы исправны, pod’ы будут в рабочем состоянии, но не смогут быть перераспределены.
Каковы компоненты рабочего узла (worker node) и их назначение?
Рабочие узлы (worker nodes) отвечают за размещение прикладных pod’ов в кластере. Хотя прикладные pod’ы можно размещать в узлах Control Plane, наилучшей практикой является размещение pod’ов на рабочих узлах по соображениям безопасности.
Рабочие узлы содержат компоненты, которые позволяют им выполнять запросы Control Plane.
Kube-proxy — kube-proxy отвечает за поддержание сетевых правил на ваших узлах. Сетевые правила позволяют осуществлять сетевую связь с вашими pod’ами как внутри, так и за пределами вашего кластера.
Kubelet — Kubelet является агентом, который запускается на каждом узле. Он отвечает за создание pod’ов в соответствии с предоставленной спецификацией YAML, отправку на API-сервер состояния работоспособности pod’ов и предоставление информации о состоянии узла, такой как сеть, дисковое пространство и многое другое.
В чем разница между Init- и Sidecar-контейнерами?
Самый простой pod — это pod, состоящий из одного контейнера. Этот контейнер обеспечивает основные функции приложения, но что, если вы хотите расширить существующую функциональность, не изменяя и не усложняя основной контейнер?
По этой причине pod’ы могут включать в себя несколько контейнеров. Существует шаблон проектирования контейнера, который полезен для различных сценариев, но строительные блоки для этих шаблонов проектирования реализуются с помощью Init-контейнера и sidecar-контейнера.
Init-контейнер — всегда запускается перед Sidecar-контейнером и основным контейнером приложения. Init-контейнер должен быть запущен до успешного завершения, прежде чем смогут начать работу остальные контейнеры. Причиной использования Init-контейнера могут быть разнообразные применения. Например, его можно использовать для проверки наличия зависимостей приложения, настройки основной среды или среды контейнера Sidecar-контейнера, а также многого другого.
Sidecar-контейнер — запускается параллельно основному контейнеру приложения. Существуют различные причины для использования сайдкар контейнеров. Например, в Istio Sidecar-контейнер используется в качестве прокси-сервера для управления входящим трафиком на основной контейнер, его также можно использовать для логгирования, целей мониторинга и многого другого.
Пример контейнеров для Istio для инициализации среды и перехвата контейнерного трафика:
apiVersion: v1
kind: Pod
metadata:
name: example
spec:
# init container section where you can setup your init containers
initContainers:
- name: istio-init
image: istio/proxyv2:1.11.2
containers:
- name: hello
image: alpine
# our sidecar container which will intercept the pod network tarffic
- name: istio-proxy
image: istio/proxyv2:1.11.2
volumeMounts:
- mountPath: /etc/certs
name: certs
volumes:
- name: certs
secret:
secretName: istio-certs
В чем разница между Deployment и StatefulSet?
Один из самых распространенных вопросов, с которым мы столкнемся на собеседовании. Чтобы ответить на этот вопрос, нам нужно будет рассмотреть каждый ресурс и понять их различия.
Deployment — является самым простым и наиболее часто используемым ресурсом для развертывания приложений в кластере Kubernetes. Deployment обычно используются для приложений без состояния, что означает, что данные, находящиеся в pod’е, будут удалены вместе с pod’ом. Если мы используем постоянное хранилище с Deployment,, у нас будет одинPersistence volume claim для всех pod’ов, которые принимают участие в развертывании. Deployment порождает ресурс ReplicaSet, через который идут переключения между разными версиями нашего приложения. Pod’ы, принадлежащие Deployment всегда именуются по следующей схеме: <deployment-name>-<replicaset-id>-<pod-id>
.
StatefulSet — ресурс, который стал стабильным в версии Kubernetes 1.9, поскольку сообщество запросило возможность размещения приложений с состоянием в кластере Kubernetes. StatefulSet не использует ReplicaSet в качестве вторичного контроллера, но он управляет pod’ами самостоятельно. Pod’ы StatefulSet’а именуются по следующему шаблону: <Statefulset-name>-0, <Statefulset-name>-1
. Соглашение об именовании используется для сетевых идентификаторов и управления обновлением. StatefulSet требует headless-сервис, позволяя обеспечить идентифицкацию в сети и разрешение DNS имен для pod’ов, участвующих в StatefulSet. Каждая реплика в развертывании StatefulSet получает собственную persistent volume clain, так что каждый pod будет иметь свое собственное состояние.
Наконец, эмпирическое правило заключается в том, что приложения без состояния должны разворачиваться через Deployment. Deployment включают в себя другой контроллер, называемый ReplicaSet, для упрощения обновлений и откатов. StatefulSet был создан на основе потребностей сообщества и обычно используется для приложений с состоянием таких как, например, баз данных, где определение других реплик в кластере имеет решающее значение, а обновления должны выполняться корректно.
Перечислите различные типы сервисов. Для чего они используются?
Сервис Kubernetes — это логическая абстракция группы pod’ов, выбранных селектором. Service используется для настройки политики, с помощью которой можно получить доступ к нижележащим pod’ам.
В вашем интервью вас, вероятно, спросят о четырех наиболее распространенных типах сервисов, описанными далее:
ClusterIP — ClusterIP является типом сервиса по умолчанию и наиболее распространенным сервисом в экосистеме Kubernetes. Сервис типа ClusterIP имеет внутрикластерный IP-адрес и доступен только в рамках кластера.
LoadBalancer — тип сервиса LoadBalancer используется для обеспечения доступа внешнего трафика путем выделения loadbalancer. Чтобы использовать этот тип сервиса, необходима поддерживающая это платформа, которая сможет распределять loadbalancer. Loadbalancer будет создан асинхронно, и информация о балансировщике нагрузки будет доступна в сервисе только тогда, когда он будет доступен и присвоен сервису. Тип службы loadbalancer также имеет ClusterIP и выделяет NodePort для доступа к сервису.
NodePort — тип сервиса NodePort обычно используется, когда сервису предоставляется доступ к внешнему трафику, а тип Service LoadBalancer недоступен. С типом Service NodePort вы выбираете порт (в пределах допустимого диапазона от 30000 до 32767), который каждый узел в кластере откроет для приема трафика и переадресации на сервис. Тип службы NodePort также имеет ClusterIP, который позволяет сервису быть доступным из кластера.
Headless — тип сервиса Headless используется, когда требуется прямая связь с pod’ом. В приложениях с состоянием, например, баз данных вторичные pod’ы должны напрямую взаимодействовать с первичными pod’ами для репликации данных между репликами. Headless позволяет DNS разрешать pod’ы и получать к ним доступ по имени pod’а. Headless - это сервис, который настроен иным образом, чем ClusterIP и не имеет отдельного внутрикластерного IP адреса. Для доступа к pod’у через Headless-сервис необходимо будет воспользоваться следующим доменным именем: <pod-name>.<service-name>
.<namespace>.svc.cluster.local
.
Заключение
Kubernetes сегодня является одной из наиболее часто используемых технологий в IT-отрасли, поэтому организация ищет талантливых сотрудников, обладающих образованием и опытом в этой области. Темы, рассмотренные в этой статье, являются одними из наиболее частых вопросов, задаваемых в интервью. Хотя эта статья ответила на пять основных вопросов, информация, написанная здесь, будет полезна в различных сценариях интервью.
Заглядываем под капот K8s на курсе «Kubernetes: Мега», старт уже 14 февраля.
Комментарии (9)
Fitrager
31.01.2023 18:23+4Как легко пройти собеседование по Kubernetes в 2023 году - изучить все материалы по программе экзамена CERTIFIED KUBERNETES ADMINISTRATOR (CKA).
Я сам сейчас подробно изучаю Kubernetes, чтобы найти работу и там столько нюансов, что без подробного изучения каждого элемента с практическим решением различных задач не изучить Kubernetes.
И найти работу DevOps зная только Kubernetes невозможно. Мой горький опыт. Нужно еще знать Linux, Ansible, Docker, Gitlab, Jenkins, PostgreSQL, bash, git, Nginx, Prometheus, Grafana, и желательно Python. И все это на достаточно хорошем уровне. Вот тогда можно пройти собеседование.
CrzyDocTI
01.02.2023 02:47+2я бы сказал скорее так:
обязательные - Linux(выше среднего + понимание сетей), Ansible(средний уровень + уметь читать и редактировать плейбуки), Docker, bash(средний уровень), git(начальный уровень), Nginx(начальный уровень), prometheus+grafana_alert_manager(начальный уровень + понимание работы prometheus operator)
дальше по формату работы - если ищем большую компанию - Jenkins, если бюрократия больших компаний претит - Gitlab
всегда удивляло требование знания БД... БД можно столько оптимизировать что для этого есть отдельная специальность - database administrator. а все остальное в виде установки(настройки pghab_conf в том числе) и кластера(к примеру coronasync, pacemaker) можно по гайду конечно изучить, но зачем?
Python вообще ни разу не пригодился за 4 года работы непосредственно devops...
Ну и на затравку список вопросов которые задавал на позицию ученика(junior). В формате быстрых вопросов-ответов, без углубления в тему:
Общие:
Что делает системный администратор?
Что делает devops?
Что такое GNU
Что такое линуксLinux:
чем отличается Unix и Linux
как происходит загрузка ОС что такое grub
что такое initd стадии initd
чем отличается пространство ядра и пространство пользователя?
демон systemd, команды systemctl, как создать сервис, как посмотреть журнал сервиса, что такое journalctl, как провести дебаг сервиса
компоненты процесса что такое PID, PPID, UID, GID и как их получить
команды top, htop что такое load average %Cpu(s): 7.3 us, 5.5 sy, 0.0 ni, 87.3 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st приоритет процесса, каким бывает, как установить, как узнать, oomkiller
файловая система как устроена файловая система, что такое inode, стандартные дирректории linux: /bin /boot /dev /etc /home /lib /opt /proc /root /tmp /usr /var, что такое df и ncdu
ACL как назначить права ,как сменить владельца, что такое cgroups
что такое rpm и yum, как посмотреть список установленных пакетов, как найти доступные пакеты в репозиториях, как установить репозиторий
GNU-Utils какими пользовались за последний год sed, awk, xargs, ls, find(и чем отличается от ls), grep, rm, move, tail, head, env, tee, curl, wget, tree
TCP/IP, уровни модели osi, что такое ip адрес, что такое маска сети, чем отличается TCP от UDP, netfilter и его компоненты, iptables и conntrack, что такое порт и сколько их может быть, команды ping, traceroute, tcpdump, netstat, nmap, telnet, netcat, что такое DNS? что такое nslookup
Docker
Что такое Dockerfile
что такое docker build
Расскажите о CMD и ENTRYPOINT в Dockerfile, чем отличаются
для чего используется multi-stage в Dockerfile
Что такое контейнер Docker
Назовите наиболее важные команды Docker
Что такое пространства имен в Docker
Как определить состояние контейнера Docker
Опишите функции и случаи применения Docker
Какие сети доступны по умолчанию в Docker
Приведите необходимые шаги для развертывания докеризированного приложения, сохраненного в репозитории Git
Если вы остановите контейнер — потеряете данные?
Как выполняется мониторинг Docker в производственных окружениях
Расскажите о ключевом различии между виртуализацией и контейнеризацией
Где хранятся тома DockerKubernetes
Что такое Kubernetes?
Расскажите об основных компонентах kubernetes
Чем полезна оркестровка контейнеров?
Как связаны Kubernetes и Docker?
Что такое node в Kubernetes?
Что такое pod в Kubernetes?
Что такое Kubernetes deployment?
Опишите набор действий необходимых для запуска deployment?
Объясните разницу между pod и deployment
Что такое service?
что такое namespace
что такое controller-manager
какие типы controller-manager вы знаете?(endpoints controller, service accounts controller, namespace controller, node controller, token controller, and replication controller)
для чего etcd в kubernetes?
что такое clusterIP?
что такое NodePort?
что такое kubelet?
что такое kube-proxy?Fitrager
01.02.2023 04:14Спасибо. На некоторые вопросы я не знаю ответы. Буду готовиться.
CrzyDocTI
01.02.2023 04:21+1рекомендую Unix_и_Linux_Руководство_системного_администратора_5_e_издание_2020 - первые три главы. эксплуатация активно развивается и четвертая глава уже не так актуальна, а вот часть где рассказывают про linux все еще более-менее актуально т.к. его основы не меняются каждый год.
так же, для новичков в k8s, тот же открытый курс от Слёрм:
https://www.youtube.com/playlist?list=PL8D2P0ruohOA4Y9LQoTttfSgsRwUGWpu6Fitrager
01.02.2023 14:09А есть требования для миддла и сеньора?
CrzyDocTI
01.02.2023 14:52+1для мидла не описывал, но все то же самое с дополнительными вопросами вглубь и уточнениями завязанными на опыте. к примеру на вопрос "чем отличается tcp от udp" будет мало ответить "гарантией доставки" - необходимо так же упомянуть что tcp создает сессию.
а сеньоров нанимать не приходилось - сам еще не дорос до сеньора =)
TyVik
Какие-то отрывочные факты, которые скоро забудутся. Сделайте лучше текстовую расшифровку курса по k8s, который был совместно с mail.ru. Ну или разберите каждый продукт в CNCF landscape.