К основному содержанию
скилл CX Codex

blue-green-deploy — скилл для Claude Code: деплой без простоя

Скилл для настройки blue-green, canary и rolling-деплоя: переключение трафика, проверки здоровья и откат. Пригодится, когда релиз в прод нельзя ронять.

Установить в Claude Code · Через Skills CLI (Vercel) Все способы и платформы ↓
npx skills add BagelHole/DevOps-Security-Agent-Skills --skill blue-green-deploy -a claude-code
Открыть на GitHub

Что делает blue-green-deploy

Скилл описывает четыре схемы выката: blue-green, canary, rolling и recreate. Для каждой даёт готовые манифесты Kubernetes — отдельные Deployment для blue и green, Service, у которого переключение делается сменой селектора версии. Рядом лежит bash-скрипт blue-green-switch.sh: он проверяет статус роллаута новой версии, дёргает /health и только потом патчит сервис.

Для canary есть два варианта. Istio-манифесты с VirtualService и DestinationRule разводят трафик по весам и умеют отправлять на канареечный подписчик по заголовку x-canary. Argo Rollouts задаёт ступени 10, 25, 50 и 75 процентов с паузами и анализом success-rate через Prometheus. Для AWS ECS приведён appspec.yml с хуками CodeDeploy.

Заранее понадобится балансировщик или ingress-контроллер, оркестратор вроде Kubernetes либо облачная платформа, CI/CD-пайплайн и эндпоинт проверки здоровья. Без готового /health скрипт переключения просто упадёт на проверке — это первое, что стоит завести в приложении. У blue-green схема держит двойной запас ресурсов, потому что оба окружения живут одновременно.

Какие задачи решает

  • переключить трафик на новую версию без разрыва соединений
  • откатиться на прошлый релиз за секунды
  • пустить 10 процентов трафика на канареечную версию и следить за метриками
  • проверить здоровье пода до того, как на него пойдёт прод-трафик
  • описать canary-выкат в Argo Rollouts со ступенями и паузами

Примеры запросов агенту

  • Настрой blue-green деплой для моего приложения в Kubernetes: два Deployment и Service с переключением по селектору
  • Сделай canary-выкат через Istio: 90 процентов на stable, 10 на canary, плюс маршрут по заголовку x-canary
  • Напиши скрипт переключения blue-green с проверкой rollout status и эндпоинта /health

Как установить blue-green-deploy

1Через Skills CLI (Vercel)

npx skills add BagelHole/DevOps-Security-Agent-Skills --skill blue-green-deploy -a claude-code

2Вручную: положить файлы

~/.claude/skills/blue-green-deploy/SKILL.md

Папка скилла целиком; для одного проекта — .claude/skills/blue-green-deploy/

По шагам, с командами для каждой платформы: Как установить скилл в Claude Code: пять способов

Из того же набора127

mcp-server-security Скилл-руководство по укреплению MCP-серверов: TLS, OAuth 2.1, mTLS, валидация ввода и аудит вызовов инструментов. CX Codex +1 334установок llm-cost-optimization Скилл для сокращения расходов на LLM API: кеширование, выбор модели под задачу, батчинг и расчёт выгоды от self-hosting. CX Codex +1 334установок aws-iam Скилл для работы с AWS IAM: помогает писать политики, создавать роли и настраивать доступ по принципу least-privilege прямо из агента. CX Codex +1 333установок llm-gateway Скилл помогает развернуть API-шлюз перед несколькими LLM: балансировка, лимиты, ключи, кеш и учёт расходов. CX Codex +1 333установок cloudflare-pages Разворачивает статические сайты и fullstack-приложения на Cloudflare Pages. Помогает настроить edge-функции и превью для веток. CX Codex +1 331установок mdm-device-management Помогает настроить управление парком устройств на macOS, Windows, iOS и Android. Подсказывает конфигурации для развёртывания Fleet, политики osquery и шаги интеграции с MDM. CX Codex +1 330установок aws-rds Скилл для развёртывания и обслуживания баз Amazon RDS: бэкапы, реплики, параметры и мониторинг через AWS CLI. CX Codex +1 331установок gpu-server-management Скилл ведёт агента по установке драйверов NVIDIA, CUDA и Docker с GPU, делит A100/H100 через MIG и настраивает мониторинг. CX Codex +1 331установок

Похожие

blue-green-deployment davila7 Слэш-команда для Claude, которая разворачивает blue-green схему: переключение трафика, проверка здоровья и откат. 206установок deployment-pipeline-design Seth Hobson Проектирует многоэтапные CI/CD-пайплайны с проверками, согласованиями и стратегиями выката. Пригодится для canary, blue-green и отката релизов. CX Codex 13 758установок rollback-deploy davila7 Проводит откат деплоя к прошлой версии: проверки, работа с базой и мониторинг после переключения. 260установок microservices-patterns manutej Скилл по микросервисам: service mesh, circuit breakers, маршрутизация трафика и Istio. Пригодится, когда сервисы падают каскадом или нужен канареечный релиз. CX Codex +1 446установок sealos-deploy labring Развёртывает репозиторий в песочнице Brain Devbox на платформу Sealos Cloud через MCP-инструменты. Пригодится при сборке в режиме SEALAI_DEPLOY_MODE=managed. CX Codex +1 479установок k8s-security-policies Seth Hobson Скилл помогает задавать политики безопасности Kubernetes: сетевую изоляцию, RBAC и стандарты безопасности подов. Нужен при защите кластера. CX Codex 14 692установок

Рядом в теме «DevOps и инфраструктура»

Всё по теме «DevOps и инфраструктура» →

Вопросы о blue-green-deploy

Как установить blue-green-deploy в Claude?

Выполните npx skills add BagelHole/DevOps-Security-Agent-Skills --skill blue-green-deploy -a claude-code. После этого файл скилла окажется по пути ~/.claude/skills/blue-green-deploy/SKILL.md.

Что делает blue-green-deploy?

Описывает стратегии выката без простоя: blue-green, canary, rolling и recreate. Внутри манифесты Kubernetes, Istio, Argo Rollouts, appspec для AWS ECS и скрипт переключения трафика.

Что нужно подготовить до работы со скиллом?

Балансировщик или ingress-контроллер, оркестратор либо облачную платформу, CI/CD-пайплайн и эндпоинт проверки здоровья. Скрипт переключения обращается к /health и без него не пройдёт проверку.

Исходный текст

SKILL.md · MIT
---
name: blue-green-deploy
description: Configure zero-downtime deployment strategies including blue-green, canary, and rolling deployments. Implement traffic shifting, health checks, and rollback procedures. Use when implementing production deployment strategies or zero-downtime releases.
license: MIT
metadata:
  author: devops-skills
  version: "1.0"
---

# Blue-Green & Deployment Strategies

Implement zero-downtime deployment patterns for production systems.

## When to Use This Skill

Use this skill when:
- Implementing zero-downtime deployments
- Reducing deployment risk
- Enabling instant rollbacks
- Running canary releases
- Performing A/B testing in production

## Prerequisites

- Load balancer or ingress controller
- Container orchestration (K8s) or cloud platform
- CI/CD pipeline
- Health check endpoints

## Deployment Strategy Overview

```
┌─────────────────────────────────────────────────────────────┐
│                    DEPLOYMENT STRATEGIES                     │
├─────────────┬─────────────┬─────────────┬──────────────────┤
│  Blue-Green │   Canary    │   Rolling   │    Recreate      │
├─────────────┼─────────────┼─────────────┼──────────────────┤
│ Full env    │ Gradual %   │ Pod by pod  │ All at once      │
│ swap        │ rollout     │ replacement │                  │
├─────────────┼─────────────┼─────────────┼──────────────────┤
│ Instant     │ Slow, safe  │ Moderate    │ Fast, risky      │
│ rollback    │ rollback    │ rollback    │                  │
├─────────────┼─────────────┼─────────────┼──────────────────┤
│ 2x resources│ +10-25%     │ Same        │ Same             │
│ needed      │ resources   │ resources   │                  │
└─────────────┴─────────────┴─────────────┴──────────────────┘
```

## Blue-Green Deployment

### Concept

```
Before:
┌─────────┐     ┌───────────────┐
│  Users  │────▶│  Blue (v1)    │ ◀── Active
└─────────┘     └───────────────┘
                ┌───────────────┐
                │  Green (v2)   │ ◀── Staging
                └───────────────┘

After Switch:
┌─────────┐     ┌───────────────┐
│  Users  │     │  Blue (v1)    │ ◀── Standby
└─────────┘     └───────────────┘
      │         ┌───────────────┐
      └────────▶│  Green (v2)   │ ◀── Active
                └───────────────┘
```

### Kubernetes Implementation

```yaml
# blue-deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: myapp-blue
  labels:
    app: myapp
    version: blue
spec:
  replicas: 3
  selector:
    matchLabels:
      app: myapp
      version: blue
  template:
    metadata:
      labels:
        app: myapp
        version: blue
    spec:
      containers:
      - name: myapp
        image: myapp:v1.0.0
        ports:
        - containerPort: 8080
        readinessProbe:
          httpGet:
            path: /health
            port: 8080
          initialDelaySeconds: 5
          periodSeconds: 5
---
# green-deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: myapp-green
  labels:
    app: myapp
    version: green
spec:
  replicas: 3
  selector:
    matchLabels:
      app: myapp
      version: green
  template:
    metadata:
      labels:
        app: myapp
        version: green
    spec:
      containers:
      - name: myapp
        image: myapp:v2.0.0
        ports:
        - containerPort: 8080
        readinessProbe:
          httpGet:
            path: /health
            port: 8080
          initialDelaySeconds: 5
          periodSeconds: 5
---
# service.yaml - Switch by changing selector
apiVersion: v1
kind: Service
metadata:
  name: myapp
spec:
  selector:
    app: myapp
    version: blue  # Change to 'green' to switch
  ports:
  - port: 80
    targetPort: 8080
```

### Switch Script

```bash
#!/bin/bash
# blue-green-switch.sh

CURRENT=$(kubectl get svc myapp -o jsonpath='{.spec.selector.version}')
NEW_VERSION=$1

echo "Current version: $CURRENT"
echo "Switching to: $NEW_VERSION"

# Verify new deployment is ready
kubectl rollout status deployment/myapp-$NEW_VERSION

# Check health
HEALTH=$(kubectl exec -it deployment/myapp-$NEW_VERSION -- curl -s localhost:8080/health)
if [ "$HEALTH" != "ok" ]; then
  echo "Health check failed"
  exit 1
fi

# Switch traffic
kubectl patch svc myapp -p "{\"spec\":{\"selector\":{\"version\":\"$NEW_VERSION\"}}}"

echo "Switched to $NEW_VERSION"
```

### AWS ECS Blue-Green

```yaml
# AWS CodeDeploy appspec.yml
version: 0.0
Resources:
  - TargetService:
      Type: AWS::ECS::Service
      Properties:
        TaskDefinition: "arn:aws:ecs:region:account:task-definition/myapp:2"
        LoadBalancerInfo:
          ContainerName: "myapp"
          ContainerPort: 8080
Hooks:
  - BeforeInstall: "LambdaFunctionToValidateBeforeTrafficShift"
  - AfterInstall: "LambdaFunctionToValidateAfterTrafficShift"
  - AfterAllowTestTraffic: "LambdaFunctionToValidateTestTraffic"
  - BeforeAllowTraffic: "LambdaFunctionToValidateBeforeAllowTraffic"
  - AfterAllowTraffic: "LambdaFunctionToValidateAfterAllowTraffic"
```

## Canary Deployment

### Kubernetes with Istio

```yaml
# VirtualService for traffic splitting
apiVersion: networking.istio.io/v1beta1
kind: VirtualService
metadata:
  name: myapp
spec:
  hosts:
  - myapp
  http:
  - match:
    - headers:
        x-canary:
          exact: "true"
    route:
    - destination:
        host: myapp
        subset: canary
  - route:
    - destination:
        host: myapp
        subset: stable
      weight: 90
    - destination:
        host: myapp
        subset: canary
      weight: 10
---
apiVersion: networking.istio.io/v1beta1
kind: DestinationRule
metadata:
  name: myapp
spec:
  host: myapp
  subsets:
  - name: stable
    labels:
      version: stable
  - name: canary
    labels:
      version: canary
```

### Argo Rollouts

```yaml
apiVersion: argoproj.io/v1alpha1
kind: Rollout
metadata:
  name: myapp
spec:
  replicas: 5
  strategy:
    canary:
      steps:
      - setWeight: 10
      - pause: {duration: 5m}
      - setWeight: 25
      - pause: {duration: 5m}
      - setWeight: 50
      - pause: {duration: 5m}
      - setWeight: 75
      - pause: {duration: 5m}
      analysis:
        templates:
        - templateName: success-rate
        startingStep: 2
        args:
        - name: service-name
          value: myapp
  selector:
    matchLabels:
      app: myapp
  template:
    metadata:
      labels:
        app: myapp
    spec:
      containers:
      - name: myapp
        image: myapp:v2.0.0
        ports:
        - containerPort: 8080
---
apiVersion: argoproj.io/v1alpha1
kind: AnalysisTemplate
metadata:
  name: success-rate
spec:
  args:
  - name: service-name
  metrics:
  - name: success-rate
    interval: 1m
    successCondition: result[0] >= 0.95
    failureLimit: 3
    provider:
      prometheus:
        address: http://prometheus:9090
        query: |
          sum(rate(http_requests_total{service="{{args.service-name}}",status=~"2.*"}[5m]))
          /
          sum(rate(http_requests_total{service="{{args.service-name}}"}[5m]))
```

## Rolling Deployment

### Kubernetes Default

```yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: myapp
spec:
  replicas: 5
  strategy:
    type: RollingUpdate
    rollingUpdate:
      maxSurge: 1        # Max pods above desired
      maxUnavailable: 0   # Max pods unavailable
  selector:
    matchLabels:
      app: myapp
  template:
    metadata:
      labels:
        app: myapp
    spec:
      containers:
      - name: myapp
        image: myapp:v2.0.0
        ports:
        - containerPort: 8080
        readinessProbe:
          httpGet:
            path: /ready
            port: 8080
          initialDelaySeconds: 5
          periodSeconds: 5
        livenessProbe:
          httpGet:
            path: /health
            port: 8080
          initialDelaySeconds: 10
          periodSeconds: 10
```

### Rolling Update Commands

```bash
# Update image
kubectl set image deployment/myapp myapp=myapp:v2.0.0

# Watch rollout
kubectl rollout status deployment/myapp

# Pause rollout
kubectl rollout pause deployment/myapp

# Resume rollout
kubectl rollout resume deployment/myapp

# Rollback
kubectl rollout undo deployment/myapp

# Rollback to specific revision
kubectl rollout undo deployment/myapp --to-revision=2

# View history
kubectl rollout history deployment/myapp
```

## Health Checks

### Comprehensive Health Endpoint

```python
# Flask health endpoint
from flask import Flask, jsonify
import psycopg2
import redis

app = Flask(__name__)

@app.route('/health')
def health():
    """Liveness probe - is the app running?"""
    return jsonify({'status': 'healthy'}), 200

@app.route('/ready')
def ready():
    """Readiness probe - can the app serve traffic?"""
    checks = {}
    
    # Database check
    try:
        conn = psycopg2.connect(DATABASE_URL)
        conn.close()
        checks['database'] = 'ok'
    except Exception as e:
        checks['database'] = str(e)
        return jsonify({'status': 'unhealthy', 'checks': checks}), 503
    
    # Redis check
    try:
        r = redis.from_url(REDIS_URL)
        r.ping()
        checks['redis'] = 'ok'
    except Exception as e:
        checks['redis'] = str(e)
        return jsonify({'status': 'unhealthy', 'checks': checks}), 503
    
    return jsonify({'status': 'healthy', 'checks': checks}), 200
```

## Rollback Procedures

### Automated Rollback

```bash
#!/bin/bash
# auto-rollback.sh

DEPLOYMENT=$1
THRESHOLD=0.95
INTERVAL=60

echo "Monitoring deployment $DEPLOYMENT"

while true; do
  # Get success rate from Prometheus
  SUCCESS_RATE=$(curl -s "http://prometheus:9090/api/v1/query?query=sum(rate(http_requests_total{status=~\"2.*\"}[5m]))/sum(rate(http_requests_total[5m]))" | jq -r '.data.result[0].value[1]')
  
  echo "Current success rate: $SUCCESS_RATE"
  
  if (( $(echo "$SUCCESS_RATE < $THRESHOLD" | bc -l) )); then
    echo "Success rate below threshold! Rolling back..."
    kubectl rollout undo deployment/$DEPLOYMENT
    exit 1
  fi
  
  sleep $INTERVAL
done
```

### Manual Rollback Checklist

```markdown
## Rollback Checklist

### Before Rollback
- [ ] Confirm issue is deployment-related
- [ ] Document current error rates
- [ ] Notify team in #deployments channel

### During Rollback
- [ ] Execute rollback command
- [ ] Monitor rollback progress
- [ ] Verify old version is serving traffic

### After Rollback
- [ ] Confirm error rates normalized
- [ ] Update incident ticket
- [ ] Schedule post-mortem
```

## Common Issues

### Issue: Slow Deployments
**Problem**: Rollout takes too long
**Solution**: Increase maxSurge, decrease minReadySeconds

### Issue: Failed Health Checks
**Problem**: Pods not becoming ready
**Solution**: Check probe endpoints, increase timeouts

### Issue: Traffic During Rollback
**Problem**: Errors during switch
**Solution**: Use connection draining, implement graceful shutdown

## Best Practices

- Always implement health checks
- Use connection draining
- Test rollback procedures regularly
- Monitor key metrics during deployment
- Implement circuit breakers
- Use deployment slots/environments
- Automate deployment verification
- Document rollback procedures

## Related Skills

- [kubernetes-ops](../../orchestration/kubernetes-ops/) - K8s deployment basics
- [argocd-gitops](../../orchestration/argocd-gitops/) - GitOps deployments
- [feature-flags](../feature-flags/) - Progressive rollout

© devops-skills · MIT · BagelHole/DevOps-Security-Agent-Skills

Смотрите также

Спонсоры проекта

Компании, которые помогают держать аналитику открытой