Разворачивали ли вы Kubernetes самостоятельно?

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

Ответ

Да, разворачивал кластеры Kubernetes несколькими способами. Для production-сред использовал kubeadm и Kubespray, а для локальной разработки и тестирования — minikube и kind. Также работал с managed-сервисами, такими как Amazon EKS и Google GKE, для проектов, где требовалась высокая доступность без операционных накладных расходов.

Пример развертывания кластера с помощью kubeadm:

# Инициализация control-plane ноды
kubeadm init --pod-network-cidr=10.244.0.0/16 --apiserver-advertise-address=<MASTER_IP>

# Настройка kubectl для пользователя
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config

# Установка сетевого плагина Calico
kubectl apply -f https://docs.projectcalico.org/manifests/calico.yaml

# Получение команды для присоединения worker-нод
kubeadm token create --print-join-command

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

  • CNI (Container Network Interface): Обязательная установка сетевого плагина (Calico, Flannel, Cilium) для обеспечения сетевого взаимодействия между подами.
  • Высокая доступность (HA): Для production-кластеров настраивал несколько control-plane нод с балансировщиком нагрузки перед ними и отдельным кластером etcd.
  • Хранение состояния (Stateful): Настройка StorageClass с использованием CSI-драйверов для облачных провайдеров (например, ebs-csi-driver для AWS) или решений вроде Rook/Ceph для on-premise.
  • Безопасность: Применение Pod Security Admission (PSA), настройка NetworkPolicies и использование инструментов вроде kube-bench для проверки соответствия CIS Benchmark.