Kubernetes в джунглях агротех: как мы спасаем банановые кластеры

от автора

🎮 Что это за игра?

Перед вами не просто технический мануал — это SimCity для кластеров с банановым сюжетом! Если вы только начали выращивать свои первые «бананы» (поды) в Kubernetes и хотите разобраться в базовых механиках через игровые аналогии, то этот материал для вас. Я Михаил Костельцев, главный инженер Центра бесперебойной поддержки платформенных и интеграционных решений в РСХБ-Интех.

Все кейсы — упрощенные сценарии из реальной жизни. Мы сознательно избегаем сложных терминов, заменяя их «садоводческими» метафорами.

🎮 Правила игры

В игре используем примеры из реального опыта, адаптируем их для ищущих понятные аналогии новичков в Kubernetes. Для профи это повторение пройденного и развлечение. Реальные кластеры сложнее, здесь мы убрали:

  • Ядовитых змей (Custom Resource Definitions)

  • Кислотные дожди (Service Meshes)

  • Вулканы (Cluster API)

Стартовый набор садовника

# 🧰 Инструментарий банановода инвентарь:     - мачете: kubectl   - лейка: Helm     - удобрения: Prometheus   - амулет: NetworkPolicy

🌱 Часть 1: Базовые механики

🚜 Уровень 1: Саженцы не прорастают (Pending Pods)

Механика: Ресурсные ограничения.
Сложность: ★☆☆☆ (Новичок)

🐒 Для новичков

Проблема: Саженцы (поды) зависли в воздухе!
Аналогия: Арбузы (тяжёлые сервисы) заняли всю почву (ресурсы ноды).

Решение:
1. Увеличьте квоты ресурсов
2. Настройте приоритеты для важных бананов.

🦍 Для профи

Диагностика:

kubectl get pods -o wide | grep Pending kubectl describe pod pending-banana | grep -A 10 "Events:"

Полный манифест:

apiVersion: v1 kind: Pod metadata:   name: golden-banana spec:   containers:   - name: banana-app     image: banana:latest     resources:       requests:         cpu: "500m"    # Минимум для роста         memory: "1Gi"  # Вода для саженца       limits:         cpu: "1"       # Максимум для урожая         memory: "2Gi"  # Лимит воды   priorityClassName: high-priority # 🏆 VIP-бананы

🏆 Achievement: Спаситель саженцев


🌿 Уровень 2: Бунт ростков (CrashLoopBackOff)

Механика: Логирование и пробы
Сложность: ★★☆☆ (Любитель)

🐒 Для новичков

Проблема: Бананы падают, как подкошенные!
Аналогия: Злой попугай (ошибка конфига) портит урожай.

Решение:
1. Найдите ошибку в логах.
2. Настройте проверки жизнеспособности

🦍 Для профи

Диагностика:

kubectl logs banana-pod --previous | grep -i "panic" kubectl describe pod banana-pod | grep -A 10 "Events:"

Полный манифест:

apiVersion: apps/v1 kind: Deployment metadata:   name: banana-deployment spec:   replicas: 3   template:     spec:       containers:       - name: banana-app         image: banana:stable         livenessProbe:           httpGet:             path: /health             port: 8080           initialDelaySeconds: 10 # ⏳ Даем время на старт           periodSeconds: 5        # 🔄 Частота проверок         readinessProbe:           httpGet: # Как проверяем?             path: /ready # По какому http-пути проверяем             port: 8080 # По какому порту проверяем           initialDelaySeconds: 5           periodSeconds: 3

🏆 Achievement: Укротитель падающих бананов


🚧 Часть 2: Строительство мостов

Уровень 3: Невидимый урожай (Network Issues)

Механика: Network Policies
Сложность: ★★☆☆ (Любитель)

🐒 Для новичков

Проблема: Бананы есть, но их не видно!
Аналогия: Мосты между островами разрушены.

Решение:
1. Проверьте связность между сервисами.
2. Настройте политики доступа.

🦍 Для профи

Диагностика:

kubectl run -it debug --image=nicolaka/netshoot -- curl http://banana-svc kubectl get networkpolicies -n banana-farm

Полный манифест:

apiVersion: networking.k8s.io/v1 kind: NetworkPolicy metadata:   name: allow-banana-traffic   namespace: banana-farm spec:   podSelector:     matchLabels:       app: banana   policyTypes:   - Ingress   - Egress   ingress:   - from:     - podSelector:         matchLabels:           role: harvester     ports:     - protocol: TCP       port: 8080   egress:   - to:     - ipBlock:         cidr: 10.0.0.0/8     ports:     - protocol: TCP       port: 53

🏆Achievement: Повелитель сетевых потоков


Бонус: Ритуалы шаманов

Хаос-ритуалы(Chaos Engineering)
Сложность: ★★★☆ (Эксперт)

🐒 Для новичков

Цель: Проверить устойчивость плантации.
Аналогия: Искусственный ураган для проверки деревьев.

🦍 Для профи

# 💥 Эмуляция сетевых задержек для пода "etcd-pod" kubectl exec -it etcd-pod -- tc qdisc add dev eth0 root netem delay 1000ms

Босс: Гнев богов etcd

Сложность: ★★★★ (Мастер)

🐒 Для новичков

Проблема: Хранители знаний (etcd) разгневаны!
Решение: Восстановите кворум и используйте бэкапы.

🦍 Для профи

Полный манифест для бэкапов:

apiVersion: batch/v1 kind: CronJob metadata:   name: etcd-backup spec:   schedule: "0 * * * *" # Каждый час   jobTemplate:     spec:       template:         spec:           containers:           - name: etcd-backup             image: bitnami/etcd:3.5             command:             - "/bin/sh"             - "-c"             - "etcdctl snapshot save /backups/etcd-$(date +%s).db"           restartPolicy: OnFailure

🏆 Achievement: Жрец etcd

🏁 Эпилог: Сбор урожая

Поздравляем! Вы стали мастером бананового земледелия. Дальнейший путь:

1. Посадите свой кластер-саженец
2. Изучите священные тексты CNCF
3. Присоединитесь к гильдии садоводов

«Даже великая роща начинается с одного семени. Главное — не забывать поливать бэкапами». Древняя мудрость SRE-шаманов.


ссылка на оригинал статьи https://habr.com/ru/articles/879470/


Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *