Troubleshooting Deployment Issues
Частые проблемы деплоя и способы решения
Troubleshooting Deployment Issues
Проблемы при деплое и их решения
1. ResourceQuota ошибки
Ошибка:
Error: ResourceQuota "maniton-resource-quota" is invalid:
spec.hard[deployments.apps]: Invalid value: deployments.appsРешение: Используйте правильные имена ресурсов в ResourceQuota:
deployments.apps→count/deployments.appsstatefulsets.apps→count/statefulsets.appsjobs.batch→count/jobs.batchingress.networking.k8s.io→count/ingresses.networking.k8s.io
2. ServiceMonitor/PodMonitor ошибки
Ошибка:
resource mapping not found for name: "maniton-pods":
no matches for kind "PodMonitor" in version "monitoring.coreos.com/v1"
ensure CRDs are installed firstРешение:
Вариант 1: Установить CRDs Prometheus Operator:
kubectl apply --server-side -f https://raw.githubusercontent.com/prometheus-operator/prometheus-operator/main/example/prometheus-operator-crd/monitoring.coreos.com_servicemonitors.yaml
kubectl apply --server-side -f https://raw.githubusercontent.com/prometheus-operator/prometheus-operator/main/example/prometheus-operator-crd/monitoring.coreos.com_podmonitors.yamlВариант 2: Отключить Prometheus Operator ресурсы (по умолчанию):
Раскомментируйте строку в base/kustomization.yaml:
# - prometheus-operator.yamlPrometheus будет использовать стандартное pod discovery через аннотации.
3. Pod Security Standards warnings
Предупреждения:
Warning: would violate PodSecurity "restricted:latest":
allowPrivilegeEscalation != false (container "copy-key")Решение: Все init контейнеры должны иметь SecurityContext:
initContainers:
- name: copy-key
securityContext:
allowPrivilegeEscalation: false
capabilities:
drop:
- ALL4. Promtail hostPath volumes
Предупреждение:
Warning: promtail-w22pn: hostPath volumesРешение:
Promtail требует hostPath volumes для доступа к логам нод. Это нормально и разрешено в baseline policy. Аннотация добавлена автоматически.
5. Service IP allocation errors
Ошибка:
Error: Internal error occurred: failed to allocate a serviceIP:
the provided network does not match the current rangeПричина: Эта ошибка возникает когда:
- Service CIDR в кластере исчерпан или настроен неправильно
- Существуют конфликтующие сервисы с неправильными IP
- Кластер был переконфигурирован и Service CIDR изменился
Решение:
Вариант 1: Удалить проблемные сервисы и пересоздать:
# Удалить все сервисы, которые не могут получить IP
kubectl delete svc auth besu-connector keycloak prometheus grafana loki redis kafka-ui -n maniton
# Повторить деплой
bun dev.ts upВариант 2: Использовать скрипт диагностики:
./infra/k8s/scripts/fix-service-ip.shВариант 3: Пересоздать namespace (полная очистка):
kubectl delete namespace maniton
kubectl create namespace maniton
# Затем повторите деплой
bun dev.ts upВариант 4: Проверить и исправить Service CIDR в кластере:
# Для minikube
minikube ssh
sudo cat /etc/kubernetes/manifests/kube-apiserver.yaml | grep service-cluster-ip-range
# Для других кластеров - проверьте конфигурацию API server
# Убедитесь, что Service CIDR достаточно большой (например, /16)Вариант 5: Создать новый ServiceCIDR (Kubernetes 1.31+):
# Проверить текущий ServiceCIDR
kubectl get servicecidr
# Если ServiceCIDR удаляется или недоступен, создать новый
kubectl apply -f - <<EOF
apiVersion: networking.k8s.io/v1
kind: ServiceCIDR
metadata:
name: maniton-services
spec:
cidrs:
- 192.168.195.0/24 # Дополнительный диапазон (256 IP)
EOFВариант 6: Исправить состояние ServiceCIDR allocator:
# Если ServiceCIDR в состоянии удаления, принудительно удалить finalizer
kubectl patch servicecidr kubernetes -p '{"metadata":{"finalizers":[]}}' --type=merge
# Создать дополнительный ServiceCIDR с большим диапазоном
kubectl apply -f - <<EOF
apiVersion: networking.k8s.io/v1
kind: ServiceCIDR
metadata:
name: maniton-services
spec:
cidrs:
- 192.168.195.0/24 # 256 IP адресов
EOF
# Проверить статус
kubectl get servicecidr -o yamlИли использовать автоматическое исправление:
cd infra/k8s
make fix-service-ip
make deploy-devВариант 7: Временное решение - использовать headless services:
Если проблема критична, можно временно сделать все сервисы headless (clusterIP: None), но это ограничит функциональность.
6. Existing pods violate PodSecurity
Предупреждение:
Warning: existing pods in namespace "maniton" violate
the new PodSecurity enforce level "baseline:latest"Решение: Удалите существующие поды, которые не соответствуют новым стандартам:
kubectl delete pods --all -n maniton
# Или перезапустите deployment/statefulset
kubectl rollout restart deployment/auth -n maniton7. Проверка перед деплоем
# 1. Проверить валидность манифестов
cd infra/k8s
make validate
# 2. Проверить существующие ресурсы
kubectl get all -n maniton
# 3. Проверить события
kubectl get events -n maniton --sort-by='.lastTimestamp'
# 4. Проверить Resource Quota
kubectl describe resourcequota maniton-resource-quota -n maniton8. Полная очистка и передеплой
Если ничего не помогает:
# 1. Удалить все ресурсы в namespace
kubectl delete all --all -n maniton
kubectl delete pvc --all -n maniton
kubectl delete networkpolicies --all -n maniton
kubectl delete poddisruptionbudgets --all -n maniton
kubectl delete horizontalpodautoscalers --all -n maniton
# 2. Удалить namespace
kubectl delete namespace maniton
# 3. Пересоздать и задеплоить
kubectl create namespace maniton
make deploy-dev9. Проверка после деплоя
# Проверить статус всех ресурсов
kubectl get all -n maniton
# Проверить поды
kubectl get pods -n maniton
# Проверить события
kubectl get events -n maniton --sort-by='.lastTimestamp' | tail -20
# Проверить логи проблемных подов
kubectl logs <pod-name> -n maniton