200 вопросов по Kubernetes
200 вопросов по Kubernetes
Основы Kubernetes
Вопрос
Что такое Kubernetes?
Ответ
Kubernetes — это платформа с открытым исходным кодом для автоматизации развертывания, масштабирования и управления контейнеризированными приложениями.
Вопрос
Какова основная цель Kubernetes?
Ответ
Основная цель Kubernetes — обеспечение надежного, масштабируемого и декларативного управления жизненным циклом распределённых приложений, упакованных в контейнеры.
Вопрос
Из каких компонентов состоит кластер Kubernetes?
Ответ
Кластер Kubernetes состоит из управляющей плоскости (control plane) и рабочих узлов (worker nodes). Управляющая плоскость управляет состоянием кластера, а рабочие узлы выполняют рабочие нагрузки.
Вопрос
Что такое Pod в Kubernetes?
Ответ
Pod — это наименьшая исполняемая единица в Kubernetes. Он представляет собой группу одного или нескольких контейнеров, которые совместно используют сетевые ресурсы, хранилище и спецификацию выполнения.
Вопрос
Может ли Pod содержать несколько контейнеров?
Ответ
Да, Pod может содержать несколько контейнеров, которые тесно связаны и должны работать на одном хосте.
Вопрос
Как создаётся Pod?
Ответ
Pod создаётся путём отправки манифеста в формате YAML или JSON API-серверу Kubernetes с помощью команды kubectl apply.
Пример:
apiVersion: v1
kind: Pod
metadata:
name: nginx-pod
spec:
containers:
- name: nginx
image: nginx:latest
Вопрос
Что такое Deployment в Kubernetes?
Ответ
Deployment — это контроллер, который управляет желаемым состоянием ReplicaSet и обеспечивает обновление и откат приложений без простоя.
Вопрос
Зачем используется ReplicaSet?
Ответ
ReplicaSet гарантирует, что заданное количество реплик Pod будет работать в любой момент времени.
Вопрос
В чём разница между Deployment и ReplicaSet?
Ответ
Deployment предоставляет декларативные обновления для Pods и ReplicaSets, включая стратегии развёртывания и отката. ReplicaSet отвечает только за поддержание количества реплик.
Вопрос
Что такое Service в Kubernetes?
Ответ
Service — это абстракция, которая определяет логический набор Pods и политику доступа к ним. Она обеспечивает стабильный IP-адрес и DNS-имя для доступа к приложению.
Вопрос
Какие типы Service существуют?
Ответ
Существуют следующие типы Service: ClusterIP, NodePort, LoadBalancer и ExternalName.
Вопрос
Что делает Service типа ClusterIP?
Ответ
Service типа ClusterIP предоставляет внутренний IP-адрес, доступный только внутри кластера Kubernetes.
Вопрос
Что делает Service типа NodePort?
Ответ
Service типа NodePort открывает один и тот же порт на всех узлах кластера и перенаправляет трафик на соответствующие Pods.
Вопрос
Что делает Service типа LoadBalancer?
Ответ
Service типа LoadBalancer интегрируется с облачным провайдером и создаёт внешний балансировщик нагрузки для маршрутизации трафика в кластер.
Вопрос
Что делает Service типа ExternalName?
Ответ
Service типа ExternalName возвращает CNAME-запись и позволяет обращаться к внешнему сервису через DNS-имя внутри кластера.
Вопрос
Что такое Namespace в Kubernetes?
Ответ
Namespace — это механизм для разделения ресурсов кластера между несколькими пользователями, командами или проектами.
Вопрос
Как посмотреть все Pods в текущем Namespace?
Ответ
Команда kubectl get pods показывает все Pods в текущем Namespace.
Вопрос
Как посмотреть все ресурсы во всех Namespaces?
Ответ
Команда kubectl get all --all-namespaces выводит все ресурсы во всех Namespaces.
Вопрос
Что такое kubectl?
Ответ
kubectl — это командная строка для взаимодействия с кластером Kubernetes через API-сервер.
Вопрос
Как проверить состояние кластера?
Ответ
Команда kubectl cluster-info показывает информацию о состоянии основных компонентов кластера.
Вопрос
Как проверить, готовы ли узлы кластера?
Ответ
Команда kubectl get nodes выводит список узлов и их статус (Ready/NotReady).
Вопрос
Что такое kubeconfig?
Ответ
kubeconfig — это файл конфигурации, используемый kubectl для подключения к одному или нескольким кластерам Kubernetes.
Вопрос
Где обычно находится файл kubeconfig?
Ответ
Файл kubeconfig обычно находится по пути ~/.kube/config.
Вопрос
Что такое контекст (context) в kubeconfig?
Ответ
Контекст в kubeconfig связывает кластер, пользователя и Namespace, позволяя быстро переключаться между окружениями.
Вопрос
Как переключиться между контекстами?
Ответ
Команда kubectl config use-context <имя> переключает текущий контекст.
Вопрос
Что такое etcd в Kubernetes?
Ответ
etcd — это распределённое ключ-значение хранилище, используемое Kubernetes для хранения всего состояния кластера.
Вопрос
Какой компонент Kubernetes отвечает за планирование Pods на узлы?
Ответ
Scheduler отвечает за выбор подходящего узла для размещения нового Pod на основе доступных ресурсов и ограничений.
Вопрос
Что делает kubelet?
Ответ
kubelet — это агент, работающий на каждом узле, который обеспечивает запуск контейнеров в Pods и сообщает о состоянии узла управляющей плоскости.
Вопрос
Что делает kube-proxy?
Ответ
kube-proxy поддерживает сетевые правила на узлах и обеспечивает маршрутизацию трафика к Services и их Pods.
Вопрос
Что такое Control Plane?
Ответ
Control Plane — это набор компонентов (API Server, etcd, Scheduler, Controller Manager), управляющих общим состоянием кластера.
Вопрос
Что такое Worker Node?
Ответ
Worker Node — это машина (физическая или виртуальная), на которой запускаются контейнеризированные приложения под управлением kubelet.
Вопрос
Как Kubernetes обеспечивает отказоустойчивость приложений?
Ответ
Kubernetes обеспечивает отказоустойчивость через ReplicaSet, автоматическое перезапускание Pods, перепланирование на другие узлы и самовосстановление.
Вопрос
Что такое Desired State и Current State?
Ответ
Desired State — это целевое состояние системы, заданное пользователем в манифестах. Current State — это фактическое состояние, наблюдаемое в кластере. Kubernetes постоянно стремится выровнять Current State до Desired State.
Вопрос
Как Kubernetes узнаёт, что Pod не работает?
Ответ
Kubernetes использует readiness и liveness probes для проверки работоспособности контейнеров в Pod.
Вопрос
Что такое liveness probe?
Ответ
Liveness probe определяет, жив ли контейнер. Если проверка не проходит, Kubernetes перезапускает контейнер.
Вопрос
Что такое readiness probe?
Ответ
Readiness probe определяет, готов ли контейнер принимать трафик. Если проверка не проходит, Pod исключается из балансировки трафика.
Вопрос
Как задать liveness probe в манифесте?
Ответ
Пример:
livenessProbe:
httpGet:
path: /health
port: 8080
initialDelaySeconds: 5
periodSeconds: 10
Вопрос
Как задать readiness probe в манифесте?
Ответ
Пример:
readinessProbe:
exec:
command: ["cat", "/tmp/ready"]
initialDelaySeconds: 5
periodSeconds: 5
Вопрос
Что такое ConfigMap?
Ответ
ConfigMap — это объект Kubernetes, используемый для хранения неконфиденциальных данных конфигурации в парах ключ-значение.
Вопрос
Как использовать ConfigMap в Pod?
Ответ
ConfigMap можно смонтировать как том или передать как переменные окружения.
Пример через переменные:
env:
- name: DB_HOST
valueFrom:
configMapKeyRef:
name: app-config
key: database_host
Вопрос
Что такое Secret?
Ответ
Secret — это объект Kubernetes для хранения конфиденциальных данных, таких как пароли, токены и ключи.
Вопрос
Как создать Secret из литерала?
Ответ
Команда:
kubectl create secret generic db-secret --from-literal=username=admin --from-literal=password=secret123
Вопрос
Как использовать Secret в Pod?
Ответ
Secret можно передать как переменные окружения или смонтировать как том.
Пример:
env:
- name: DB_PASSWORD
valueFrom:
secretKeyRef:
name: db-secret
key: password
Вопрос
В чём разница между ConfigMap и Secret?
Ответ
ConfigMap хранит обычные данные конфигурации, а Secret предназначен для чувствительных данных и хранится в base64-кодировке (без шифрования по умолчанию).
Вопрос
Что такое PersistentVolume (PV)?
Ответ
PersistentVolume — это часть кластера, представляющая собой физическое или сетевое хранилище, доступное для использования Pods.
Вопрос
Что такое PersistentVolumeClaim (PVC)?
Ответ
PersistentVolumeClaim — это запрос на хранилище от пользователя. PVC привязывается к подходящему PV.
Вопрос
Как связать PVC с Pod?
Ответ
В спецификации Pod указывается volume типа persistentVolumeClaim.
Пример:
volumes:
- name: storage
persistentVolumeClaim:
claimName: my-pvc
Вопрос
Что такое StorageClass?
Ответ
StorageClass описывает классы хранилища (например, SSD, HDD) и определяет параметры динамического выделения томов.
Вопрос
Как включить динамическое выделение томов?
Ответ
Нужно создать PVC с указанием storageClassName, соответствующего существующему StorageClass.
Вопрос
Что такое Headless Service?
Ответ
Headless Service — это Service без ClusterIP (clusterIP: None), который позволяет напрямую обращаться к отдельным Pods через DNS.
Вопрос
Когда используется Headless Service?
Ответ
Headless Service используется для stateful-приложений, когда каждому Pod требуется уникальное сетевое имя, например, в StatefulSet.
Вопрос
Что такое StatefulSet?
Ответ
StatefulSet — это контроллер для управления stateful-приложениями, обеспечивающий гарантированный порядок запуска, уникальные имена Pods и постоянное хранилище.
Вопрос
В чём отличие StatefulSet от Deployment?
Ответ
StatefulSet сохраняет идентичность каждого Pod (имя, сетевой адрес, хранилище) даже после перезапуска, в то время как Deployment рассматривает Pods как заменяемые.
Вопрос
Что такое DaemonSet?
Ответ
DaemonSet гарантирует, что на каждом узле (или подмножестве узлов) запущен ровно один экземпляр Pod.
Вопрос
Для чего используется DaemonSet?
Ответ
DaemonSet используется для системных задач, таких как сбор логов, мониторинг или сетевые плагины (например, Fluentd, Prometheus Node Exporter).
Вопрос
Что такое Job?
Ответ
Job — это контроллер, который создаёт один или несколько Pods для выполнения задачи до успешного завершения.
Вопрос
Что такое CronJob?
Ответ
CronJob — это контроллер, который запускает Jobs по расписанию, аналогично cron в Linux.
Вопрос
Как задать расписание в CronJob?
Ответ
Расписание задаётся в поле schedule в формате cron.
Пример:
schedule: "*/5 * * * *"
Вопрос
Что такое Init Container?
Ответ
Init Container — это контейнер, который запускается до основных контейнеров в Pod и должен завершиться успешно, чтобы основные контейнеры начали работу.
Вопрос
Для чего используются Init Containers?
Ответ
Init Containers используются для подготовки среды: загрузки конфигурации, ожидания зависимостей, генерации сертификатов и других предварительных действий.
Сети и Ingress
Вопрос
Что такое Ingress в Kubernetes?
Ответ
Ingress — это API-объект, управляющий внешним доступом к сервисам в кластере, обычно через HTTP/HTTPS. Он предоставляет маршрутизацию трафика, TLS-терминацию и балансировку нагрузки на уровне приложения.
Вопрос
Как работает Ingress Controller?
Ответ
Ingress Controller — это компонент, который реализует логику обработки правил Ingress. Он отслеживает объекты Ingress и настраивает обратный прокси (например, NGINX, Traefik) в соответствии с их спецификациями.
Вопрос
Как создать простой Ingress?
Ответ
Пример манифеста:
apiVersion: networking.k8s.io/v1
kind: Ingress
meta
name: example-ingress
spec:
rules:
- host: myapp.local
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: my-service
port:
number: 80
Вопрос
Что такое IngressClass?
Ответ
IngressClass определяет тип контроллера Ingress, который должен обрабатывать конкретный ресурс Ingress. Это позволяет использовать несколько Ingress-контроллеров в одном кластере.
Вопрос
Можно ли использовать TLS с Ingress?
Ответ
Да, Ingress поддерживает TLS. Для этого нужно указать секрет с сертификатом и ключом в поле tls.
Пример:
spec:
tls:
- hosts:
- myapp.local
secretName: my-tls-secret
Вопрос
Что такое NetworkPolicy?
Ответ
NetworkPolicy — это ресурс Kubernetes, определяющий правила сетевого трафика между Pods. Он позволяет ограничить входящие и исходящие соединения на основе меток, портов и IP-адресов.
Вопрос
Как разрешить трафик только между Pods с определённой меткой?
Ответ
Пример NetworkPolicy:
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
meta
name: allow-from-frontend
spec:
podSelector:
matchLabels:
app: backend
ingress:
- from:
- podSelector:
matchLabels:
app: frontend
Вопрос
Поддерживает ли NetworkPolicy исходящий трафик?
Ответ
Да, NetworkPolicy может ограничивать как входящий (ingress), так и исходящий (egress) трафик.
Вопрос
Что такое CNI в Kubernetes?
Ответ
CNI (Container Network Interface) — это спецификация и набор плагинов для настройки сетевых интерфейсов контейнеров. Kubernetes использует CNI для реализации сетевой модели Pod-to-Pod.
Вопрос
Какие популярные CNI-плагины существуют?
Ответ
Популярные CNI-плагины: Calico, Flannel, Cilium, Weave Net, Canal.
Безопасность
Вопрос
Что такое RBAC в Kubernetes?
Ответ
RBAC (Role-Based Access Control) — это механизм контроля доступа, основанный на ролях. Он определяет, какие действия пользователи или сервисные аккаунты могут выполнять в кластере.
Вопрос
Из каких компонентов состоит RBAC?
Ответ
RBAC состоит из:
- Role / ClusterRole — определяют набор разрешений;
- ServiceAccount — представляет идентичность в кластере;
- RoleBinding / ClusterRoleBinding — связывают роли с субъектами (пользователями или ServiceAccount).
Вопрос
В чём разница между Role и ClusterRole?
Ответ
Role действует только в пределах одного Namespace, а ClusterRole применяется ко всему кластеру.
Вопрос
Как дать ServiceAccount права на чтение Pods в Namespace?
Ответ
Создайте Role с правами get, list на ресурс pods, затем RoleBinding, связывающий этот Role с ServiceAccount.
Пример Role:
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
meta
namespace: default
name: pod-reader
rules:
- apiGroups: [""]
resources: ["pods"]
verbs: ["get", "list"]
Вопрос
Что такое ServiceAccount?
Ответ
ServiceAccount — это учётная запись, используемая Pod’ами для взаимодействия с API-сервером Kubernetes. Каждый Pod автоматически получает ServiceAccount по умолчанию, если не указан иной.
Вопрос
Можно ли запретить автоматическое монтирование токена ServiceAccount?
Ответ
Да, установите automountServiceAccountToken: false в спецификации Pod.
Вопрос
Что такое PodSecurityPolicy (PSP)?
Ответ
PodSecurityPolicy — это устаревший (deprecated в версии 1.21, удалён в 1.25) механизм, ограничивающий возможности Pods (например, запуск привилегированных контейнеров, использование hostNetwork).
Вопрос
Чем заменяется PodSecurityPolicy?
Ответ
PodSecurityPolicy заменяется на Pod Security Admission (PSA) — встроенный адмиссион-контроллер, реализующий три уровня безопасности: privileged, baseline, restricted.
Вопрос
Как включить Pod Security Admission?
Ответ
Нужно добавить label на Namespace, например:
pod-security.kubernetes.io/enforce: restricted
Вопрос
Что такое admission controller?
Ответ
Admission controller — это компонент управляющей плоскости, перехватывающий запросы к API-серверу до сохранения объекта, но после аутентификации и авторизации. Он может модифицировать или отклонить запрос.
Мониторинг и логирование
Вопрос
Как собирать логи Pods в Kubernetes?
Ответ
Логи контейнеров пишутся в stdout/stderr и доступны через kubectl logs. Для централизованного сбора используются агенты вроде Fluentd, Filebeat или Vector, отправляющие логи в системы типа Loki, Elasticsearch или Splunk.
Вопрос
Что такое sidecar-контейнер для логирования?
Ответ
Sidecar-контейнер — это дополнительный контейнер в Pod, который читает логи основного приложения (например, из файла) и отправляет их во внешнюю систему.
Вопрос
Как мониторить состояние кластера?
Ответ
Для мониторинга используются инструменты: Prometheus (сбор метрик), Grafana (визуализация), kube-state-metrics (метрики состояния объектов Kubernetes).
Вопрос
Что предоставляет Metrics Server?
Ответ
Metrics Server собирает метрики использования CPU и памяти от kubelet и делает их доступными через API /metrics.k8s.io. Эти данные используются для Horizontal Pod Autoscaler и команды kubectl top.
Вопрос
Как включить Horizontal Pod Autoscaler (HPA)?
Ответ
HPA масштабирует количество реплик Deployment на основе метрик (например, средней загрузки CPU). Требуется установленный Metrics Server.
Пример:
apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
meta
name: my-hpa
spec:
scaleTargetRef:
apiVersion: apps/v1
kind: Deployment
name: my-app
minReplicas: 2
maxReplicas: 10
metrics:
- type: Resource
resource:
name: cpu
target:
type: Utilization
averageUtilization: 50
Вопрос
Что такое Vertical Pod Autoscaler (VPA)?
Ответ
VPA автоматически корректирует запрошенные и лимитные значения CPU и памяти для контейнеров в Pod на основе их фактического использования.
Вопрос
Как получить метрики Pod?
Ответ
Команда: kubectl top pod <pod-name>
Вопрос
Как получить метрики узла?
Ответ
Команда: kubectl top node
Вопрос
Что такое liveness probe и зачем она нужна для мониторинга?
Ответ
Liveness probe позволяет Kubernetes определить, жив ли контейнер. Если проверка не проходит, Pod перезапускается, что помогает восстановить работоспособность приложения без вмешательства оператора.
Вопрос
Как экспортировать метрики приложения в Prometheus?
Ответ
Приложение должно предоставлять HTTP-эндпоинт /metrics в формате Prometheus. Затем ServiceMonitor (в случае Operator) или конфигурация scrape_configs указывает Prometheus на этот эндпоинт.
Обновления и откаты
Вопрос
Как обновить Deployment?
Ответ
Обновление происходит путём изменения образа контейнера в манифесте и применения его через kubectl apply, либо командой kubectl set image deployment/my-deploy container=new-image.
Вопрос
Какие стратегии развёртывания поддерживает Deployment?
Ответ
Deployment поддерживает две стратегии:
- RollingUpdate (по умолчанию) — постепенная замена старых Pods новыми;
- Recreate — сначала удаляются все старые Pods, затем создаются новые.
Вопрос
Как настроить параметры RollingUpdate?
Ответ
В спецификации Deployment:
strategy:
type: RollingUpdate
rollingUpdate:
maxSurge: 25%
maxUnavailable: 25%
maxSurge — сколько дополнительных Pods можно создать сверх желаемого количества.
maxUnavailable — сколько Pods может быть недоступно во время обновления.
Вопрос
Как откатить Deployment?
Ответ
Команда: kubectl rollout undo deployment/<name>
Можно указать конкретную ревизию: kubectl rollout undo deployment/<name> --to-revision=2
Вопрос
Как посмотреть историю ревизий Deployment?
Ответ
Команда: kubectl rollout history deployment/<name>
Вопрос
Что такое Canary-развёртывание?
Ответ
Canary-развёртывание — это стратегия, при которой новая версия приложения запускается параллельно со старой, и небольшая часть трафика направляется на неё для тестирования перед полным переходом.
Вопрос
Как реализовать Canary в Kubernetes?
Ответ
Canary можно реализовать с помощью двух Deployments и Service с общими метками, либо с использованием Service Mesh (например, Istio) или Ingress-контроллеров с поддержкой весов (например, NGINX Ingress с аннотацией nginx.ingress.kubernetes.io/canary-weight).
Вопрос
Что такое Blue/Green-развёртывание?
Ответ
Blue/Green — это стратегия, при которой полностью разворачивается новая версия приложения (Green), трафик переключается на неё мгновенно, а старая (Blue) сохраняется для быстрого отката.
Вопрос
Как реализовать Blue/Green в Kubernetes?
Ответ
Создаются два Deployment (blue и green). Service переключает selector на нужную версию. Или используется Ingress с двумя правилами и переключением DNS/маршрутизации.
Вопрос
Что такое Helm?
Ответ
Helm — это менеджер пакетов для Kubernetes, позволяющий упаковывать, развертывать и управлять жизненным циклом приложений через шаблоны (charts).
Расширенные возможности Kubernetes
Вопрос
Что такое Custom Resource Definition (CRD)?
Ответ
Custom Resource Definition (CRD) — это механизм расширения API Kubernetes, позволяющий создавать собственные типы ресурсов без изменения кода ядра.
Пример:
apiVersion: apiextensions.k8s.io/v1
kind: CustomResourceDefinition
meta
name: databases.mycompany.com
spec:
group: mycompany.com
versions:
- name: v1
served: true
storage: true
schema:
openAPIV3Schema:
type: object
properties:
spec:
type: object
properties:
size:
type: integer
scope: Namespaced
names:
plural: databases
singular: database
kind: Database
Вопрос
Для чего используются CRD?
Ответ
CRD используются для моделирования доменных объектов (например, баз данных, мониторинговых правил, ML-моделей) как нативных ресурсов Kubernetes.
Вопрос
Что такое Operator в Kubernetes?
Ответ
Operator — это паттерн автоматизации управления сложными приложениями, реализуемый через контроллер, который наблюдает за пользовательскими ресурсами (обычно CRD) и обеспечивает желаемое состояние.
Вопрос
Как работает Operator?
Ответ
Operator регистрирует CRD, запускает контроллер, который отслеживает события создания/изменения/удаления экземпляров этого ресурса и выполняет бизнес-логику (например, развёртывание PostgreSQL с репликацией).
Вопрос
Какие популярные Operators существуют?
Ответ
Популярные Operators: Prometheus Operator, etcd Operator, Strimzi (Kafka), cert-manager, Argo CD.
Вопрос
Что такое Helm Chart?
Ответ
Helm Chart — это упакованный шаблон манифестов Kubernetes, содержащий параметризованные YAML-файлы и метаданные для удобного развёртывания приложений.
Вопрос
Как установить Helm Chart?
Ответ
Команда:
helm install my-release bitnami/nginx
Вопрос
Что такое Helm Release?
Ответ
Helm Release — это экземпляр установленного Chart’а с конкретным набором значений (values).
Вопрос
Как обновить Helm Release?
Ответ
Команда:
helm upgrade my-release bitnami/nginx --set service.type=LoadBalancer
Вопрос
Что такое Kustomize?
Ответ
Kustomize — это встроенный в kubectl инструмент для кастомизации манифестов Kubernetes без шаблонов, использующий декларативные настройки поверх базовых ресурсов.
Вопрос
Как применить Kustomize?
Ответ
Команда:
kubectl apply -k ./overlays/production
Вопрос
Что такое Admission Controller?
Ответ
Admission Controller — это плагин в API-сервере, который перехватывает запросы до сохранения объекта и может изменять или отклонять их.
Вопрос
Какие типы Admission Controller бывают?
Ответ
Существуют два типа:
- Mutating — модифицируют объект;
- Validating — проверяют объект и могут отклонить запрос.
Вопрос
Что такое Validating Admission Policy (VAP)?
Ответ
Validating Admission Policy — это встроенная возможность Kubernetes (начиная с версии 1.28) для определения политик валидации без написания кода, с использованием CEL (Common Expression Language).
Вопрос
Что такое Gatekeeper?
Ответ
Gatekeeper — это реализация Open Policy Agent (OPA) для Kubernetes, позволяющая определять политики безопасности и соответствия через Constraint Templates и Constraints.
Мультикластерность и федерация
Вопрос
Поддерживает ли Kubernetes работу с несколькими кластерами «из коробки»?
Ответ
Нет, Kubernetes не предоставляет встроенной поддержки мультикластерности. Для этого используются внешние инструменты.
Вопрос
Какие инструменты поддерживают мультикластерность?
Ответ
Популярные инструменты: KubeFed (Kubernetes Federation), Cluster API, Anthos, Rancher, Istio Multi-Cluster, Argo CD с multi-cluster sync.
Вопрос
Что такое Cluster API?
Ответ
Cluster API — это проект Kubernetes SIG для декларативного управления жизненным циклом кластеров (создание, обновление, удаление) с помощью CRD.
Вопрос
Для чего используется KubeFed?
Ответ
KubeFed позволяет синхронизировать ресурсы (например, ConfigMap, Deployment) между несколькими кластерами и управлять ими централизованно.
Вопрос
Как организовать отказоустойчивость через несколько кластеров?
Ответ
Размещают кластеры в разных зонах доступности или регионах, настраивают DNS-маршрутизацию (например, через ExternalDNS + Route53) и используют активно-активную или активно-пассивную схему трафика.
Безопасность продвинутого уровня
Вопрос
Как ограничить использование привилегированных контейнеров?
Ответ
Используют Pod Security Admission с уровнем restricted или применяют Validating Admission Policy/Gatekeeper, запрещающую securityContext.privileged: true.
Вопрос
Что такое seccomp в Kubernetes?
Ответ
seccomp (secure computing mode) — это механизм ядра Linux, ограничивающий системные вызовы, которые может выполнять процесс. В Kubernetes его можно задать через аннотацию или securityContext.
Вопрос
Что такое AppArmor?
Ответ
AppArmor — это модуль безопасности Linux, определяющий профили разрешённых действий для программ. Kubernetes поддерживает его через аннотации Pods.
Вопрос
Что такое SELinux?
Ответ
SELinux — это система мандатного контроля доступа в Linux. Kubernetes может использовать её через securityContext.seLinuxOptions.
Вопрос
Как защитить секреты в etcd?
Ответ
Включают шифрование на уровне etcd с помощью EncryptionConfiguration, указав ключи и алгоритмы шифрования для ресурса Secrets.
Вопрос
Как обновить сертификаты кластера?
Ответ
Для кластеров, развёрнутых через kubeadm, используют команду:
kubeadm certs renew all
Затем перезапускают компоненты control plane.
Вопрос
Как аудитировать действия в кластере?
Ответ
Включают Audit Logging в API-сервере, настраивают политики аудита и отправляют логи во внешнюю систему (например, Elasticsearch или SIEM).
Отладка и диагностика
Вопрос
Как проверить, почему Pod не запускается?
Ответ
Используют команду:
kubectl describe pod <pod-name>
Она показывает события, ошибки образа, проблемы с выделением ресурсов и другие причины.
Вопрос
Как посмотреть логи контейнера в Pod?
Ответ
Команда:
kubectl logs <pod-name> -c <container-name>
Вопрос
Как выполнить команду внутри работающего контейнера?
Ответ
Команда:
kubectl exec -it <pod-name> -- /bin/sh
Вопрос
Как проверить сетевую связность между Pods?
Ответ
Запускают временный Pod с утилитами (busybox, curl, netcat) и выполняют ping, telnet или curl до целевого сервиса или IP.
Вопрос
Как отладить Service, который не маршрутизирует трафик?
Ответ
Проверяют:
- наличие Pods с нужными метками;
- корректность selector в Service;
- правила iptables/ipvs на узле;
- состояние Endpoints:
kubectl get endpoints <service-name>.
Вопрос
Что делать, если kubelet не регистрирует узел?
Ответ
Проверяют:
- сертификаты kubelet;
- подключение к API-серверу;
- статус systemd-юнита kubelet;
- логи:
journalctl -u kubelet.
Вопрос
Как проверить работоспособность API-сервера?
Ответ
Выполняют:
kubectl get --raw='/readyz?verbose'
Это показывает статус всех зависимостей API-сервера.
Вопрос
Как отследить изменения в конфигурации кластера?
Ответ
Включают audit logs и фильтруют события по типу update, create, delete. Также можно использовать инструменты вроде Falco или Kyverno для мониторинга изменений.
Экосистема инструментов
Вопрос
Что такое Argo CD?
Ответ
Argo CD — это инструмент Continuous Delivery для Kubernetes, реализующий GitOps-подход: он синхронизирует состояние кластера с манифестами в Git-репозитории.
Вопрос
Что такое Flux CD?
Ответ
Flux CD — это ещё один GitOps-оператор, автоматически обновляющий кластер при изменениях в Git и поддерживающий Kustomize, Helm и OCI-образы.
Вопрос
Как мониторить состояние Helm-релизов?
Ответ
Используют helm list, helm status, а также интегрируют с Prometheus через helm-exporter или вручную экспортируют метрики.
Вопрос
Что такое Kyverno?
Ответ
Kyverno — это нативный для Kubernetes движок политик, позволяющий валидировать, мутировать и генерировать ресурсы с помощью правил в формате YAML.
Вопрос
Как автоматизировать обновление образов в Deployments?
Ответ
Используют инструменты вроде Flux CD с Image Automation Controller или Renovate, которые отслеживают новые теги в registry и обновляют манифесты в Git.
Вопрос
Что такое Crossplane?
Ответ
Crossplane — это Kubernetes-оператор для управления облачной инфраструктурой и внешними сервисами через CRD, позволяющий объединить управление приложением и инфраструктурой в одном API.
Вопрос
Как управлять секретами из внешних систем (HashiCorp Vault, AWS Secrets Manager)?
Ответ
Используют CSI Secret Store Driver, который монтирует секреты как тома в Pods, или специализированные операторы (например, vault-secrets-operator).
Вопрос
Что такое Ephemeral Containers?
Ответ
Ephemeral Containers — это временные контейнеры, добавляемые в уже запущенный Pod для диагностики, без влияния на основные контейнеры.
Пример:
kubectl debug -it <pod-name> --image=busybox --target=<main-container>
Вопрос
Как отладить init-контейнер, который завершился с ошибкой?
Ответ
Проверяют логи init-контейнера:
kubectl logs <pod-name> -c <init-container-name>
Или запускают Pod с restartPolicy: Never и анализируют события.
Вопрос
Что такое Vertical Pod Autoscaler (VPA) и когда его не стоит использовать?
Ответ
VPA автоматически подбирает запросы и лимиты CPU/памяти. Его не используют вместе с HPA по CPU, так как они конфликтуют, и в stateful-приложениях без careful planning.
Производительность, масштабируемость и оптимизация
Вопрос
Какой максимальный размер кластера поддерживает Kubernetes?
Ответ
Официальная спецификация Kubernetes поддерживает кластеры до 5000 узлов, 150 000 Pods и 300 000 общих контейнеров при соблюдении рекомендаций по настройке компонентов.
Вопрос
Какие ограничения накладывает Kubernetes на количество Pods на узле?
Ответ
По умолчанию kubelet ограничивает количество Pods на узле значением 110. Это можно изменить через флаг --max-pods.
Вопрос
Как уменьшить нагрузку на API-сервер?
Ответ
Используют агрегацию запросов через контроллеры, снижают частоту опроса, применяют watch вместо list, настраивают кэширование на клиентской стороне и разделяют кластер на Namespaces или отдельные кластеры.
Вопрос
Что такое QPS и burst в клиентских библиотеках Kubernetes?
Ответ
QPS (queries per second) и burst — это параметры лимитирования частоты запросов к API-серверу. Например, в kubectl или операторах они задаются для предотвращения перегрузки control plane.
Вопрос
Как оптимизировать использование памяти в etcd?
Ответ
Включают автоматическую дефрагментацию, ограничивают время хранения истории через --auto-compaction-retention, мониторят размер базы и регулярно делают резервные копии.
Вопрос
Как проверить производительность кластера?
Ответ
Используют инструменты вроде Kubemark (для имитации узлов), kubetest или clusterloader2 для нагрузочного тестирования.
Вопрос
Что такое Pod Disruption Budget (PDB)?
Ответ
Pod Disruption Budget — это объект, ограничивающий количество Pods, которые могут быть недоступны одновременно во время добровольных прерываний (например, обновлений узлов).
Пример:
apiVersion: policy/v1
kind: PodDisruptionBudget
meta
name: my-pdb
spec:
minAvailable: 2
selector:
matchLabels:
app: my-app
Вопрос
Когда применяется PDB?
Ответ
PDB применяется при операциях обслуживания: обновлении узлов через drain, масштабировании, замене инстансов в managed-кластерах.
Вопрос
Как ускорить запуск Pods?
Ответ
Предварительно загружают образы на узлы, используют imagePullPolicy: IfNotPresent, минимизируют размер образов, применяют init-контейнеры только при необходимости.
Вопрос
Как избежать «thundering herd» при старте множества Pods?
Ответ
Используют post-start lifecycle hooks с экспоненциальной задержкой, readiness probes с initialDelay, или контролируют темп развёртывания через maxUnavailable в Deployment.
CI/CD и GitOps
Вопрос
Как интегрировать Kubernetes с CI/CD?
Ответ
В CI-системе (например, GitHub Actions, Jenkins) собирают образ, пушат его в registry, затем применяют манифесты через kubectl apply или обновляют Helm-релиз.
Вопрос
Что такое GitOps?
Ответ
GitOps — это подход к управлению инфраструктурой и приложениями, при котором желаемое состояние системы хранится в Git, а оператор (например, Argo CD) обеспечивает его синхронизацию с кластером.
Вопрос
Какие преимущества даёт GitOps?
Ответ
GitOps обеспечивает полную историю изменений, возможность code review, rollback через revert коммита, и согласованность между окружениями.
Вопрос
Как безопасно хранить секреты в Git при использовании GitOps?
Ответ
Секреты шифруют с помощью инструментов вроде SOPS + Age/GPG или хранят во внешнем хранилище (Vault, AWS Secrets Manager), а в Git оставляют только ссылки или placeholders.
Вопрос
Можно ли использовать Helm в GitOps?
Ответ
Да, Argo CD и Flux поддерживают Helm Charts как источник желаемого состояния.
Практические сценарии и лучшие практики
Вопрос
Как правильно задавать requests и limits для контейнеров?
Ответ
Requests указывают гарантированные ресурсы для планировщика, limits — максимальное потребление. Requests должны отражать среднюю нагрузку, limits — пиковые значения.
Вопрос
Что происходит, если контейнер превышает лимит памяти?
Ответ
Контейнер получает сигнал OOMKilled (Out of Memory), и kubelet завершает его. Статус Pod становится OOMKilled.
Вопрос
Что происходит, если контейнер превышает лимит CPU?
Ответ
Контейнер не завершается, но его CPU throttling увеличивается — он получает меньше времени процессора.
Вопрос
Как классифицируются Pods по качеству сервиса (QoS)?
Ответ
Kubernetes определяет три класса QoS:
- Guaranteed — requests == limits для всех ресурсов;
- Burstable — requests < limits или указаны не все ресурсы;
- BestEffort — ни requests, ни limits не заданы.
Вопрос
Какой класс QoS имеет наивысший приоритет при нехватке ресурсов?
Ответ
Guaranteed имеет наивысший приоритет, BestEffort — наименьший.
Вопрос
Как изолировать рабочие нагрузки друг от друга?
Ответ
Используют Namespaces, ResourceQuotas, LimitRanges, NetworkPolicies и taints/tolerations для разделения критичных и некритичных приложений.
Вопрос
Что такое taint и toleration?
Ответ
Taint — это метка на узле, которая отталкивает Pods. Toleration — это свойство Pod, позволяющее игнорировать определённый taint.
Пример taint на узле:
kubectl taint nodes node1 dedicated=monitoring:NoSchedule
Пример toleration в Pod:
tolerations:
- key: "dedicated"
operator: "Equal"
value: "monitoring"
effect: "NoSchedule"
Вопрос
Как назначить Pod на конкретный узел?
Ответ
Используют nodeSelector или affinity.
Пример nodeSelector:
spec:
nodeSelector:
disktype: ssd
Вопрос
Что такое affinity и anti-affinity?
Ответ
Affinity — это правило, притягивающее Pod к узлам или другим Pods. Anti-affinity — правило, отталкивающее Pod от других Pods (например, для отказоустойчивости).
Вопрос
Как распределить реплики по зонам доступности?
Ответ
Используют podAntiAffinity с топологическим ключом topology.kubernetes.io/zone.
Пример:
affinity:
podAntiAffinity:
preferredDuringSchedulingIgnoredDuringExecution:
- weight: 100
podAffinityTerm:
labelSelector:
matchExpressions:
- key: app
operator: In
values: ["my-app"]
topologyKey: topology.kubernetes.io/zone
Вопрос
Как обновить конфигурацию приложения без перезапуска Pod?
Ответ
Используют ConfigMap или Secret, смонтированные как тома. При обновлении ConfigMap изменения становятся доступны в файловой системе Pod через некоторое время (зависит от kubelet sync period).
Вопрос
Как обеспечить zero-downtime при обновлении?
Ответ
Используют readiness probe, стратегию RollingUpdate с maxUnavailable: 0, и проверяют, что новый Pod проходит readiness до удаления старого.
Вопрос
Как протестировать новую версию перед полным развёртыванием?
Ответ
Запускают отдельный Deployment с новой версией, направляют на него часть трафика через Ingress с весами или Service Mesh, анализируют метрики и логи.
Вопрос
Как управлять зависимостями между микросервисами при старте?
Ответ
Не полагаются на порядок запуска. Каждый сервис должен быть устойчив к отсутствию зависимостей (retry, circuit breaker). Init-контейнеры используют только для критичных предусловий.
Вопрос
Как организовать backup кластера?
Ответ
Резервное копирование включает:
- etcd snapshot;
- манифесты всех CRD и пользовательских ресурсов;
- данные PersistentVolumes (через Velero или restic).
Вопрос
Что такое Velero?
Ответ
Velero — это инструмент для резервного копирования и восстановления кластеров Kubernetes, включая PV, а также для миграции между кластерами.
Вопрос
Как восстановить кластер из резервной копии?
Ответ
Восстанавливают etcd из snapshot, перезапускают control plane, затем применяют манифесты и восстанавливают PV через Velero.
Вопрос
Как обновить версию Kubernetes?
Ответ
Для managed-кластеров обновление выполняется через панель провайдера. Для self-hosted — сначала control plane (kubeadm upgrade), затем узлы по одному с drain/cordon.
Вопрос
Что такое cordon и drain?
Ответ
Cordon помечает узел как непригодный для новых Pods. Drain эвакуирует существующие Pods (кроме DaemonSet) перед обслуживанием.
Вопрос
Как проверить совместимость манифестов с новой версией Kubernetes?
Ответ
Используют kubectl convert (устаревший) или инструменты вроде Pluto, которые проверяют deprecated API.
Вопрос
Какие API считаются стабильными?
Ответ
API с версией v1 считаются стабильными. Версии v1beta1, v1alpha1 являются пре-релизными и могут измениться или исчезнуть.
Вопрос
Как отслеживать deprecated API в кластере?
Ответ
Включают audit logs и фильтруют по groupVersion, или используют инструменты: kube-no-trouble, Popeye.
Вопрос
Как уменьшить стоимость эксплуатации кластера?
Ответ
Используют autoscaling (cluster и pod), spot-инстансы с tolerations, объединяют малые рабочие нагрузки, оптимизируют запросы ресурсов.
Вопрос
Как масштабировать кластер вручную?
Ответ
Добавляют новые узлы в managed-кластере через UI или CLI, в self-hosted — регистрируют новые машины с помощью kubeadm join.
Вопрос
Как работает Cluster Autoscaler?
Ответ
Cluster Autoscaler отслеживает Pods, которые не могут быть запланированы из-за нехватки ресурсов, и запрашивает у облачного провайдера добавление новых узлов.
Вопрос
Какие аннотации используются для настройки поведения Ingress?
Ответ
Аннотации зависят от Ingress Controller. Например, для NGINX:
nginx.ingress.kubernetes.io/rewrite-targetnginx.ingress.kubernetes.io/ssl-redirectnginx.ingress.kubernetes.io/canary-weight
Вопрос
Как настроить CORS в Ingress?
Ответ
Для NGINX Ingress используют аннотации:
nginx.ingress.kubernetes.io/enable-cors: "true"
nginx.ingress.kubernetes.io/cors-allow-origin: "https://example.com"
Вопрос
Как защитить Ingress от DDoS?
Ответ
Используют rate limiting через аннотации (nginx.ingress.kubernetes.io/limit-rps), WAF перед Ingress, или облачный балансировщик с защитой.
Вопрос
Как экспортировать метрики Ingress Controller?
Ответ
NGINX Ingress предоставляет эндпоинт /metrics в формате Prometheus. Его подключают через ServiceMonitor или scrape_configs.
Вопрос
Как отладить проблему с DNS в Pod?
Ответ
Проверяют /etc/resolv.conf внутри Pod, тестируют nslookup/kubectl run с dnsutils, проверяют CoreDNS Pods и их логи.
Вопрос
Что такое EndpointSlice?
Ответ
EndpointSlice — это ресурс, заменяющий Endpoints при большом количестве Pods. Он разбивает список адресов на более мелкие чанки для масштабируемости.
Вопрос
Как работает Service discovery в Kubernetes?
Ответ
Kubernetes автоматически создаёт переменные окружения и DNS-записи для каждого Service. Приложения находят сервисы по имени.
Вопрос
Как настроить внутренний DNS?
Ответ
CoreDNS (или kube-dns) уже настроен по умолчанию. Для кастомных зон используют stubDomains или forward в ConfigMap CoreDNS.
Вопрос
Как обновить CoreDNS?
Ответ
Обновляют образ в Deployment coredns, применяют новый ConfigMap, проверяют логи на ошибки.
Вопрос
Как мониторить CoreDNS?
Ответ
CoreDNS экспортирует метрики Prometheus на порту 9153. Используют Grafana dashboard для анализа latency, ошибок, cache hit ratio.
Вопрос
Что делать, если все Pods одного Deployment находятся на одном узле?
Ответ
Проверяют политики affinity/anti-affinity, taints/tolerations, и наличие достаточного количества узлов с подходящими ресурсами.
Вопрос
Как запустить Pod только на master-узле?
Ответ
Master-узлы имеют taint node-role.kubernetes.io/control-plane:NoSchedule. Чтобы запустить Pod, нужно добавить соответствующую toleration и использовать nodeSelector или affinity.
Вопрос
Безопасно ли запускать рабочие нагрузки на master-узлах?
Ответ
Запуск рабочих нагрузок на master-узлах не рекомендуется, так как это может повлиять на стабильность control plane.
Вопрос
Как узнать, какие ресурсы использует Namespace?
Ответ
Используют команду:
kubectl top pods -n <namespace>
Или устанавливают metrics-server и resource usage dashboards.
Вопрос
Как ограничить общее потребление ресурсов в Namespace?
Ответ
Создают ResourceQuota.
Пример:
apiVersion: v1
kind: ResourceQuota
meta
name: quota
namespace: dev
spec:
hard:
requests.cpu: "2"
requests.memory: 4Gi
limits.cpu: "4"
limits.memory: 8Gi
Вопрос
Как установить значения по умолчанию для requests/limits в Namespace?
Ответ
Создают LimitRange.
Пример:
apiVersion: v1
kind: LimitRange
meta
name: default-limits
namespace: dev
spec:
limits:
- default:
cpu: 500m
memory: 512Mi
defaultRequest:
cpu: 200m
memory: 256Mi
type: Container
Вопрос
Как отследить, кто удалил Deployment?
Ответ
Проверяют audit logs API-сервера, фильтруя по verb=delete и resource=deployments.
Вопрос
Как автоматизировать создание Namespaces с политиками?
Ответ
Используют оператор или admission webhook, который при создании Namespace автоматически применяет NetworkPolicy, ResourceQuota, LimitRange.
Вопрос
Какой минимальный набор манифестов нужен для production-приложения?
Ответ
Минимальный набор включает: Deployment, Service, Ingress (или LoadBalancer), ConfigMap, Secret, HorizontalPodAutoscaler, PodDisruptionBudget, readiness/liveness probes.
Вопрос
Как документировать инфраструктуру Kubernetes?
Ответ
Хранят все манифесты в Git, используют README в каждом каталоге, описывают зависимости, параметры и порядок развёртывания.
Вопрос
Как обучать команду работе с Kubernetes?
Ответ
Проводят hands-on лабораторные работы, используют playground-кластеры, внедряют стандарты манифестов, и поощряют участие в incident response.
Вопрос
Какие книги и ресурсы рекомендуются для изучения Kubernetes?
Ответ
Рекомендованные источники: официальная документация Kubernetes, книга «Kubernetes in Action», курс CNCF, «Kubernetes Patterns» от Red Hat.
Вопрос
Как подготовиться к сертификации CKA?
Ответ
Проходят официальный учебный план, решают практические задачи в кластере, используют simulate-экзамены, отрабатывают команды kubectl без автодополнения.
Вопрос
Какие soft skills важны для SRE/DevOps в Kubernetes-среде?
Ответ
Важны навыки коммуникации, умение писать понятную документацию, способность объяснять сложные концепции, и ориентация на предотвращение инцидентов.
Вопрос
Как оценить зрелость Kubernetes-платформы в компании?
Ответ
Оценивают по критериям: автоматизация CI/CD, наличие политик безопасности, мониторинг и алертинг, документация, скорость восстановления после сбоев, уровень самообслуживания для разработчиков.