Docker, Kubernetes и CI/CD: как я перестал деплоить вручную и собрал пайплайн на автопилоте

Введение

Ещё год назад мой деплой в прод выглядел так: я собирал образ локально, пушил в реестр, потом вручную правил deployment.yaml, применял kubectl apply и молился, чтобы поды не упали. Часто не обходилось: то контейнер падал из-за неверного CMD, то Kubernetes отказывался обновлять образ, потому что тег latest не менялся. Каждый релиз занимал минимум час, а в пятницу вечером я вообще старался ничего не трогать.

Проблема была не в том, что я не знал Docker или Kubernetes. Я знал их достаточно, чтобы писать манифесты и собирать образы. Но рутина съедала время и нервы. Я решил автоматизировать всё, что можно, с помощью промтов для AI-ассистентов. В этой статье я делюсь подборкой из 12 промтов, которые превратили мой хаотичный деплой в стабильный CI/CD-пайплайн. Теперь я деплою в прод за 5 минут и практически без участия человека.

Почему промты, а не готовые шаблоны?

Готовые шаблоны CI/CD часто не учитывают специфику проекта: монорепозиторий, нестандартные зависимости, требования безопасности. Промты позволяют AI-агенту сгенерировать конфигурацию под конкретный стек, а затем доработать её. Я использую AI-ассистента как парного программиста, который знает синтаксис Dockerfile, Kubernetes API и GitHub Actions.

Все промты я разделил на три уровня: базовые (для быстрого старта), продвинутые (для оптимизации и безопасности) и экспертные (для сложных сценариев). Каждый промт я проверял на реальном проекте — микросервисном приложении на Python (FastAPI) и Node.js, развёрнутом в Kubernetes в Yandex Cloud.

Базовые промты

1. Генерация Dockerfile для Python-приложения

Задача: Написать оптимальный Dockerfile для FastAPI-приложения с учётом кэширования слоёв.

Промт:

Ты — эксперт по Docker. Напиши Dockerfile для Python 3.11 приложения на FastAPI. Требования: использовать multi-stage сборку, кэшировать зависимости, не запускать от root, финальный образ на базе python:3.11-slim. Объясни каждую строку.

Пример результата:

# Stage 1: builder
FROM python:3.11-slim AS builder
WORKDIR /app
COPY requirements.txt .
RUN pip install --user -r requirements.txt

# Stage 2: runtime
FROM python:3.11-slim
WORKDIR /app
COPY --from=builder /root/.local /root/.local
COPY . .
ENV PATH=/root/.local/bin:$PATH
RUN useradd -m appuser && chown -R appuser /app
USER appuser
CMD ["uvicorn", "main:app", "--host", "0.0.0.0", "--port", "8000"]

2. Создание Deployment и Service для Kubernetes

Задача: Сгенерировать манифесты для деплоя приложения с проверками здоровья.

Промт:

Создай Kubernetes Deployment и Service для приложения на порту 8000. Используй образ myapp:1.0.0. Добавь liveness и readiness пробу на /health. Реплик — 3.

Пример результата:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: myapp
spec:
  replicas: 3
  selector:
    matchLabels:
      app: myapp
  template:
    metadata:
      labels:
        app: myapp
    spec:
      containers:
      - name: myapp
        image: myapp:1.0.0
        ports:
        - containerPort: 8000
        livenessProbe:
          httpGet:
            path: /health
            port: 8000
        readinessProbe:
          httpGet:
            path: /health
            port: 8000
---
apiVersion: v1
kind: Service
metadata:
  name: myapp
spec:
  selector:
    app: myapp
  ports:
    - port: 80
      targetPort: 8000

3. Настройка GitHub Actions для сборки и пуша образа

Задача: Автоматически собирать Docker-образ и пушить в Docker Hub при пуше в main.

Промт:

Напиши GitHub Actions workflow, который собирает Docker-образ и пушит в Docker Hub при пуше в main. Используй секреты DOCKER_USERNAME и DOCKER_PASSWORD. Тег образа — sha коммита.

Пример результата:

name: Build and Push
on:
  push:
    branches: [ main ]
jobs:
  build:
    runs-on: ubuntu-latest
    steps:
    - uses: actions/checkout@v4
    - name: Login to Docker Hub
      uses: docker/login-action@v3
      with:
        username: ${{ secrets.DOCKER_USERNAME }}
        password: ${{ secrets.DOCKER_PASSWORD }}
    - name: Build and push
      uses: docker/build-push-action@v5
      with:
        push: true
        tags: myapp:${{ github.sha }}

Продвинутые промты

4. Оптимизация Docker-образа с помощью dive

Задача: Уменьшить размер образа и убрать лишние слои.

Промт:

Проанализируй Dockerfile и предложи оптимизации: уменьшение размера, кэширование, безопасность. Используй dive для анализа. Напиши команду для проверки.

Пример результата:
- Объединить RUN apt-get update && apt-get install -y ... && rm -rf /var/lib/apt/lists/* в один слой.
- Использовать .dockerignore для исключения тестов и документации.
- Проверка: dive myapp:latest.

5. Настройка Horizontal Pod Autoscaler

Задача: Автоматически масштабировать поды при нагрузке.

Промт:

Создай HPA для Deployment myapp. Минимум 2 пода, максимум 10. Целевая загрузка CPU — 70%. Укажи apiVersion autoscaling/v2.

Пример результата:

apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
metadata:
  name: myapp-hpa
spec:
  scaleTargetRef:
    apiVersion: apps/v1
    kind: Deployment
    name: myapp
  minReplicas: 2
  maxReplicas: 10
  metrics:
  - type: Resource
    resource:
      name: cpu
      target:
        type: Utilization
        averageUtilization: 70

6. Секреты в Kubernetes

Задача: Безопасно хранить пароли и токены.

Промт:

Как создать Secret в Kubernetes для хранения DATABASE_URL и API_KEY? Покажи пример с kubectl и в манифесте. Как использовать Secret в Deployment?

Пример результата:

kubectl create secret generic app-secrets --from-literal=DATABASE_URL=postgres://... --from-literal=API_KEY=xyz

В Deployment:

env:
- name: DATABASE_URL
  valueFrom:
    secretKeyRef:
      name: app-secrets
      key: DATABASE_URL

Экспертные промты

7. Построение GitOps-пайплайна с ArgoCD

Задача: Автоматически синхронизировать состояние кластера с Git-репозиторием.

Промт:

Настрой ArgoCD для GitOps. Приложение myapp должно автоматически деплоиться при изменении в репозитории. Напиши Application манифест и объясни шаги установки ArgoCD.

Пример результата:

apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
  name: myapp
  namespace: argocd
spec:
  project: default
  source:
    repoURL: 'https://github.com/user/myapp-config.git'
    targetRevision: HEAD
    path: k8s
  destination:
    server: 'https://kubernetes.default.svc'
    namespace: default
  syncPolicy:
    automated:
      selfHeal: true
      prune: true

8. Канареечный деплой с Flagger

Задача: Постепенно переключать трафик на новую версию.

Промт:

Опиши, как настроить канареечный деплой с Flagger для приложения myapp. Какие метрики использовать? Приведи пример Canary-ресурса.

Пример результата:

apiVersion: flagger.app/v1beta1
kind: Canary
metadata:
  name: myapp
spec:
  targetRef:
    apiVersion: apps/v1
    kind: Deployment
    name: myapp
  service:
    port: 80
  analysis:
    interval: 1m
    threshold: 5
    metrics:
    - name: request-success-rate
      thresholdRange:
        min: 99
      interval: 1m

9. Сбор метрик с Prometheus и Grafana

Задача: Мониторить состояние приложения и кластера.

Промт:

Как установить Prometheus и Grafana в Kubernetes с помощью Helm? Настрой сбор метрик с приложения myapp. Покажи пример ServiceMonitor.

Пример результата:

helm repo add prometheus-community https://prometheus-community.github.io/helm-charts
helm install prometheus prometheus-community/kube-prometheus-stack

ServiceMonitor:

apiVersion: monitoring.coreos.com/v1
kind: ServiceMonitor
metadata:
  name: myapp-monitor
spec:
  selector:
    matchLabels:
      app: myapp
  endpoints:
  - port: web

10. Автоматическое обновление секретов с External Secrets Operator

Задача: Синхронизировать секреты из внешнего хранилища (Vault, AWS Secrets Manager).

Промт:

Как использовать External Secrets Operator для получения секретов из HashiCorp Vault? Напиши пример SecretStore и ExternalSecret.

Пример результата:

apiVersion: external-secrets.io/v1beta1
kind: SecretStore
metadata:
  name: vault-backend
spec:
  provider:
    vault:
      server: "https://vault.example.com"
      path: "secret"
      version: "v2"
      auth:
        tokenSecretRef:
          name: vault-token
          key: token

11. Отладка падающих подов

Задача: Быстро находить причину CrashLoopBackOff.

Промт:

Под myapp в статусе CrashLoopBackOff. Как найти причину? Опиши шаги с kubectl logs, describe, events.

Пример результата:

kubectl logs myapp-5f6d7c8b9-abcde --previous
kubectl describe pod myapp-5f6d7c8b9-abcde
kubectl get events --sort-by=.metadata.creationTimestamp

12. Оптимизация затрат на Kubernetes

Задача: Снизить расходы на облако.

Промт:

Проанализируй ресурсы кластера. Предложи способы снижения затрат: right-sizing, spot-инстансы, автомасштабирование. Напиши пример Vertical Pod Autoscaler.

Пример результата:

apiVersion: autoscaling.k8s.io/v1
kind: VerticalPodAutoscaler
metadata:
  name: myapp-vpa
spec:
  targetRef:
    apiVersion: "apps/v1"
    kind: Deployment
    name: myapp
  updatePolicy:
    updateMode: "Auto"

Результаты

После внедрения этих промтов и пайплайна время деплоя сократилось с 1 часа до 5 минут. Количество ошибок при деплое уменьшилось на порядок. Я перестал вручную править YAML и запускать kubectl. Теперь любой коммит в main автоматически проходит сборку, тесты, деплой в staging и, после подтверждения, в прод. В пятницу вечером я спокоен.

Выводы

Промты — это не замена знаниям, а ускоритель. Они помогают не забыть про liveness-пробы, правильно настроить HPA и не запустить контейнер от root. Если вы хотите глубже разобраться в Docker, Kubernetes и CI/CD, рекомендую начать с официальной документации и практики. А если хотите сэкономить время — используйте эти промты как отправную точку. Помните: AI-ассистент не несёт ответственности за ваши деплои, но может сделать их безопаснее и быстрее.

← Все статьи

Комментарии

Читайте также

Как пройти LeetCode-раунд за 40 минут: 12 промтов для тренировки алгоритмов и структур данных

20 сентября 2026

15 промтов для генерации скетчей Arduino, прошивок ESP32 и MicroPython для Raspberry Pi в IoT-проектах

19 сентября 2026

ChatGPT как репетитор китайского: промты для тонов, иероглифов и HSK 4 без зубрёжки

19 сентября 2026

Достижения в Vibe Coding: как выжить в цикле хайпа ИИ-кодинга 2026 года и реально выпускать ПО

19 сентября 2026

12 промтов для маркетинга и копирайтинга в 2026: как заменить копирайтера, аналитика и стратега с помощью ИИ

19 сентября 2026

12 промтов для контент-маркетинга: как с помощью ChatGPT и Claude построить воронку продаж и лендинги в 2026 году

19 сентября 2026

11 промтов для DaVinci Resolve и Premiere Pro: автоматизация монтажа, автосубтитры и AI-озвучка в 2026 году

19 сентября 2026

AI-агенты на практике: создайте ReAct-агента с нуля и масштабируйте до мультиагентной оркестрации

19 сентября 2026

12 промтов, которые заменяют SEO-агентство: как я вывел сайт в топ-3 без ссылок и копирайтеров

19 сентября 2026