Skip to content

Kubernetes 部署

使用提供的清单将 LambChat 部署到 Kubernetes 集群。

快速开始

bash
# 应用所有资源
kubectl apply -f k8s/lambchat.yaml

# 检查部署状态
kubectl get pods -n lambchat
kubectl get svc -n lambchat
kubectl get ingress -n lambchat

架构

K8s 清单(k8s/lambchat.yaml)创建以下资源:

资源名称说明
命名空间lambchat所有资源的隔离命名空间
DeploymentmongodbMongoDB 7 单节点
DeploymentredisRedis 7 单节点
DeploymentlambchatLambChat 应用
Servicemongo-svcMongoDB ClusterIP(端口 27017)
Serviceredis-svcRedis ClusterIP(端口 6379)
Servicelambchat-svcLambChat ClusterIP(端口 8000)
Ingresslambchat-ingressTraefik IngressRoute

配置

环境变量

编辑 k8s/lambchat.yaml 中的 lambchat Deployment 设置环境变量:

yaml
env:
  - name: JWT_SECRET_KEY
    value: "your-stable-secret-key"
  - name: MONGODB_URL
    value: "mongodb://mongo_lambchat:mongo_lambchat_123@mongo-svc:27017"
  - name: REDIS_URL
    value: "redis://redis-svc:6379/0"
  - name: APP_BASE_URL
    value: "https://lambchat.example.com"

对于敏感值,使用 Kubernetes Secrets:

yaml
env:
  - name: LLM_API_KEY
    valueFrom:
      secretKeyRef:
        name: lambchat-secrets
        key: llm-api-key

Ingress

默认清单使用 Traefik IngressRoute。根据你的 Ingress 控制器进行调整:

nginx Ingress 示例:

yaml
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: lambchat-ingress
  namespace: lambchat
  annotations:
    nginx.ingress.kubernetes.io/proxy-buffering: "off"
    nginx.ingress.kubernetes.io/proxy-read-timeout: "86400"
spec:
  tls:
    - hosts:
        - lambchat.example.com
      secretName: lambchat-tls
  rules:
    - host: lambchat.example.com
      http:
        paths:
          - path: /
            pathType: Prefix
            backend:
              service:
                name: lambchat-svc
                port:
                  number: 8000

扩缩容

bash
# 扩展应用副本数
kubectl scale deployment lambchat --replicas=3 -n lambchat

WARNING

扩展到多个副本时,如果使用本地文件存储,需确保配置了会话亲和性。生产环境建议使用 S3 存储(S3_ENABLED=true)而非本地存储。

管理

bash
# 查看 Pod
kubectl get pods -n lambchat

# 查看应用日志
kubectl logs -f deployment/lambchat -n lambchat

# 重启应用
kubectl rollout restart deployment/lambchat -n lambchat

# 删除所有资源
kubectl delete -f k8s/lambchat.yaml