Был ли у вас опыт развертывания Kubernetes с помощью Kubespray?

«Был ли у вас опыт развертывания Kubernetes с помощью Kubespray?» — вопрос из категории Kubernetes, который задают на 23% собеседований Devops Инженер. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Да, я использовал Kubespray для развертывания production-кластеров Kubernetes на bare-metal инфраструктуре. Это был осознанный выбор, когда требовался полный контроль над компонентами и их версиями, а также работа в среде без облачного managed K8s (например, в приватном дата-центре).

Мой типичный процесс и настройки:

  1. Подготовка инвентаря: Детальное описание всех нод (control-plane, etcd, worker) в Ansible inventory-файле с указанием IP, внутренних интерфейсов для overlay-сети.
  2. Выбор и настройка CNI (Container Network Interface): Чаще всего использовал Calico в режиме BGP для эффективного сетевого взаимодействия и настройки сетевых политик (Network Policies).
  3. Конфигурация критических компонентов:
    • etcd: Настройка TLS-шифрования для межкластерного трафика, планирование отдельной дисковой группы для высокой производительности.
    • Control Plane: Включение HAProxy или Keepalived для балансировки нагрузки на API-серверы.
    • Ingress: Установка и настройка Nginx Ingress Controller.

Пример команды для запуска развертывания с кастомными переменными:

ansible-playbook -i inventory/mycluster/hosts.yaml 
  --become --become-user=root 
  -e "kube_version=v1.27.5" 
  -e "calico_mtu=1440" 
  -e "download_run_once=true" 
  cluster.yml

Преимущества, которые я ценил: Полная декларативность через Ansible, возможность «запечь» в кластер нужные версии любых компонентов, поддержка air-gapped установок (офлайн-режим). Сложности: Требуется глубокое понимание как Kubernetes, так и Ansible для отладки. Обновление кластера (upgrade) — более ответственная и многоэтапная процедура по сравнению с managed-сервисами вроде GKE или EKS.