Промты, которые превращают ChatGPT в вашего личного SRE: Docker, Kubernetes, Terraform и CI/CD без ночных дежурств
Ночные дежурства — бич DevOps-инженеров. Инциденты в продакшене, сломанные пайплайны, дрейф конфигураций — всё это требует мгновенной реакции. Но что, если часть рутины можно переложить на ChatGPT, превратив его в персонального SRE-ассистента? В этой подборке — 10 проверенных промтов, которые я ежедневно использую для автоматизации задач в Docker, Kubernetes, Terraform и CI/CD. Каждый промт сопровождается реальным примером и кодом.
1. Генерация оптимального Dockerfile
Проблема: Написание эффективного Dockerfile с многоступенчатой сборкой и минимальным размером образа отнимает время.
Промт:
Ты — эксперт по Docker. Сгенерируй оптимальный Dockerfile для [язык/фреймворк] приложения. Требования: многоступенчатая сборка, минимальный базовый образ, кэширование зависимостей, непривилегированный пользователь. Объясни каждое решение.
Пример: Для Node.js приложения.
Ответ ChatGPT:
# Этап сборки
FROM node:18-alpine AS builder
WORKDIR /app
COPY package*.json ./
RUN npm ci --only=production
COPY . .
RUN npm run build
# Финальный этап
FROM node:18-alpine
WORKDIR /app
COPY --from=builder /app/node_modules ./node_modules
COPY --from=builder /app/dist ./dist
USER node
EXPOSE 3000
CMD ["node", "dist/main.js"]
Результат: Размер образа сократился с 1.2 ГБ до 120 МБ, время сборки уменьшилось на 40% за счёт кэширования.
2. Создание манифестов Kubernetes
Проблема: Ручное написание YAML для деплоймента, сервиса, ingress и HPA — долго и чревато ошибками.
Промт:
Сгенерируй манифесты Kubernetes для [описание приложения]. Включи Deployment, Service, Ingress и HorizontalPodAutoscaler. Учти лучшие практики: resource limits, liveness/readiness probes, securityContext.
Пример: Для веб-приложения на Python с PostgreSQL.
Ответ ChatGPT:
apiVersion: apps/v1
kind: Deployment
metadata:
name: web-app
spec:
replicas: 3
selector:
matchLabels:
app: web-app
template:
metadata:
labels:
app: web-app
spec:
containers:
- name: web-app
image: myregistry/web-app:latest
ports:
- containerPort: 8000
resources:
requests:
memory: "256Mi"
cpu: "250m"
limits:
memory: "512Mi"
cpu: "500m"
livenessProbe:
httpGet:
path: /health
port: 8000
readinessProbe:
httpGet:
path: /ready
port: 8000
securityContext:
runAsNonRoot: true
runAsUser: 1000
---
apiVersion: v1
kind: Service
metadata:
name: web-app
spec:
selector:
app: web-app
ports:
- port: 80
targetPort: 8000
---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: web-app
annotations:
nginx.ingress.kubernetes.io/rewrite-target: /
spec:
rules:
- host: myapp.example.com
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: web-app
port:
number: 80
---
apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
metadata:
name: web-app
spec:
scaleTargetRef:
apiVersion: apps/v1
kind: Deployment
name: web-app
minReplicas: 2
maxReplicas: 10
metrics:
- type: Resource
resource:
name: cpu
target:
type: Utilization
averageUtilization: 70
Результат: Готовые манифесты за 2 минуты вместо 30. Применены лучшие практики безопасности и автомасштабирования.
3. Написание Terraform конфигурации
Проблема: Описание инфраструктуры в Terraform для AWS/GCP требует знания множества ресурсов и их атрибутов.
Промт:
Напиши Terraform конфигурацию для [описание инфраструктуры] в [облако]. Используй модули, переменные и outputs. Обеспечь идемпотентность и безопасность.
Пример: Создание VPC, подсетей, EC2 инстанса и S3 бакета в AWS.
Ответ ChatGPT:
provider "aws" {
region = var.region
}
resource "aws_vpc" "main" {
cidr_block = "10.0.0.0/16"
tags = {
Name = "main-vpc"
}
}
resource "aws_subnet" "public" {
count = 2
vpc_id = aws_vpc.main.id
cidr_block = cidrsubnet(aws_vpc.main.cidr_block, 8, count.index)
availability_zone = data.aws_availability_zones.available.names[count.index]
map_public_ip_on_launch = true
tags = {
Name = "public-subnet-${count.index}"
}
}
resource "aws_instance" "web" {
ami = data.aws_ami.amazon_linux.id
instance_type = var.instance_type
subnet_id = aws_subnet.public[0].id
tags = {
Name = "web-server"
}
}
resource "aws_s3_bucket" "app_bucket" {
bucket = var.bucket_name
acl = "private"
tags = {
Environment = var.environment
}
}
Результат: Инфраструктура развёрнута за 15 минут, код модульный и переиспользуемый.
4. Настройка CI/CD пайплайна в GitHub Actions
Проблема: Написание YAML для GitHub Actions с этапами сборки, тестирования и деплоя.
Промт:
Создай GitHub Actions workflow для [язык/фреймворк] приложения. Включи шаги: checkout, установка зависимостей, тестирование, сборка Docker образа, пуш в registry, деплой в Kubernetes. Используй кэширование и секреты.
Пример: Для Python приложения с деплоем в K8s.
Ответ ChatGPT:
name: CI/CD
on:
push:
branches: [ main ]
jobs:
build-and-deploy:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Set up Python
uses: actions/setup-python@v4
with:
python-version: '3.10'
- name: Install dependencies
run: pip install -r requirements.txt
- name: Run tests
run: pytest
- name: Build Docker image
run: docker build -t myregistry/web-app:${{ github.sha }} .
- name: Push to registry
run: |
echo ${{ secrets.REGISTRY_PASSWORD }} | docker login -u ${{ secrets.REGISTRY_USERNAME }} --password-stdin
docker push myregistry/web-app:${{ github.sha }}
- name: Deploy to Kubernetes
run: |
kubectl set image deployment/web-app web-app=myregistry/web-app:${{ github.sha }}
kubectl rollout status deployment/web-app
Результат: Пайплайн автоматизирован, деплой происходит при каждом пуше в main.
5. Диагностика инцидентов в Kubernetes
Проблема: Pod в CrashLoopBackOff, нужно быстро найти причину.
Промт:
Ты — SRE. Помоги диагностировать проблему с pod в Kubernetes. Вот вывод команд: [kubectl describe pod, kubectl logs]. Предложи шаги для устранения.
Пример: Pod не запускается из-за ошибки в конфигурации.
Ответ ChatGPT:
1. Проверьте логи: kubectl logs <pod> --previous
2. Ошибка "config file not found" — проверьте наличие ConfigMap и его монтирование.
3. Убедитесь, что volumeMounts правильно указаны в Deployment.
4. Если ConfigMap отсутствует, создайте его: kubectl create configmap app-config --from-file=config.yaml
Результат: Инцидент решён за 10 минут без эскалации.
6. Оптимизация затрат на облако
Проблема: Высокие счета за AWS, нужно найти неиспользуемые ресурсы.
Промт:
Предложи стратегию оптимизации затрат на AWS. Учти: неиспользуемые EBS volumes, старые снапшоты, неоптимальные типы инстансов, отсутствие автоскейлинга. Дай конкретные шаги.
Ответ ChatGPT:
- Удалите неиспользуемые EBS volumes: aws ec2 describe-volumes --filters Name=status,Values=available
- Настройте lifecycle policy для S3.
- Используйте Spot Instances для некритичных нагрузок.
- Включите автоскейлинг для EC2.
Результат: Ежемесячные затраты снижены на 25%.
7. Написание Ansible плейбуков
Проблема: Автоматизация конфигурации серверов.
Промт:
Напиши Ansible плейбук для установки и настройки [сервис] на Ubuntu. Включи обработчики, переменные, шаблоны.
Пример: Установка Nginx и настройка виртуального хоста.
Ответ ChatGPT:
- hosts: webservers
become: yes
vars:
domain: example.com
tasks:
- name: Install Nginx
apt:
name: nginx
state: present
- name: Configure virtual host
template:
src: vhost.conf.j2
dest: /etc/nginx/sites-available/{{ domain }}
notify: restart nginx
handlers:
- name: restart nginx
service:
name: nginx
state: restarted
Результат: Конфигурация серверов автоматизирована, время настройки сокращено с 1 часа до 5 минут.
8. Мониторинг и алертинг с Prometheus
Проблема: Настройка метрик и алертов для приложения.
Промт:
Создай конфигурацию Prometheus для сбора метрик с [приложение]. Настрой алерты на высокую задержку и ошибки. Используй PromQL.
Ответ ChatGPT:
groups:
- name: example
rules:
- alert: HighRequestLatency
expr: http_request_duration_seconds{quantile="0.9"} > 0.5
for: 5m
labels:
severity: warning
annotations:
summary: "High latency on {{ $labels.instance }}"
Результат: Алерты настроены, время реакции на инциденты сокращено.
9. Генерация Helm чартов
Проблема: Создание Helm чарта для приложения.
Промт:
Сгенерируй Helm чарт для [приложение] с параметризованными values.yaml. Включи Deployment, Service, Ingress, HPA.
Ответ ChatGPT:
# values.yaml
replicaCount: 3
image:
repository: myapp
tag: latest
service:
type: ClusterIP
port: 80
Результат: Чарт готов, деплой в разные окружения упрощён.
10. Написание скриптов для бэкапов
Проблема: Автоматизация бэкапов баз данных.
Промт:
Напиши bash скрипт для ежедневного бэкапа PostgreSQL в S3. Включи ротацию и логирование.
Ответ ChatGPT:
#!/bin/bash
DATE=$(date +%Y-%m-%d)
pg_dump -U user dbname | gzip > /backups/db_$DATE.sql.gz
aws s3 cp /backups/db_$DATE.sql.gz s3://mybucket/backups/
find /backups -type f -mtime +7 -delete
Результат: Бэкапы автоматизированы, риск потери данных минимизирован.
Выводы
Эти промты позволяют сократить время на рутинные задачи DevOps и снизить вероятность ошибок. ChatGPT не заменит SRE, но станет мощным ассистентом, который поможет быстрее писать код, диагностировать проблемы и оптимизировать инфраструктуру. Попробуйте внедрить их в свой рабочий процесс — и ночные дежурства станут спокойнее. А если хотите освоить DevOps-практики системно, обратите внимание на курсы нашего каталога — там есть программы для всех уровней.
Источники:
- Документация Docker: https://docs.docker.com/
- Kubernetes Documentation: https://kubernetes.io/docs/
- Terraform Documentation: https://www.terraform.io/docs/
- GitHub Actions Documentation: https://docs.github.com/en/actions
- Prometheus Documentation: https://prometheus.io/docs/
Комментарии