Как вы разворачивали кластер Kubernetes?

Ответ

Я разворачивал production-кластеры Kubernetes, используя kubeadm как основу. Для обеспечения высокой доступности control plane я настраивал балансировщик нагрузки (использовал HAProxy или облачные решения) и разворачивал несколько мастер-узлов с распределенным etcd.

Пример инициализации HA control plane:

kubeadm init --control-plane-endpoint "LOAD_BALANCER_DNS:6443" 
  --upload-certs 
  --pod-network-cidr=10.244.0.0/16

Ключевые компоненты и практики в моих развертываниях:

  • Инфраструктура как код: Использовал Terraform для создания виртуальных машин в облаке (AWS EC2, GCP Compute Engine) и Ansible для их базовой конфигурации.
  • Worker Nodes: Настраивал автоматическое масштабирование групп виртуальных машин (Auto Scaling Groups, Managed Instance Groups).
  • Сеть: Устанавливал сетевой плагин Calico или Cilium для политик сети и маршрутизации Pod-to-Pod трафика.
  • Безопасность: Применял рекомендации CIS Benchmark для харденинга узлов и самого кластера, использовал Pod Security Admission.
  • Управление конфигурацией: Все манифесты приложений и конфигурации кластера хранились в Git и развертывались через GitOps-инструмент ArgoCD.
  • Мониторинг и логи: Устанавливал Prometheus Stack (через kube-prometheus) для метрик и Grafana для дашбордов. Для логов использовал связку Fluent Bit -> Loki или Elasticsearch.
  • Резервное копирование: Настраивал регулярный бэкап ключевых ресурсов кластера (особенно данных etcd) с помощью Velero.

Для локальной разработки и тестирования конфигураций я часто использовал kind (Kubernetes in Docker).

Ответ 18+ 🔞

А, слушай, вот это я понимаю — не просто в консоли тыкать, а по-взрослому всё делать. Я тоже этим промышлял, и скажу тебе честно: когда начинаешь production-кластер на kubeadm поднимать, чувствуешь себя, блядь, повелителем вселенной, пока первый мастер-узел не накроется медным тазом от какой-нибудь ерунды.

Вот смотри, классика жанра: для высокой доступности control plane надо балансировщик перед ними поставить. Без этого — чистая лотерея, доверия ебать ноль. Я обычно HAProxy на отдельной виртуалке крутил, а в облаке просто брал их родной лоад-балансер, чтоб голова не болела. И мастер-узлов минимум три, конечно, с etcd, распределённым по всем. Иначе один пиздец — и кластер в трубу.

Вот команда инициализации, с неё всё и начинается. Код не трогаю, он святой:

kubeadm init --control-plane-endpoint "LOAD_BALANCER_DNS:6443" 
  --upload-certs 
  --pod-network-cidr=10.244.0.0/16

Главное тут — не проебать этот control-plane-endpoint. Укажешь айпишник одного мастера вместо DNS балансировщика — и потом все воркеры будут к нему цепляться. А он возьми и умри — и всё, приехали, кластер в полуживом состоянии, волнение ебать.

Дальше, чувак, без инфраструктуры как кода — вообще никуда. Это же основа основ. Terraform'ом виртуалки в облаке лепил — AWS, GCP, что под рукой было. Ansible'ом потом на них базовый софт и настройки загонял. Потому что делать это руками на десятке машин — это, ёпта, чистое самоубийство, терпения ноль ебать.

Воркеры настраивал в auto-scaling группах, чтоб сами плодились и умирали по нагрузке. Сеть ставил — обычно Calico, он проверенный, как швейцарские часы, или Cilium, если хотелось новых фич и eBPF под капотом. Без сетевого плагина твои поды друг друга просто не увидят, будут как слепые котята тыкаться.

Про безопасность отдельная песня. CIS Benchmark — это наше всё. Без него кластер — как дом с открытой дверью, туда любой пидарас шерстяной зайти может. Pod Security Admission включал сразу, чтоб не было этих «ой, а зачем моему поду права root?».

Самое главное — всё в Git. Все манифесты, все конфиги. И разворачивал через ArgoCD по GitOps. Это, блядь, магия: закоммитил в репу — и через пять минут изменения уже в кластере. Красота.

Мониторинг — отдельная религия. Ставил Prometheus Stack через kube-prometheus, Grafana для графиков. Без этого ты летишь вслепую, как хуй с горы. Логи гнал через Fluent Bit в Loki — быстро и удобно. Для бэкапов Velero — штука незаменимая. Особенно etcd бэкапить регулярно, иначе один сбой — и ты сам от себя охуеешь, восстанавливая всё с нуля.

А для локальных экспериментов и тестов — kind (Kubernetes in Docker). Вещь, блядь, гениальная в своей простоте. За пять минут развернул кластер на ноуте, потестировал конфиг, сломал — и выкинул. Незаменимая штука, когда нужно быстро проверить идею, не разводя овердохуища инфраструктуры в облаке.

В общем, процесс это долгий, но когда всё взлетает и работает — чувствуешь себя богом. Ненадолго, правда, потом обязательно что-то сломается.