Что такое Kubernetes The Hard Way?

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

Ответ

Kubernetes The Hard Way — это знаменитое практическое руководство от Kelsey Hightower, которое описывает ручное развёртывание production-like кластера Kubernetes с нуля, без использования высокоуровневых инструментов вроде kubeadm, minikube или managed-сервисов (EKS, GKE). Его цель — не создать продакшен-кластер, а дать глубокое, пошаговое понимание каждого компонента системы, его роли и конфигурации.

Основные этапы, которые вы проходите:

  1. Безопасность и PKI: Ручное создание корневого и промежуточного Certificate Authority (CA) и генерация TLS-сертификатов для каждого компонента (kube-apiserver, kubelet, etcd, admin-пользователя). Это основа взаимного TLS (mTLS) в кластере.
  2. Развёртывание etcd: Настройка отказоустойчивого кластера etcd для хранения состояния Kubernetes (state).
  3. Control Plane: Установка и конфигурация kube-apiserver, kube-controller-manager и kube-scheduler на отдельных виртуальных машинах.
  4. Worker Nodes: Установка kubelet и kube-proxy, настройка авторизации Node через TLS-сертификаты (Node Authorizer).
  5. Сетевая модель: Настройка CNI-плагина (например, bridge + host-local для сети и portmap для маппинга портов) для обеспечения коммуникации между подами.

Пример команды для генерации сертификата kubelet:

# Генерация приватного ключа и CSR (Certificate Signing Request) для kubelet
openssl genrsa -out kubelet.key 2048
openssl req -new -key kubelet.key -out kubelet.csr 
  -subj "/O=system:nodes/CN=system:node:<node-hostname>" # Важно: Common Name (CN) и Organization (O)
# Подписание CSR корневым CA
openssl x509 -req -in kubelet.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out kubelet.crt -days 365

Зачем это нужно DevOps-инженеру? После прохождения этого руководства вы перестаёте воспринимать кластер как "чёрный ящик". Вы понимаете, как kubelet регистрирует ноду в API, как kube-proxy настраивает iptables/ipvs правила, и почему для устранения неполадок в продакшене критически важно уметь читать логи именно этих компонентов, а не просто перезапускать кластер.