11. 交付与运维
11.1 部署架构
Docker部署
Docker Compose配置
docker-compose.yml:
version: '3.8'
services:
transportation-api:
image: transportation-api:latest
ports:
- "8000:8000"
environment:
- DATABASE_URL=postgresql://user:password@postgres:5432/transportation_db
- REDIS_URL=redis://redis:6379
- API_KEY=${API_KEY}
depends_on:
- postgres
- redis
volumes:
- ./logs:/var/log/transportation
networks:
- transportation-network
postgres:
image: postgres:15
environment:
- POSTGRES_USER=user
- POSTGRES_PASSWORD=password
- POSTGRES_DB=transportation_db
volumes:
- postgres_data:/var/lib/postgresql/data
networks:
- transportation-network
redis:
image: redis:7-alpine
ports:
- "6379:6379"
volumes:
- redis_data:/data
networks:
- transportation-network
volumes:
postgres_data:
redis_data:
networks:
transportation-network:
Kubernetes部署
Deployment配置
deployment.yaml:
apiVersion: apps/v1
kind: Deployment
metadata:
name: transportation-api
spec:
replicas: 3
selector:
matchLabels:
app: transportation-api
template:
metadata:
labels:
app: transportation-api
spec:
containers:
- name: transportation-api
image: transportation-api:latest
ports:
- containerPort: 8000
env:
- name: DATABASE_URL
valueFrom:
secretKeyRef:
name: transportation-secrets
key: database-url
resources:
requests:
cpu: 1000m
memory: 2Gi
limits:
cpu: 2000m
memory: 4Gi
livenessProbe:
httpGet:
path: /health
port: 8000
initialDelaySeconds: 30
periodSeconds: 10
readinessProbe:
httpGet:
path: /ready
port: 8000
initialDelaySeconds: 10
periodSeconds: 5
Service配置
service.yaml:
apiVersion: v1
kind: Service
metadata:
name: transportation-api
spec:
selector:
app: transportation-api
ports:
- port: 80
targetPort: 8000
type: LoadBalancer
Ingress配置
ingress.yaml:
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: transportation-ingress
spec:
rules:
- host: api.transportation-ai.com
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: transportation-api
port:
number: 80
部署步骤
1. 准备工作
环境准备:
- 创建Kubernetes集群
- 配置存储和网络
- 准备镜像仓库
配置准备:
- 准备配置文件
- 准备密钥和证书
- 准备数据备份