Ответ
Да, я использовал Kubespray для развертывания production-кластеров Kubernetes на bare-metal инфраструктуре. Это был осознанный выбор, когда требовался полный контроль над компонентами и их версиями, а также работа в среде без облачного managed K8s (например, в приватном дата-центре).
Мой типичный процесс и настройки:
- Подготовка инвентаря: Детальное описание всех нод (control-plane, etcd, worker) в Ansible inventory-файле с указанием IP, внутренних интерфейсов для overlay-сети.
- Выбор и настройка CNI (Container Network Interface): Чаще всего использовал Calico в режиме BGP для эффективного сетевого взаимодействия и настройки сетевых политик (Network Policies).
- Конфигурация критических компонентов:
- 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.