# Runbook: Kafka StrimziPodSet рестарт / поднятие **Когда использовать:** - Kafka pod (`ordinis-kafka-dual-0`) не Running после reboot ноды. - Strimzi cluster operator не пересоздаёт pod — например после manual delete с paused reconciliation. - StrimziPodSet есть, но `READY PODS = 0`. - Кафка-операции отвечают timeout / connection refused. ## 1. Диагностика ```bash export KUBECONFIG=/tmp/kubeconfig-161 kubectl get kafka,kafkanodepool,strimzipodset -n ordinis-staging kubectl get pods -n ordinis-staging | grep kafka ``` **Что искать:** | Симптом | Причина | |---|---| | `kafka.kafka.strimzi.io/ordinis-kafka` имеет `WARNINGS` колонку с текстом | reconciliation paused или config invalid — см. `kubectl describe kafka` | | `strimzipodset/ordinis-kafka-dual` отсутствует | удалён — нужно unpause reconciliation чтобы Strimzi его создал заново | | `kafkanodepool/dual` имеет `DESIRED REPLICAS=0` | scale=0 был задан — Strimzi не позволяет 0 реплик в Kafka cluster | | Pod `ordinis-kafka-dual-0` в `Pending` | scheduler не нашёл ноду — `kubectl describe pod` | | Pod `Running` но `0/1` ready | startup probe failed — `kubectl logs` | ## 2. Восстановление ### Вариант A: pause/unpause reconciliation Если Kafka CR имеет `strimzi.io/pause-reconciliation=true` annotation: ```bash kubectl annotate kafka.kafka.strimzi.io/ordinis-kafka -n ordinis-staging \ strimzi.io/pause-reconciliation- --overwrite kubectl annotate kafkanodepool.kafka.strimzi.io/dual -n ordinis-staging \ strimzi.io/pause-reconciliation- --overwrite ``` Strimzi в течение ~30 sec пересоздаст StrimziPodSet и поднимет pod. ### Вариант B: scale до 0 → нужно вернуть к 1+ ```bash kubectl patch kafkanodepool/dual -n ordinis-staging --type=merge \ -p '{"spec":{"replicas":1}}' ``` ⚠️ **Strimzi требует минимум 1 replica** — при `replicas:0` валидация падает с `InvalidResourceException: KafkaNodePools have 0 replicas`. ### Вариант C: StrimziPodSet удалён (например `kubectl delete strimzipodset`) Если pause снят и replicas≥1, Strimzi пересоздаст автоматически. Дать 60 sec на reconciliation. Если не происходит: ```bash # Принудительно перепинговать operator kubectl annotate kafka.kafka.strimzi.io/ordinis-kafka -n ordinis-staging \ strimzi.io/manual-rolling-update- kubectl annotate kafka.kafka.strimzi.io/ordinis-kafka -n ordinis-staging \ strimzi.io/manual-rolling-update=true --overwrite ``` ### Вариант D: Pod залип в Pending / CrashLoopBackOff Force-delete + дать operator пересоздать: ```bash kubectl delete pod -n ordinis-staging ordinis-kafka-dual-0 \ --grace-period=0 --force ``` PVC `data-0-ordinis-kafka-dual-0` сохраняется, данные kraft-метаданных целы. ## 3. Подтверждение ```bash kubectl get pods -n ordinis-staging | grep kafka # → ordinis-kafka-dual-0 1/1 Running kubectl exec -n ordinis-staging ordinis-kafka-dual-0 -- \ bin/kafka-broker-api-versions.sh \ --bootstrap-server ordinis-kafka-kafka-bootstrap:9092 2>&1 | head -3 ``` ## 4. После kafka up — рестарт consumer'ов Spring Boot pods (`ordinis-app`, `ordinis-projection-writer`) могли застрять в reconnect-loop. Force-delete для быстрого resume: ```bash kubectl delete pod -n ordinis-staging \ -l 'app.kubernetes.io/name in (ordinis-app,ordinis-projection-writer)' \ --grace-period=0 --force ``` OutboxPoller начнёт публиковать накопленные события сразу. ## 5. Проверка outbox lag После рестарта Kafka outbox мог накопить unpublished events. Проверь: ```bash curl -sk -H "Authorization: Bearer $TOKEN" \ --resolve ordinis.k8s.265.nstart.cloud:443:192.168.100.161 \ "https://ordinis.k8s.265.nstart.cloud/api/v1/admin/outbox/stats" # → {"pending":0,"dlq":0} ← желаемое ``` Если pending растёт — см. [outbox-dlq.md](outbox-dlq.md). ## 6. Эскалация | Проблема | Действие | |---|---| | Strimzi operator pod (kafka-test ns) не Running | `kubectl get pods -n kafka-test` → перезапустить | | Consul недоступен (Strimzi его не использует, но Vault — да) | см. [vault-unseal.md](vault-unseal.md) | | Kraft metadata corruption (редко) | DR: восстановить PVC из snapshot, переинициализировать topic | | ACL нарушение / SASL auth fail | Проверить secret `ordinis-app-kafka` в Vault, перезапустить consumer | >20 минут downtime → tech lead.