Манитон Docs

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.appscount/deployments.apps
  • statefulsets.appscount/statefulsets.apps
  • jobs.batchcount/jobs.batch
  • ingress.networking.k8s.iocount/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.yaml

Prometheus будет использовать стандартное 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:
      - ALL

4. 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 maniton

7. Проверка перед деплоем

# 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 maniton

8. Полная очистка и передеплой

Если ничего не помогает:

# 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-dev

9. Проверка после деплоя

# Проверить статус всех ресурсов
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

On this page