deployment-guide

安装量: 44
排名: #16643

安装

npx skills add https://github.com/dengineproblem/agents-monorepo --skill deployment-guide

Deployment Guide Creator Эксперт по созданию production-ready документации для деплоя. Core Principles Structure & Organization Prerequisites listed first Environment-specific instructions Verification steps after each phase Rollback procedures documented Operational readiness covered Documentation Standards Imperative tone for instructions Exact commands with expected outputs Version specifications for all tools Context explaining why each step matters Estimated execution times per phase Standard Guide Structure

Deployment Guide: [Application Name]

Overview

Application description

Deployment strategy (blue-green, rolling, canary)

Architecture diagram

Key contacts

Prerequisites

System Requirements

OS: Ubuntu 22.04 LTS

RAM: 8GB minimum

Disk: 50GB SSD

Network: 100Mbps

Required Tools | Tool | Version | Purpose | |


|

|

| | Docker | 24.0+ | Containerization | | kubectl | 1.28+ | Kubernetes CLI | | Helm | 3.12+ | Package management |

Access Requirements

[ ] SSH access to jump server

[ ] Kubernetes cluster credentials

[ ] Container registry credentials

[ ] Secrets management access

Security Checklist

[ ] VPN connection established

[ ] MFA configured

[ ] SSH keys rotated (< 90 days) Pre-Deployment Checklist

Pre-Deployment Checklist

Code Readiness

[ ] All tests passing in CI

[ ] Code review approved

[ ] Security scan completed

[ ] Documentation updated

Environment Checks

[ ] Target cluster healthy

[ ] Database backups verified

[ ] Monitoring alerts silenced

[ ] Maintenance window scheduled

Rollback Preparation

[ ] Previous version tagged

[ ] Rollback procedure tested

[ ] Data migration reversible

[ ] Communication plan ready Deployment Phases Phase 1: Infrastructure Prep

Estimated time: 10 minutes

1. Verify cluster connectivity

kubectl cluster-info

Expected: Kubernetes control plane is running

2. Check node readiness

kubectl get nodes

Expected: All nodes in "Ready" state

3. Verify namespace exists

kubectl get namespace production

If not exists:

kubectl create namespace production Phase 2: Application Deployment

Estimated time: 15 minutes

1. Pull latest configuration

git pull origin main cd deployment/kubernetes

2. Update image tag in values

export IMAGE_TAG = v1.2.3 sed -i "s/tag: .*/tag: ${IMAGE_TAG} /" values.yaml

3. Deploy with Helm

helm upgrade --install myapp ./charts/myapp \ --namespace production \ --values values.yaml \ --wait \ --timeout 10m

Expected output:

Release "myapp" has been upgraded. Happy Helming!

Phase 3: Database Migration

Estimated time: 5-30 minutes (depends on data size)

1. Create backup before migration

kubectl exec -n production deploy/myapp -- \ pg_dump -Fc

backup_ $( date +%Y%m%d_%H%M%S ) .dump

2. Run migrations

kubectl exec -n production deploy/myapp -- \ npm run migrate

3. Verify migration status

kubectl exec -n production deploy/myapp -- \ npm run migrate:status Kubernetes Deployment Example

deployment.yaml

apiVersion : apps/v1 kind : Deployment metadata : name : myapp namespace : production labels : app : myapp version : v1.2.3 spec : replicas : 3 strategy : type : RollingUpdate rollingUpdate : maxSurge : 1 maxUnavailable : 0 selector : matchLabels : app : myapp template : metadata : labels : app : myapp spec : containers : - name : myapp image : registry.example.com/myapp : v1.2.3 ports : - containerPort : 8080 resources : requests : memory : "256Mi" cpu : "250m" limits : memory : "512Mi" cpu : "500m" livenessProbe : httpGet : path : /health port : 8080 initialDelaySeconds : 30 periodSeconds : 10 readinessProbe : httpGet : path : /ready port : 8080 initialDelaySeconds : 5 periodSeconds : 5 env : - name : NODE_ENV value : "production" - name : DATABASE_URL valueFrom : secretKeyRef : name : myapp - secrets key : database - url Post-Deployment Verification

Verification Checklist

Health Checks

[ ] All pods running: kubectl get pods -n production - [ ] Endpoints healthy: curl -s https://api.example.com/health - [ ] Database connected: Check application logs

Performance Validation

[ ] Response time < 200ms (p95)

[ ] Error rate < 0.1%

[ ] Memory usage stable

Security Checks

[ ] TLS certificates valid

[ ] No sensitive data in logs

[ ] Rate limiting active Verification Script

!/bin/bash

verify-deployment.sh

echo "=== Deployment Verification ==="

Check pod status

echo "Checking pods..." READY_PODS = $( kubectl get pods -n production -l app = myapp \ -o jsonpath = '{.items[*].status.containerStatuses[0].ready}' | tr ' ' '\n' | grep -c true ) TOTAL_PODS = $( kubectl get pods -n production -l app = myapp --no-headers | wc -l ) if [ " $READY_PODS " -eq " $TOTAL_PODS " ] ; then echo "✅ All $TOTAL_PODS pods ready" else echo "❌ Only $READY_PODS of $TOTAL_PODS pods ready" exit 1 fi

Check endpoints

echo "Checking health endpoint..." HTTP_CODE = $( curl -s -o /dev/null -w "%{http_code}" https://api.example.com/health ) if [ " $HTTP_CODE " -eq 200 ] ; then echo "✅ Health endpoint returning 200" else echo "❌ Health endpoint returning $HTTP_CODE " exit 1 fi

Check logs for errors

echo "Checking for errors in logs..." ERROR_COUNT = $( kubectl logs -n production -l app = myapp --since = 5m | grep -c "ERROR" ) if [ " $ERROR_COUNT " -lt 5 ] ; then echo "✅ Error count acceptable: $ERROR_COUNT " else echo "⚠️ High error count: $ERROR_COUNT " fi echo "=== Verification Complete ===" Rollback Procedures Automatic Rollback Triggers Health check failures > 3 consecutive Error rate > 5% for 5 minutes P99 latency > 2 seconds for 5 minutes Manual Rollback Steps

Estimated time: 5 minutes

1. Identify previous release

helm history myapp -n production

2. Rollback to previous version

helm rollback myapp [ REVISION ] -n production --wait

3. Verify rollback

kubectl get pods -n production -l app = myapp curl -s https://api.example.com/health

4. If database migration needs reversal

kubectl exec -n production deploy/myapp -- \ npm run migrate:down Data Recovery

Restore from backup if needed

kubectl exec -n production deploy/myapp -- \ pg_restore -d myapp_production backup_20240101_120000.dump Troubleshooting Common Issues

Issue: Pods stuck in ImagePullBackOff ** Symptoms: ** - Pods show ImagePullBackOff status - Events show "Failed to pull image" ** Resolution: ** 1. Verify image exists: docker pull registry.example.com/myapp:v1.2.3 2. Check registry credentials: kubectl get secret regcred -n production 3. Recreate secret if needed: ```bash kubectl create secret docker-registry regcred \ --docker-server=registry.example.com \ --docker-username=user \ --docker-password=pass \ -n production Issue: Health checks failing Symptoms: Pods restarting frequently Readiness probe failures in events Resolution: Check application logs: kubectl logs -n production deploy/myapp Verify environment variables: kubectl exec -n production deploy/myapp -- env Test health endpoint manually: kubectl port-forward deploy/myapp 8080:8080 Increase probe timeouts if startup is slow

Log Locations

``markdown | Log Type | Location | Command | |----------|----------|---------| | Application | Pod stdout |kubectl logs deploy/myapp| | Ingress | Ingress controller |kubectl logs -n ingress deploy/nginx| | Events | Kubernetes events |kubectl get events -n production| | Audit | Cluster audit logs |/var/log/kubernetes/audit.log` | Emergency Contacts | Role | Name | Contact | |


|

|

| | On-call Engineer | PagerDuty |

ops-escalation | | Database Admin | DBA Team | dba@example.com | | Security | Security Team | security@example.com | CI/CD Integration

.github/workflows/deploy.yml

name : Deploy to Production on : push : tags : - 'v*' jobs : deploy : runs-on : ubuntu - latest environment : production steps : - uses : actions/checkout@v4 - name : Configure kubectl uses : azure/k8s - set - context@v3 with : kubeconfig : $ { { secrets.KUBE_CONFIG } } - name : Deploy with Helm run : | helm upgrade --install myapp ./charts/myapp \ --namespace production \ --set image.tag=${{ github.ref_name }} \ --wait \ --timeout 10m - name : Verify deployment run : ./scripts/verify - deployment.sh - name : Notify on failure if : failure() uses : slackapi/slack - github - action@v1 with : payload : | {"text": "⚠️ Deployment failed for ${{ github.ref_name }}"} Лучшие практики Test rollback — регулярно тестируйте процедуры отката Incremental deploys — начинайте с малого % трафика Feature flags — разделяйте deploy и release Monitoring first — настройте мониторинг до деплоя Document everything — все шаги должны быть воспроизводимы Automate verification — скрипты вместо ручных проверок

返回排行榜