12 промтов для Kubernetes: как превратить нейросеть в опытного SRE-инженера
Kubernetes — это мощная, но сложная система. Даже опытные DevOps-инженеры тратят часы на разбор CrashLoopBackOff, написание манифестов и настройку сетевых политик. Нейросети, такие как ChatGPT, Claude или Gemini, могут стать вашим виртуальным SRE-ассистентом, если правильно формулировать запросы.
В этой подборке — 12 проверенных промтов для Kubernetes, которые покрывают диагностику, написание YAML, оптимизацию ресурсов, безопасность и Helm. Каждый промт содержит готовый шаблон, пример использования и пояснение, для какой задачи он подходит. Вы можете копировать их и адаптировать под свой кластер.
1. Диагностика падающих подов (CrashLoopBackOff)
Задача: Под постоянно перезапускается, и вы не понимаете причину.
Промт:
Ты — опытный SRE. У меня под в состоянии CrashLoopBackOff. Вот вывод `kubectl describe pod <pod-name>` и `kubectl logs <pod-name> --previous`. Проанализируй ошибки, укажи вероятные причины и предложи пошаговый план исправления. Приведи команды для проверки.
Пример:
kubectl describe pod my-app-7c9f8d6b5-abcde -n production
kubectl logs my-app-7c9f8d6b5-abcde --previous
Нейросеть укажет на типичные проблемы: неверный образ, отсутствие ConfigMap, OOMKilled, ошибки в liveness-пробе.
2. Генерация манифеста Deployment с ресурсами и пробами
Задача: Нужно быстро создать корректный YAML для нового сервиса.
Промт:
Сгенерируй манифест Kubernetes для Deployment и Service. Приложение: <имя>, образ: <image:tag>, порт: 8080. Добавь requests/limits (CPU 100m/500m, память 128Mi/256Mi), liveness и readiness пробы, 3 реплики. Используй best practices.
Пример вывода:
apiVersion: apps/v1
kind: Deployment
metadata:
name: my-app
spec:
replicas: 3
selector:
matchLabels:
app: my-app
template:
metadata:
labels:
app: my-app
spec:
containers:
- name: my-app
image: my-app:1.0
ports:
- containerPort: 8080
resources:
requests:
cpu: 100m
memory: 128Mi
limits:
cpu: 500m
memory: 256Mi
livenessProbe:
httpGet:
path: /healthz
port: 8080
initialDelaySeconds: 10
periodSeconds: 5
readinessProbe:
httpGet:
path: /ready
port: 8080
initialDelaySeconds: 5
periodSeconds: 5
3. Настройка Horizontal Pod Autoscaler (HPA)
Задача: Автоматически масштабировать приложение по CPU или кастомным метрикам.
Промт:
Напиши манифест HPA для Deployment <name>. Минимум 2 пода, максимум 10. Целевая загрузка CPU — 70%. Добавь комментарии, объясняющие параметры. Если нужны кастомные метрики, покажи пример с Prometheus Adapter.
Пример:
apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
metadata:
name: my-app-hpa
spec:
scaleTargetRef:
apiVersion: apps/v1
kind: Deployment
name: my-app
minReplicas: 2
maxReplicas: 10
metrics:
- type: Resource
resource:
name: cpu
target:
type: Utilization
averageUtilization: 70
4. Создание NetworkPolicy для ограничения трафика
Задача: Разрешить трафик только от определённых подов.
Промт:
Создай NetworkPolicy, которая разрешает входящий трафик к подам с меткой app=backend только от подов с меткой app=frontend на порт 8080. Весь остальной входящий трафик запрещён. Объясни, как это влияет на DNS.
Пример:
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: backend-policy
spec:
podSelector:
matchLabels:
app: backend
policyTypes:
- Ingress
ingress:
- from:
- podSelector:
matchLabels:
app: frontend
ports:
- protocol: TCP
port: 8080
5. Отладка Ingress и TLS
Задача: Ingress не работает, сертификат не выдаётся.
Промт:
Мой Ingress возвращает 404 или 502. Вот его YAML и вывод `kubectl describe ingress`. Проверь синтаксис, соответствие сервисов, аннотации для cert-manager. Предложи шаги диагностики.
Пример: Часто проблема в неверном ingressClassName или отсутствии аннотации cert-manager.io/cluster-issuer.
6. Оптимизация ресурсов: поиск перерасхода
Задача: Снизить затраты на кластер.
Промт:
У меня есть вывод `kubectl top pods --all-namespaces`. Проанализируй, какие поды потребляют больше всего CPU и памяти. Предложи, как изменить requests/limits для экономии, но без риска OOM. Учти, что приложение чувствительно к задержкам.
Пример анализа: Нейросеть выделит поды с завышенными requests и предложит установить VPA (Vertical Pod Autoscaler) в режиме рекомендаций.
7. Написание Helm-чарта с нуля
Задача: Упаковать приложение в Helm.
Промт:
Создай структуру Helm-чарта для приложения <name>. Включи Deployment, Service, Ingress, ConfigMap. Используй values.yaml для настройки образа, реплик и ресурсов. Добавь _helpers.tpl для шаблонизации имён. Покажи пример values.yaml.
Пример структуры:
my-chart/
Chart.yaml
values.yaml
templates/
deployment.yaml
service.yaml
ingress.yaml
configmap.yaml
_helpers.tpl
8. Аудит безопасности кластера
Задача: Проверить конфигурацию на уязвимости.
Промт:
Проанализируй мой PodSecurityPolicy (или Pod Security Admission) и RBAC. Вот вывод `kubectl get roles,rolebindings,clusterroles --all-namespaces`. Найди избыточные права, контейнеры с root, отсутствие readOnlyRootFilesystem. Дай рекомендации по CIS Benchmark.
Пример: Нейросеть укажет на securityContext: privileged: true и предложит заменить на runAsNonRoot: true.
9. Диагностика проблем с DNS в кластере
Задача: Сервисы не резолвятся по имени.
Промт:
Поды не могут подключиться к сервису по DNS-имени. Вот вывод `kubectl exec -it <pod> -- nslookup <service>`. Проверь CoreDNS, NetworkPolicy, ndots. Объясни, как работает DNS в Kubernetes.
Пример: Частая причина — NetworkPolicy блокирует трафик к kube-dns.
10. Настройка PersistentVolume и StorageClass
Задача: Подключить постоянное хранилище.
Промт:
Создай PVC и StorageClass для приложения <name>. Используй динамическое выделение, размер 10Gi, режим ReadWriteOnce. Покажи, как подключить том к поду. Учти, что облако — AWS (EBS).
Пример:
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: fast
provisioner: ebs.csi.aws.com
parameters:
type: gp3
11. Отладка Job и CronJob
Задача: Задача не выполняется или падает.
Промт:
Мой CronJob не запускается или завершается с ошибкой. Вот его YAML и логи пода. Проверь расписание, concurrencyPolicy, backoffLimit. Предложи исправления.
Пример: Ошибка в формате cron (5 полей вместо 6) или отсутствие restartPolicy: OnFailure.
12. Генерация kubeconfig и настройка доступа
Задача: Выдать доступ разработчику с ограниченными правами.
Промт:
Создай ServiceAccount, Role и RoleBinding для разработчика <name> в namespace <ns>. Разреши только get, list, watch для pods и logs. Сгенерируй kubeconfig для этого пользователя. Объясни, как безопасно передать его.
Пример:
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
namespace: dev
name: developer
rules:
- apiGroups: [""]
resources: ["pods", "pods/log"]
verbs: ["get", "list", "watch"]
Как использовать эти промты эффективно
- Контекст решает всё: Всегда добавляйте вывод команд
kubectl describe,kubectl logs,kubectl get -o yaml. Чем больше данных, тем точнее ответ. - Уточняйте версию Kubernetes: API меняется, поэтому указывайте версию (например, 1.29) в промте.
- Проверяйте рекомендации: Нейросеть может ошибаться. Всегда тестируйте YAML в dev-кластере перед продакшеном.
- Используйте роли: Начинайте промт с «Ты — опытный SRE» или «Ты — архитектор Kubernetes» — это улучшает качество ответов.
Эти 12 промтов покрывают большинство ежедневных задач DevOps-инженера. Они не заменят глубоких знаний, но ускорят рутину и помогут быстрее находить решения. Попробуйте их в своём кластере и адаптируйте под свои процессы.
Источники:
- Kubernetes Documentation
- CIS Kubernetes Benchmark
- Helm Docs
Comments