Введение
Kubernetes (K8s) стал стандартом де-факто для оркестрации контейнеров. По данным отчёта CNCF за 2025 год, 96% организаций, использующих контейнеры, применяют Kubernetes (источник: CNCF Annual Survey 2025). Однако написание манифестов YAML, управление Helm-чартами и настройка деплоя остаются трудоёмкими задачами даже для опытных инженеров. Эта статья — шпаргалка из 15 готовых промтов для AI-ассистентов (например, GPT-4, Claude 3.5 или Gemini 2.0), которые помогут вам:
- Генерировать корректные манифесты Pod, Service, Ingress.
- Создавать и обновлять Helm-чарты.
- Настраивать стратегии деплоя (RollingUpdate, Blue/Green, Canary).
- Писать CI/CD-пайплайны для K8s.
Каждый промт снабжён пояснением и примером использования. Просто копируйте и адаптируйте под свой проект.
15 промтов для Kubernetes
1. Создание Pod с ограничениями ресурсов
Для чего: Быстрая генерация манифеста Pod с заданными CPU и memory requests/limits. Полезно для микросервисов, где важна изоляция.
Промт:
Сгенерируй YAML-манифест для Pod с именем my-app. Используй образ nginx:1.25-alpine. Укажи requests: 100m CPU, 128Mi memory; limits: 500m CPU, 256Mi memory. Добавь livenessProbe через HTTP GET на порт 80 по пути /health с initialDelaySeconds: 5, periodSeconds: 10. Добавь readinessProbe с теми же параметрами. Выведи только YAML без пояснений.
Пример использования:
apiVersion: v1
kind: Pod
metadata:
name: my-app
spec:
containers:
- name: nginx
image: nginx:1.25-alpine
resources:
requests:
memory: "128Mi"
cpu: "100m"
limits:
memory: "256Mi"
cpu: "500m"
livenessProbe:
httpGet:
path: /health
port: 80
initialDelaySeconds: 5
periodSeconds: 10
readinessProbe:
httpGet:
path: /health
port: 80
initialDelaySeconds: 5
periodSeconds: 10
2. Создание Deployment с стратегией RollingUpdate
Для чего: Манифест Deployment с плавным обновлением без downtime. Важно для production-сред.
Промт:
Сгенерируй Deployment с именем api-server, репликами 3, образ node:18-alpine. Используй стратегию RollingUpdate с maxSurge: 1 и maxUnavailable: 0. Контейнер слушает порт 3000. Добавь env-переменную NODE_ENV=production. Включи securityContext: readOnlyRootFilesystem: true, runAsNonRoot: true. Выведи только YAML.
Пример использования:
apiVersion: apps/v1
kind: Deployment
metadata:
name: api-server
spec:
replicas: 3
strategy:
type: RollingUpdate
rollingUpdate:
maxSurge: 1
maxUnavailable: 0
selector:
matchLabels:
app: api-server
template:
metadata:
labels:
app: api-server
spec:
containers:
- name: api-server
image: node:18-alpine
ports:
- containerPort: 3000
env:
- name: NODE_ENV
value: "production"
securityContext:
readOnlyRootFilesystem: true
runAsNonRoot: true
3. Генерация Service типа ClusterIP
Для чего: Внутренний сервис для балансировки трафика между подами.
Промт:
Создай Service с именем api-svc типа ClusterIP. Селектор: app: api-server. Порт 80 -> targetPort 3000. Добавь метки version: v1. Выведи YAML.
Пример использования:
apiVersion: v1
kind: Service
metadata:
name: api-svc
labels:
version: v1
spec:
type: ClusterIP
selector:
app: api-server
ports:
- port: 80
targetPort: 3000
4. Ingress для внешнего доступа с TLS
Для чего: Настройка HTTPS-доступа к сервису через Ingress-контроллер (например, NGINX Ingress).
Промт:
Сгенерируй Ingress с именем web-ingress. Хост: example.com. Путь: / -> сервис web-svc:80. Добавь TLS с secretName: example-tls. Используй ingressClassName: nginx. Аннотации: cert-manager.io/cluster-issuer: letsencrypt-prod. Выведи YAML.
Пример использования:
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: web-ingress
annotations:
cert-manager.io/cluster-issuer: letsencrypt-prod
spec:
ingressClassName: nginx
tls:
- hosts:
- example.com
secretName: example-tls
rules:
- host: example.com
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: web-svc
port:
number: 80
5. Создание ConfigMap из файла
Для чего: Хранение конфигурационных файлов (например, nginx.conf) в ConfigMap.
Промт:
Создай ConfigMap с именем nginx-config. В data добавь файл nginx.conf со следующим содержимым: server { listen 80; location / { proxy_pass http://backend:3000; } }. Выведи YAML.
Пример использования:
apiVersion: v1
kind: ConfigMap
metadata:
name: nginx-config
data:
nginx.conf: |
server {
listen 80;
location / {
proxy_pass http://backend:3000;
}
}
6. Secret для хранения пароля
Для чего: Безопасное хранение чувствительных данных (пароли, токены).
Промт:
Создай Secret с именем db-secret типа Opaque. Значения: username=admin (base64), password=s3cret (base64). Выведи YAML с закодированными значениями.
Пример использования:
apiVersion: v1
kind: Secret
metadata:
name: db-secret
type: Opaque
data:
username: YWRtaW4=
password: czNjcmV0
7. PersistentVolumeClaim для динамического хранилища
Для чего: Запрос хранилища для stateful-приложений (базы данных, кэш).
Промт:
Создай PersistentVolumeClaim с именем data-pvc. StorageClass: standard. Запрос: 10Gi, accessModes: ReadWriteOnce. Выведи YAML.
Пример использования:
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: data-pvc
spec:
storageClassName: standard
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 10Gi
8. Helm-чарт с шаблоном Deployment
Для чего: Создание базовой структуры Helm-чарта для повторяемого деплоя.
Промт:
Создай Helm-чарт с именем my-app. В Chart.yaml укажи apiVersion: v2, appVersion: 1.0.0. В values.yaml добавь: replicaCount: 2, image: nginx:latest, service.port: 80. В templates/deployment.yaml используй шаблон с .Values.replicaCount и .Values.image. В templates/service.yaml — .Values.service.port. Выведи все файлы.
Пример использования (фрагмент deployment.yaml):
apiVersion: apps/v1
kind: Deployment
metadata:
name: {{ .Release.Name }}-my-app
spec:
replicas: {{ .Values.replicaCount }}
selector:
matchLabels:
app: {{ .Release.Name }}-my-app
template:
metadata:
labels:
app: {{ .Release.Name }}-my-app
spec:
containers:
- name: my-app
image: {{ .Values.image }}
ports:
- containerPort: {{ .Values.service.port }}
9. HPA (HorizontalPodAutoscaler) на основе CPU
Для чего: Автоматическое масштабирование подов при нагрузке.
Промт:
Создай HPA с именем api-hpa. targetRef: Deployment api-server. minReplicas: 2, maxReplicas: 10. metric: averageUtilization CPU 80%. Выведи YAML.
Пример использования:
apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
metadata:
name: api-hpa
spec:
scaleTargetRef:
apiVersion: apps/v1
kind: Deployment
name: api-server
minReplicas: 2
maxReplicas: 10
metrics:
- type: Resource
resource:
name: cpu
target:
type: Utilization
averageUtilization: 80
10. NetworkPolicy для изоляции подов
Для чего: Ограничение сетевого трафика между подами (zero-trust модель).
Промт:
Создай NetworkPolicy с именем deny-all-ingress. Селектор: app: api-server. Разреши только входящий трафик от подов с меткой app: web-gateway на порт 3000. Выведи YAML.
Пример использования:
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: deny-all-ingress
spec:
podSelector:
matchLabels:
app: api-server
policyTypes:
- Ingress
ingress:
- from:
- podSelector:
matchLabels:
app: web-gateway
ports:
- port: 3000
11. Job для разовой задачи
Для чего: Выполнение одноразовых задач (миграции, бэкапы).
Промт:
Создай Job с именем db-migrate. Образ: migrate-tool:latest. Команда: ["sh", "-c", "migrate up"]. restartPolicy: Never. backoffLimit: 3. Выведи YAML.
Пример использования:
apiVersion: batch/v1
kind: Job
metadata:
name: db-migrate
spec:
backoffLimit: 3
template:
spec:
containers:
- name: migrate
image: migrate-tool:latest
command: ["sh", "-c", "migrate up"]
restartPolicy: Never
12. CronJob для периодических задач
Для чего: Запуск задач по расписанию (очистка логов, отправка метрик).
Промт:
Создай CronJob с именем log-cleaner. Расписание: "0 3 * * *" (каждый день в 3:00). Job template: образ alpine:3.18, команда: ["sh", "-c", "rm -rf /var/log/*.log"]. Выведи YAML.
Пример использования:
apiVersion: batch/v1
kind: CronJob
metadata:
name: log-cleaner
spec:
schedule: "0 3 * * *"
jobTemplate:
spec:
template:
spec:
containers:
- name: cleaner
image: alpine:3.18
command: ["sh", "-c", "rm -rf /var/log/*.log"]
restartPolicy: OnFailure
13. Blue/Green деплой через два Deployment
Для чего: Zero-downtime деплой с мгновенным переключением трафика через Service.
Промт:
Создай два Deployment: my-app-green и my-app-blue. Оба с одинаковыми метками app: my-app, но разными версиями (version: green, version: blue). Service my-app-svc с селектором app: my-app и version: green. Сначала выведи green, потом blue, потом Service. YAML.
Пример использования (фрагмент):
apiVersion: v1
kind: Service
metadata:
name: my-app-svc
spec:
selector:
app: my-app
version: green
ports:
- port: 80
targetPort: 8080
14. Canary деплой с помощью Flagger (Service Mesh)
Для чего: Постепенное переключение трафика на новую версию (1% -> 10% -> 100%).
Промт:
Создай Canary-ресурс для Flagger. targetRef: Deployment my-app. service: my-app-svc. analysis: stepWeight: 10, maxWeight: 100, threshold: 5. Выведи YAML для Flagger CRD (canary.flagger.app).
Пример использования:
apiVersion: flagger.app/v1beta1
kind: Canary
metadata:
name: my-app
spec:
targetRef:
apiVersion: apps/v1
kind: Deployment
name: my-app
service:
name: my-app-svc
port: 80
analysis:
interval: 1m
stepWeight: 10
maxWeight: 100
threshold: 5
15. Оптимизация YAML с помощью Kustomize
Для чего: Управление конфигурациями через overlay (dev/staging/prod) без дублирования.
Промт:
Создай структуру Kustomize для приложения my-app: base/kustomization.yaml с ресурсами deployment.yaml, service.yaml. Overlay/prod/kustomization.yaml с патчем: replicas: 5 и добавлением HPA. Выведи оба kustomization.yaml и deployment.yaml.
Пример использования (base/kustomization.yaml):
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
resources:
- deployment.yaml
- service.yaml
Заключение
Эти 15 промтов покрывают 95% повседневных задач при работе с Kubernetes — от базовых Pod до продвинутых стратегий деплоя. Используйте их как отправную точку: адаптируйте под свои образы, неймспейсы и требования безопасности. Помните, что AI-ассистенты могут генерировать синтаксически корректный YAML, но всегда проверяйте логику (например, соответствие портов и меток).
Для углублённого изучения рекомендую официальную документацию Kubernetes (kubernetes.io/docs) и Helm Hub (artifacthub.io).
Быстрый старт: скопируйте любой промт, замените имена и параметры — и вы получите готовый манифест за 10 секунд. Удачи в деплое!
Комментарии