Продвинутые темы и архитектура 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'ов с нерабочих узлов.