You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

将Django应用与PostgreSQL部署至GKE集群时遇问题

持久化存储声明

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: postgres-pvc
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 10Gi # 根据你的需求调整大小

Postgres的内部服务,让Django能访问它

apiVersion: v1
kind: Service
metadata:
name: postgres-service
spec:
selector:
app: postgres
ports:
- protocol: TCP
port: 5432
targetPort: 5432
clusterIP: None # 无头服务,适合数据库这种有状态的应用

#### 第三步:部署Django应用
注意要把数据库地址换成K8s内部的Service名称,还要用环境变量读取Secret里的信息:
```yaml
# django-web-deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: django-web-deployment
spec:
  replicas: 2 # 多副本提高可用性
  selector:
    matchLabels:
      app: django-web
  template:
    metadata:
      labels:
        app: django-web
    spec:
      containers:
      - name: django-web
        image: gcr.io/[你的GCP项目ID]/agent-tech-web:v1 # 替换成你刚才推送的镜像地址
        env:
        - name: DB_HOST
          value: postgres-service # K8s内部可以直接通过Service名访问
        - name: DB_NAME
          valueFrom:
            secretKeyRef:
              name: postgres-secrets
              key: postgres-db
        - name: DB_USER
          valueFrom:
            secretKeyRef:
              name: postgres-secrets
              key: postgres-user
        - name: DB_PASSWORD
          valueFrom:
            secretKeyRef:
              name: postgres-secrets
              key: postgres-password
        ports:
        - containerPort: 8000
        command: ["python", "manage.py", "runserver", "0.0.0.0:8000"]
---
# Django的外部服务,让你能从公网访问
apiVersion: v1
kind: Service
metadata:
  name: django-web-service
spec:
  type: LoadBalancer # GKE会自动分配一个外部IP
  selector:
    app: django-web
  ports:
    - protocol: TCP
      port: 80
      targetPort: 8000

3. 把配置部署到GKE集群

先确保你已经切换到GKE的集群上下文:

gcloud container clusters get-credentials [你的集群名称] --zone [你的集群所在区域]

然后依次部署:

  1. 创建Secret:kubectl apply -f postgres-secrets.yaml
  2. 部署Postgres:kubectl apply -f postgres-deployment.yaml
  3. 部署Django:kubectl apply -f django-web-deployment.yaml

4. 检查部署状态

  • 看Pod是否正常运行:kubectl get pods
  • 看Service的外部IP:kubectl get services django-web-service
    等外部IP出来后,直接访问这个IP就能看到你的Django应用了!

几个关键注意事项

  • 你的Django settings.py 必须用环境变量配置数据库:
    import os
    
    DATABASES = {
        'default': {
            'ENGINE': 'django.db.backends.postgresql',
            'NAME': os.getenv('DB_NAME'),
            'USER': os.getenv('DB_USER'),
            'PASSWORD': os.getenv('DB_PASSWORD'),
            'HOST': os.getenv('DB_HOST'),
            'PORT': 5432,
        }
    }
    
  • 生产环境绝对不能用runserver,要换成Gunicorn或者uWSGI,搭配Nginx反向代理,不过先搞定基础部署再优化也没问题。
  • 记得给Django做迁移!可以用kubectl exec进入Pod执行:kubectl exec -it [django-pod-name] -- python manage.py migrate

内容的提问来源于stack exchange,提问作者Stefan Radonjic

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 10:39:08