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

KubernetesBeginner
Практиковаться сейчас

Введение

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

KUBERNETES

Основы и ключевые концепции Kubernetes

Что такое Kubernetes и зачем он используется?

Ответ:

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


Объясните разницу между Pod и Container в Kubernetes.

Ответ:

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


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

Ответ:

Node — это рабочая машина в Kubernetes, которая может быть виртуальной машиной или физическим компьютером. Каждый Node содержит необходимые компоненты для запуска Pod'ов, включая Kubelet (агент для мастера), Kube-proxy (сетевой прокси) и среду выполнения контейнеров (например, Docker, containerd).


Опишите основные компоненты Control Plane Kubernetes (Master Node).

Ответ:

Control Plane состоит из Kube-API Server (предоставляет API Kubernetes), etcd (согласованное и высокодоступное хранилище ключ-значение для данных кластера), Kube-Scheduler (отслеживает новые Pod'ы и назначает их на Nodes) и Kube-Controller-Manager (запускает процессы контроллеров, такие как контроллеры Node, Replication, Endpoint и Service Account).


Что такое Deployment в Kubernetes и зачем он используется?

Ответ:

Deployment — это абстракция более высокого уровня, которая управляет желаемым состоянием ваших Pod'ов и ReplicaSet'ов. Он обеспечивает декларативное обновление Pod'ов и ReplicaSet'ов, позволяя вам определять, сколько реплик приложения должно работать, и как выполнять обновления или откаты к предыдущим версиям.


Как Kubernetes обрабатывает сетевое взаимодействие для Pod'ов?

Ответ:

Kubernetes назначает уникальный IP-адрес каждому Pod'у. Все контейнеры в пределах Pod совместно используют этот IP-адрес и могут взаимодействовать через localhost. Pod'ы на разных узлах могут взаимодействовать с использованием плагина CNI (Container Network Interface), который реализует сетевое наложение. Kube-proxy управляет сетевыми правилами на узлах для обеспечения обнаружения служб и балансировки нагрузки.


Что такое Service в Kubernetes и каковы его типы?

Ответ:

Service — это абстрактный способ предоставления приложения, работающего на наборе Pod'ов, в качестве сетевой службы. Он предоставляет стабильный IP-адрес и DNS-имя для группы Pod'ов. Распространенные типы включают ClusterIP (внутренний для кластера), NodePort (предоставляет службу на статический порт по IP-адресу каждого узла) и LoadBalancer (предоставляет службу внешне, используя балансировщик нагрузки поставщика облачных услуг).


Объясните назначение ReplicaSet.

Ответ:

ReplicaSet гарантирует, что в любой момент времени работает заданное количество реплик Pod'ов. Его основная цель — поддержание стабильности и доступности набора Pod'ов. Хотя вы можете использовать ReplicaSet напрямую, обычно они управляются Deployments для более продвинутых функций, таких как поэтапные обновления.


Что такое kubectl и какова его основная функция?

Ответ:

kubectl — это инструмент командной строки для взаимодействия с кластером Kubernetes. Он позволяет пользователям выполнять команды для кластеров Kubernetes, развертывать приложения, проверять и управлять ресурсами кластера, а также просматривать журналы. Он взаимодействует с сервером API Kubernetes.


Какова роль etcd в Kubernetes?

Ответ:

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


Advanced Kubernetes Topics and Architecture

Explain the concept of a Kubernetes Operator and provide an example of when you would use one.

Answer:

A Kubernetes Operator is a method of packaging, deploying, and managing a Kubernetes-native application. It extends Kubernetes API to create, configure, and manage instances of complex applications. You would use an Operator for stateful applications like databases (e.g., Cassandra, MySQL) to automate tasks like backups, upgrades, and scaling.


Describe the purpose of a Custom Resource Definition (CRD) in Kubernetes.

Answer:

A Custom Resource Definition (CRD) allows you to define your own custom resources in Kubernetes, extending the Kubernetes API. This enables you to store and retrieve structured data that Kubernetes can manage. CRDs are fundamental for building Operators and defining application-specific objects.


How does the Kubernetes API Server handle authentication and authorization for requests?

Answer:

The API Server handles authentication through various methods like client certificates, bearer tokens, or service account tokens. After authentication, authorization is performed using modules like RBAC (Role-Based Access Control), Node authorization, or ABAC (Attribute-Based Access Control). RBAC is the most common, defining roles with permissions and binding them to users or service accounts.


What is the difference between a DaemonSet and a Deployment in Kubernetes?

Answer:

A Deployment manages a set of identical pods, ensuring a desired number of replicas are running across the cluster, typically for stateless applications. A DaemonSet ensures that all (or some) nodes run a copy of a pod, useful for cluster-level services like log collectors (e.g., Fluentd) or monitoring agents (e.g., Node Exporter) that need to run on every node.


Explain the concept of Pod Security Policies (PSPs) and why they are being deprecated.

Answer:

Pod Security Policies (PSPs) were an admission controller that enforced security standards on pods and containers. They allowed cluster administrators to control security-sensitive aspects like privileged mode, host network access, and volume types. PSPs are being deprecated in favor of Pod Security Admission (PSA) and policy engines like OPA Gatekeeper, which offer more flexible and granular control.


How do you achieve high availability for the Kubernetes control plane?

Answer:

High availability for the control plane is achieved by running multiple instances of the API Server, etcd, Controller Manager, and Scheduler. etcd typically runs as a quorum-based cluster (e.g., 3 or 5 nodes). A load balancer is placed in front of the API Servers to distribute traffic and provide failover.


What is a mutating admission webhook and how can it be used?

Answer:

A mutating admission webhook is an HTTP callback that can modify requests to the Kubernetes API server before they are persisted. It can inject sidecar containers, add labels/annotations, or set default values for fields. For example, it can automatically inject a istio-proxy sidecar into pods for service mesh integration.


Describe the role of etcd in a Kubernetes cluster.

Answer:

etcd serves as Kubernetes' consistent and highly available key-value store. It stores all cluster data, including configuration, state, and metadata for all Kubernetes objects (pods, deployments, services, etc.). It's critical for the cluster's operation, and its availability directly impacts the cluster's health.


How does Kubernetes handle network policy enforcement?

Answer:

Kubernetes Network Policies are specifications that define how groups of pods are allowed to communicate with each other and with external endpoints. They are implemented by a network plugin (CNI) that supports NetworkPolicy, such as Calico, Cilium, or Weave Net. The CNI plugin translates these policies into firewall rules.


What are Taints and Tolerations, and how are they used for pod scheduling?

Answer:

Taints are applied to nodes, marking them as 'unsuitable' for certain pods unless those pods have matching Tolerations. Tolerations are applied to pods, allowing them to be scheduled on tainted nodes. This mechanism is used to reserve nodes for specific workloads (e.g., GPU nodes) or to evict pods from unhealthy nodes.


Продвинутые темы и архитектура Kubernetes

Объясните концепцию Kubernetes Operator и приведите пример его использования.

Ответ:

Kubernetes Operator — это метод упаковки, развертывания и управления приложениями, созданными для Kubernetes. Он расширяет API Kubernetes для создания, настройки и управления экземплярами сложных приложений. Оператор используется для приложений с состоянием, таких как базы данных (например, Cassandra, MySQL), для автоматизации таких задач, как резервное копирование, обновления и масштабирование.


Опишите назначение Custom Resource Definition (CRD) в Kubernetes.

Ответ:

Custom Resource Definition (CRD) позволяет определять собственные пользовательские ресурсы в Kubernetes, расширяя API Kubernetes. Это дает возможность хранить и извлекать структурированные данные, которыми может управлять Kubernetes. CRD являются основой для создания Операторов и определения объектов, специфичных для приложений.


Как Kubernetes API Server обрабатывает аутентификацию и авторизацию запросов?

Ответ:

API Server обрабатывает аутентификацию с помощью различных методов, таких как клиентские сертификаты, токены-носители или токены учетных записей служб. После аутентификации авторизация выполняется с использованием модулей, таких как RBAC (Role-Based Access Control), Node authorization или ABAC (Attribute-Based Access Control). RBAC является наиболее распространенным, определяя роли с разрешениями и связывая их с пользователями или учетными записями служб.


В чем разница между DaemonSet и Deployment в Kubernetes?

Ответ:

Deployment управляет набором идентичных Pod'ов, обеспечивая наличие желаемого количества реплик в кластере, обычно для stateless-приложений. DaemonSet гарантирует, что все (или некоторые) узлы запускают копию Pod'а, что полезно для служб уровня кластера, таких как сборщики логов (например, Fluentd) или агенты мониторинга (например, Node Exporter), которые должны работать на каждом узле.


Объясните концепцию Pod Security Policies (PSPs) и почему они устаревают.

Ответ:

Pod Security Policies (PSPs) были контроллером допуска, который обеспечивал соблюдение стандартов безопасности для Pod'ов и контейнеров. Они позволяли администраторам кластера контролировать критически важные аспекты безопасности, такие как привилегированный режим, доступ к сетевому интерфейсу хоста и типы томов. PSP устаревают в пользу Pod Security Admission (PSA) и движков политик, таких как OPA Gatekeeper, которые предлагают более гибкий и гранулированный контроль.


Как обеспечить высокую доступность для control plane Kubernetes?

Ответ:

Высокая доступность control plane достигается путем запуска нескольких экземпляров API Server, etcd, Controller Manager и Scheduler. etcd обычно работает как кластер на основе кворума (например, 3 или 5 узлов). Балансировщик нагрузки размещается перед API Server'ами для распределения трафика и обеспечения отказоустойчивости.


Что такое mutating admission webhook и как его можно использовать?

Ответ:

Mutating admission webhook — это HTTP-обратный вызов, который может изменять запросы к серверу API Kubernetes перед их сохранением. Он может внедрять sidecar-контейнеры, добавлять метки/аннотации или устанавливать значения по умолчанию для полей. Например, он может автоматически внедрять sidecar istio-proxy в Pod'ы для интеграции с service mesh.


Опишите роль etcd в кластере Kubernetes.

Ответ:

etcd служит согласованным и высокодоступным хранилищем ключ-значение для Kubernetes. Он хранит все данные кластера, включая конфигурацию, состояние и метаданные для всех объектов Kubernetes (Pod'ы, Deployment'ы, Service'ы и т. д.). Он критически важен для работы кластера, и его доступность напрямую влияет на работоспособность кластера.


Как Kubernetes обеспечивает соблюдение сетевых политик?

Ответ:

Kubernetes Network Policies — это спецификации, которые определяют, как группы Pod'ов могут взаимодействовать друг с другом и с внешними конечными точками. Они реализуются сетевым плагином (CNI), который поддерживает NetworkPolicy, таким как Calico, Cilium или Weave Net. Плагин CNI преобразует эти политики в правила брандмауэра.


Что такое Taints и Tolerations и как они используются для планирования Pod'ов?

Ответ:

Taints применяются к узлам, помечая их как "неподходящие" для определенных Pod'ов, если эти Pod'ы не имеют соответствующих Tolerations. Tolerations применяются к Pod'ам, позволяя им планироваться на помеченные узлы. Этот механизм используется для резервирования узлов для конкретных рабочих нагрузок (например, узлов с GPU) или для вытеснения Pod'ов с нерабочих узлов.


Вопросы по ролям (Разработчик, Администратор, DevOps)

Разработчик: Как бы вы устранили проблему с Pod'ом, который завис в состоянии "Pending"?

Ответ:

Я бы сначала проверил kubectl describe pod <pod-name>, чтобы увидеть события, указывающие на проблемы, такие как нехватка ресурсов (CPU/память), проблемы с привязкой к узлу (node affinity/taint) или не связанные Persistent Volume Claims. Затем я бы изучил состояния узла и доступность ресурсов с помощью kubectl describe node <node-name>.


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

Ответ:

Я бы использовал стратегию RollingUpdate для Deployment. Это позволяет постепенно заменять старые Pod'ы новыми, обеспечивая непрерывную доступность. Я бы также определил readiness probes, чтобы убедиться, что новые Pod'ы здоровы, прежде чем на них будет направлен трафик.


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

Ответ:

Я бы начал с проверки kubectl describe service <service-name>, чтобы убедиться в правильности конфигурации и готовности конечных точек. Затем я бы проверил Pod'ы, обслуживающие службу, на предмет их работоспособности (kubectl get pods -o wide) и просмотрел их логи на наличие ошибок приложения. Сетевые политики или правила брандмауэра также могут быть фактором.


Администратор: Как вы гарантируете, что только авторизованные пользователи могут получить доступ к определенным ресурсам в кластере Kubernetes?

Ответ:

Я бы реализовал Role-Based Access Control (RBAC). Это включает определение Roles (разрешений в пределах пространства имен) или ClusterRoles (разрешений в масштабе всего кластера), а затем их привязку к пользователям или учетным записям служб с помощью RoleBindings или ClusterRoleBindings.


Администратор: Опишите сценарий, в котором вы бы использовали NetworkPolicy.

Ответ:

Я бы использовал NetworkPolicy для управления потоком трафика между Pod'ами или между Pod'ами и внешними конечными точками. Например, для изоляции Pod'а базы данных, чтобы только определенные Pod'ы приложения могли к нему подключаться, или для ограничения исходящего трафика из пространства имен разработки.


DevOps: Как вы безопасно управляете секретами (например, API-ключами, учетными данными базы данных) в Kubernetes?

Ответ:

Хотя Kubernetes Secrets предоставляют базовое кодирование, для реальной безопасности я бы интегрировался с внешними решениями для управления секретами, такими как HashiCorp Vault, AWS Secrets Manager или Azure Key Vault. Эти решения могут внедрять секреты непосредственно в Pod'ы или использовать CSI-драйверы для динамического монтирования, избегая прямого хранения конфиденциальных данных в Git.


DevOps: Объясните назначение Helm-чарта и как он приносит пользу CI/CD пайплайнам.

Ответ:

Helm-чарт — это менеджер пакетов для Kubernetes, который объединяет все необходимые ресурсы Kubernetes (Deployments, Services, ConfigMaps и т. д.) в единый, версионируемый блок. В CI/CD он обеспечивает согласованное, повторяемое развертывание в различных средах, легкое обновление/откат версий и параметризацию конфигураций.


DevOps: Как бы вы реализовали непрерывное развертывание для приложения микросервисов в Kubernetes?

Ответ:

Я бы использовал подход GitOps с инструментом, таким как Argo CD или Flux. После слияния и тестирования кода CI-пайплайн собирает образ Docker и обновляет тег образа в манифесте Kubernetes (например, в репозитории Git). Затем GitOps-оператор обнаруживает изменение в Git и автоматически применяет его к кластеру, обеспечивая синхронизацию желаемого состояния.


DevOps: Какие ключевые метрики вы бы отслеживали для кластера Kubernetes и его приложений?

Ответ:

Для кластера я бы отслеживал использование ресурсов узлов (CPU, память, диск), задержку API Server и состояние etcd. Для приложений ключевые метрики включают использование CPU/памяти Pod'ами, частоту запросов, частоту ошибок, задержку и специфичные для приложения бизнес-метрики. Prometheus и Grafana являются распространенными инструментами для этого.


DevOps: Опишите, как бы вы обрабатывали постоянное хранилище для stateful-приложений в Kubernetes.

Ответ:

Я бы использовал PersistentVolumes (PV) и PersistentVolumeClaims (PVC). PVC запрашивает хранилище у PV, которое подготавливается StorageClass. Это абстрагирует базовую инфраструктуру хранения, позволяя приложениям запрашивать хранилище, не зная его специфики, и обеспечивает постоянство данных, даже если Pod'ы перепланируются.


Устранение неполадок и отладка Kubernetes

Ваш pod завис в состоянии "Pending". Каковы распространенные причины и как бы вы устранили проблему?

Ответ:

Распространенные причины включают нехватку ресурсов (CPU/память), метки узлов/допуски (taints/tolerations) или проблемы с постоянными томами. Я бы использовал kubectl describe pod <pod-name>, чтобы проверить события, связанные с ошибками планирования, запросами ресурсов и статусом привязки томов.


Pod находится в состоянии "CrashLoopBackOff". Что это означает и как это отладить?

Ответ:

Это означает, что контейнер внутри pod'а многократно запускается и аварийно завершает работу. Я бы сначала проверил kubectl logs <pod-name> на наличие ошибок приложения. Если логи не помогают, я бы использовал kubectl describe pod <pod-name>, чтобы проверить события OOMKilled или сбои readiness/liveness probe.


Как проверить логи конкретного контейнера в pod'е с несколькими контейнерами?

Ответ:

Вы можете указать имя контейнера с помощью флага -c в команде kubectl logs. Например: kubectl logs <pod-name> -c <container-name>. Это позволяет изолировать логи от конкретной службы.


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

Ответ:

Я бы проверил тип службы (например, NodePort, LoadBalancer) и ее внешний IP/порт. Затем я бы проверил правила брандмауэра, группы безопасности и сетевые политики. Наконец, я бы проверил, соответствуют ли селекторы службы меткам pod'ов, и работают ли pod'ы корректно и находятся ли в здоровом состоянии.


Вы подозреваете, что сетевая политика блокирует трафик к вашему приложению. Как бы вы это подтвердили?

Ответ:

Я бы использовал kubectl describe networkpolicy <policy-name>, чтобы понять ее правила. Затем я бы проверил метки и пространства имен pod'а, чтобы увидеть, нацелены ли на них какие-либо политики. Инструменты, такие как kube-no-trouble или netshoot в отладочном pod'е, также могут помочь протестировать связность.


Как получить доступ к командной оболочке (shell) в запущенном контейнере для целей отладки?

Ответ:

Вы можете использовать kubectl exec -it <pod-name> -- /bin/bash (или /bin/sh, если bash недоступен). Это позволит вам проверить файловую систему контейнера, выполнять команды и диагностировать проблемы непосредственно в его среде.


Каковы распространенные причины "ImagePullBackOff" и как их устранить?

Ответ:

Распространенные причины включают неправильное имя/тег образа, проблемы с аутентификацией в приватном реестре или проблемы с сетевой связностью с реестром. Я бы проверил kubectl describe pod <pod-name> на наличие ошибок при извлечении образа и проверил имена образов, учетные данные реестра (секреты) и сетевой доступ.


Ваше приложение испытывает высокую задержку, но pod'ы выглядят здоровыми. В чем может быть проблема?

Ответ:

Это может указывать на конкуренцию за ресурсы (CPU throttling), неэффективный код приложения или проблемы с внешними зависимостями. Я бы проверил метрики использования ресурсов (CPU/память) для pod'ов, просмотрел логи приложения на наличие медленных запросов и проверил сетевую задержку до внешних служб.


Как бы вы отладили сбой liveness или readiness probe?

Ответ:

Я бы проверил kubectl describe pod <pod-name> на наличие событий сбоя probe и конкретную команду/путь, используемый probe. Затем я бы использовал kubectl logs <pod-name>, чтобы увидеть, аварийно ли завершает работу приложение или не отвечает ли оно на конечную точку probe. Выполнение команды probe вручную внутри контейнера также может помочь.


Узел находится в состоянии "NotReady". Каковы типичные причины и как их расследовать?

Ответ:

Типичные причины включают незапущенный kubelet, сетевые проблемы, препятствующие связи с control plane, или нехватку ресурсов узла. Я бы подключился к узлу по SSH, проверил systemctl status kubelet, просмотрел логи kubelet (journalctl -u kubelet) и проверил сетевую связность с API Server.


Лучшие практики и безопасность Kubernetes

Каковы ключевые лучшие практики для обеспечения безопасности кластеров Kubernetes?

Ответ:

Ключевые практики включают внедрение Role-Based Access Control (RBAC) с принципом наименьших привилегий, регулярное обновление Kubernetes и его компонентов, сканирование образов контейнеров на наличие уязвимостей, сегментацию сети с использованием Network Policies и обеспечение безопасности доступа к API Server.


Объясните принцип "наименьших привилегий" в Kubernetes RBAC.

Ответ:

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


Как Network Policies повышают безопасность в кластере Kubernetes?

Ответ:

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


Каково значение сканирования образов в CI/CD пайплайне для развертываний Kubernetes?

Ответ:

Сканирование образов выявляет известные уязвимости (CVE) и неправильные конфигурации в образах контейнеров перед развертыванием. Интеграция его в CI/CD гарантирует, что в реестры будут помещены и развернуты в кластере только безопасные, соответствующие требованиям образы, предотвращая запуск уязвимого программного обеспечения.


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

Ответ:

Хотя Kubernetes Secrets обеспечивают базовое хранение, они кодируются в base64, а не шифруются при хранении по умолчанию. Лучшие практики включают использование внешних решений для управления секретами, таких как HashiCorp Vault, AWS Secrets Manager или Azure Key Vault, часто интегрируемых через CSI-драйверы или внешние операторы секретов, для шифрования и управления конфиденциальными данными.


Что такое Pod Security Standards (PSS) и почему они важны?

Ответ:

Pod Security Standards — это встроенные средства безопасности, которые определяют различные уровни изоляции для pod'ов (Privileged, Baseline, Restricted). Они помогают применять лучшие практики безопасности, предотвращая запуск pod'ов с чрезмерно разрешительными настройками, такими как доступ root или монтирование путей хоста.


Как можно предотвратить атаки с повышением привилегий в кластере Kubernetes?

Ответ:

Предотвращение повышения привилегий включает несколько мер: применение Pod Security Standards, использование неизменяемых контейнеров, ограничение доступа к хосту, внедрение строгого RBAC и регулярный аудит конфигураций кластера и действий пользователей. Ограничение возможностей и запрет привилегированных контейнеров имеют решающее значение.


Какова роль Service Mesh (например, Istio, Linkerd) в безопасности Kubernetes?

Ответ:

Service Mesh повышает безопасность, предоставляя такие функции, как mTLS (взаимный TLS) для зашифрованного взаимодействия между службами, детализированные политики контроля доступа и шифрование трафика. Он централизует конфигурации безопасности и наблюдаемость для взаимодействия микросервисов.


Объясните концепцию "неизменяемой инфраструктуры" в Kubernetes.

Ответ:

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


Как квоты ресурсов и диапазоны ограничений способствуют стабильности и безопасности кластера?

Ответ:

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


Практические и прикладные задачи Kubernetes

Ваш Pod постоянно аварийно завершает работу. Как бы вы устранили эту проблему?

Ответ:

Я бы начал с проверки kubectl describe pod <pod-name> для получения событий и статуса. Затем я бы использовал kubectl logs <pod-name> для просмотра логов приложения. Если это цикл аварийного завершения, я бы проверил kubectl logs --previous <pod-name> для логов последнего завершенного контейнера.


Deployment завис в состоянии ожидания (pending). Каковы распространенные причины и как их диагностировать?

Ответ:

Распространенные причины включают нехватку ресурсов (CPU/память), метки узлов/допуски (taints/tolerations) или проблемы с селекторами узлов/привязкой (node selectors/affinity). Я бы использовал kubectl describe pod <pod-name>, чтобы увидеть события планирования, и kubectl get events --field-selector involvedObject.kind=Node, чтобы проверить состояние узлов.


Как бы вы сделали доступным для внешнего трафика stateless приложение, работающее в Deployment?

Ответ:

Я бы создал Service типа LoadBalancer или NodePort для предоставления доступа к Deployment. Для более продвинутой маршрутизации и завершения SSL я бы использовал ресурс Ingress, который требует Ingress Controller.


Вам нужно выполнить последовательное обновление (rolling update) Deployment без простоя. Как Kubernetes обрабатывает это и каковы ключевые соображения?

Ответ:

Kubernetes Deployments обрабатывают последовательные обновления по умолчанию, создавая новые Pod'ы перед завершением старых на основе настроек maxUnavailable и maxSurge. Ключевые соображения включают правильные readiness probes, достаточный объем выделенных ресурсов и тестирование новой версии перед полным развертыванием.


Опишите сценарий, когда вы бы использовали ConfigMap вместо Secret.

Ответ:

Я бы использовал ConfigMap для неконфиденциальных данных конфигурации, таких как переменные окружения приложения или файлы конфигурации. Я бы использовал Secret для конфиденциальных данных, таких как API-ключи, учетные данные базы данных или TLS-сертификаты, которые по умолчанию хранятся в зашифрованном виде.


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

Ответ:

Я бы использовал Node Selectors или Node Affinity. Node Selectors проще для точных совпадений (nodeSelector: {gpu: 'true'}). Node Affinity предлагает большую гибкость с правилами requiredDuringSchedulingIgnoredDuringExecution или preferredDuringSchedulingIgnoredDuringExecution.


Service не маршрутизирует трафик на свои Pod'ы. Какие шаги вы предпримете для отладки этого?

Ответ:

Сначала проверьте kubectl describe service <service-name>, чтобы убедиться, что его селектор соответствует меткам Pod'ов. Затем проверьте kubectl get endpoints <service-name>, чтобы увидеть, перечислены ли какие-либо IP-адреса Pod'ов. Наконец, убедитесь, что Pod'ы здоровы и их readiness probes проходят успешно.


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

Ответ:

Я бы использовал ресурс Kubernetes Job. Job создает один или несколько Pod'ов и гарантирует, что указанное количество из них успешно завершится. Для запланированных задач я бы использовал CronJob.


Объясните назначение PersistentVolume (PV) и PersistentVolumeClaim (PVC).

Ответ:

PersistentVolume (PV) — это часть хранилища в кластере, предоставленная администратором. PersistentVolumeClaim (PVC) — это запрос на хранилище от пользователя. PVC связывается с подходящим PV, позволяя Pod'ам использовать постоянное хранилище независимо от их жизненного цикла.


Как бы вы масштабировали Deployment вручную и автоматически?

Ответ:

Вручную я бы использовал kubectl scale deployment <deployment-name> --replicas=<number>. Автоматически я бы использовал Horizontal Pod Autoscaler (HPA), который масштабирует количество Pod'ов в Deployment или ReplicaSet на основе наблюдаемой загрузки CPU или других пользовательских метрик.


Резюме

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

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