Celery Worker部署

📅 2026/6/29 17:34:48
Celery Worker部署
# k8s/celery-deployment.yaml - MonkeyCode生成 apiVersion: apps/v1 kind: Deployment metadata: name: myapp-celery-worker namespace: myapp-production labels: app: myapp component: celery-worker spec: replicas: 2 selector: matchLabels: app: myapp component: celery-worker template: metadata: labels: app: myapp component: celery-worker spec: containers: - name: celery-worker image: registry.example.com/myapp-api:latest command: [celery, -A, app.celery_app, worker, --loglevelinfo, --concurrency4] envFrom: - configMapRef: name: myapp-config - secretRef: name: myapp-secrets resources: requests: cpu: 500m memory: 512Mi limits: cpu: 2000m memory: 1Gi --- apiVersion: apps/v1 kind: Deployment metadata: name: myapp-celery-beat namespace: myapp-production labels: app: myapp component: celery-beat spec: replicas: 1 # Beat只能运行1个副本 selector: matchLabels: app: myapp component: celery-beat template: metadata: labels: app: myapp component: celery-beat spec: containers: - name: celery-beat image: registry.example.com/myapp-api:latest command: [celery, -A, app.celery_app, beat, --loglevelinfo] envFrom: - configMapRef: name: myapp-config - secretRef: name: myapp-secrets6. 数据库部署StatefulSet# k8s/postgres-statefulset.yaml - MonkeyCode生成 apiVersion: apps/v1 kind: StatefulSet metadata: name: postgres namespace: myapp-production spec: serviceName: postgres-service replicas: 1 # 生产环境建议用云RDS selector: matchLabels: app: myapp component: postgres template: metadata: labels: app: myapp component: postgres spec: containers: - name: postgres image: postgres:16-alpine ports: - containerPort: 5432 env: - name: POSTGRES_DB value: myapp - name: POSTGRES_USER value: appuser - name: POSTGRES_PASSWORD valueFrom: secretKeyRef: name: myapp-secrets key: DB_PASSWORD - name: PGDATA value: /var/lib/postgresql/data/pgdata resources: requests: cpu: 500m memory: 1Gi limits: cpu: 2000m memory: 4Gi volumeMounts: - name: postgres-data mountPath: /var/lib/postgresql/data livenessProbe: exec: command: [pg_isready, -U, appuser, -d, myapp] initialDelaySeconds: 30 periodSeconds: 10 readinessProbe: exec: command: [pg_isready, -U, appuser, -d, myapp] initialDelaySeconds: 5 periodSeconds: 5 volumeClaimTemplates: - metadata: name: postgres-data spec: accessModes: [ReadWriteOnce] resources: requests: storage: 50Gi --- apiVersion: v1 kind: Service metadata: name: postgres-service namespace: myapp-production spec: selector: app: myapp component: postgres ports: - port: 5432 targetPort: 5432 clusterIP: None # Headless ServiceStatefulSet用7. CI/CD流水线GitHub Actions → K8s# .github/workflows/deploy.yml - MonkeyCode生成 name: Build and Deploy on: push: branches: [main] env: REGISTRY: registry.example.com IMAGE_NAME: myapp-api jobs: test: runs-on: ubuntu-latest steps: - uses: actions/checkoutv4 - uses: actions/setup-pythonv5 with: python-version: 3.11 - run: pip install -r requirements.txt - run: pytest tests/ -v --covapp --cov-reportxml - uses: codecov/codecov-actionv3 build: needs: test runs-on: ubuntu-latest steps: - uses: actions/checkoutv4 - name: Login to Registry uses: docker/login-actionv3 with: registry: ${{ env.REGISTRY }} username: ${{ secrets.REGISTRY_USERNAME }} password: ${{ secrets.REGISTRY_PASSWORD }} - name: Build and Push uses: docker/build-push-actionv5 with: context: . push: true tags: | ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:${{ github.sha }} ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:latest cache-from: typeregistry,ref${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:latest cache-to: typeinline deploy: needs: build runs-on: ubuntu-latest environment: production steps: - uses: actions/checkoutv4 - name: Deploy to K8s uses: steebchen/kubectlv2.1.1 with: config: ${{ secrets.KUBE_CONFIG }} command: set image deployment/myapp-api api${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:${{ github.sha }} -n myapp-production - name: Verify Deployment run: | kubectl rollout status deployment/myapp-api -n myapp-production --timeout300s kubectl get pods -n myapp-production -l appmyapp,componentapi8. 一键部署脚本#!/bin/bash # scripts/deploy.sh - MonkeyCode生成 set -euo pipefail ENV${1:-production} IMAGE_TAG${2:-latest} echo Deploying myapp to $ENV (tag: $IMAGE_TAG) # 创建命名空间 kubectl apply -f k8s/namespace.yaml # 应用配置 kubectl apply -f k8s/configmap.yaml # 应用数据库 kubectl apply -f k8s/postgres-statefulset.yaml # 等待数据库就绪 echo ⏳ Waiting for PostgreSQL... kubectl wait --forconditionready pod -l appmyapp,componentpostgres -n myapp-$ENV --timeout120s # 应用API kubectl set image deployment/myapp-api apiregistry.example.com/myapp-api:$IMAGE_TAG -n myapp-$ENV kubectl rollout status deployment/myapp-api -n myapp-$ENV --timeout300s # 应用Celery kubectl set image deployment/myapp-celery-worker celery-workerregistry.example.com/myapp-api:$IMAGE_TAG -n myapp-$ENV # 应用HPA kubectl apply -f k8s/hpa.yaml echo ✅ Deployment complete! kubectl get all -n myapp-$ENV