本地Minikube部署带PostgreSQL的Django项目求助及配置文件
在Minikube上部署Django+PostgreSQL项目的修正方案
现有部署文件的关键问题
- PostgreSQL服务缺失:未创建PostgreSQL的Service,导致Django无法通过
postgres-service域名访问数据库 - PostgreSQL环境变量错误:官方Postgres镜像要求的环境变量是
POSTGRES_USER、POSTGRES_PASSWORD,而非你配置的DATABASE_USER、DATABASE_PASS - Django容器启动命令错误:
- 多命令执行格式错误,需通过shell串联(
&&) - 缺少
runserver指令,且未绑定0.0.0.0(容器内必须绑定所有IP才能被外部访问)
- 多命令执行格式错误,需通过shell串联(
- PVC定义缺失:PostgreSQL Deployment引用了
postgres-pvc,但未提供该PVC的配置文件
修正后的完整部署文件
1. PostgreSQL凭证Secret
先创建存储数据库用户名和密码的Secret:
apiVersion: v1 kind: Secret metadata: name: postgres-credentials type: Opaque data: user: cG9zdGdyZXM= # 示例:echo -n "postgres" | base64 后的结果 password: eW91cnBhc3N3b3Jk # 示例:echo -n "yourpassword" | base64 后的结果
2. PostgreSQL持久化存储PVC
apiVersion: v1 kind: PersistentVolumeClaim metadata: name: postgres-pvc spec: accessModes: - ReadWriteOnce resources: requests: storage: 1Gi
3. 修正后的PostgreSQL Deployment
apiVersion: apps/v1 kind: Deployment metadata: name: postgres-deployment spec: replicas: 1 selector: matchLabels: app: postgres-container template: metadata: labels: app: postgres-container tier: backend spec: containers: - name: postgres-container image: postgres:9.6.6 env: - name: POSTGRES_USER valueFrom: secretKeyRef: name: postgres-credentials key: user - name: POSTGRES_PASSWORD valueFrom: secretKeyRef: name: postgres-credentials key: password - name: POSTGRES_DB value: kubernetes_django ports: - containerPort: 5432 volumeMounts: - name: postgres-volume-mount mountPath: /var/lib/postgresql/data volumes: - name: postgres-volume-mount persistentVolumeClaim: claimName: postgres-pvc
4. PostgreSQL Service
apiVersion: v1 kind: Service metadata: name: postgres-service spec: selector: app: postgres-container ports: - port: 5432 targetPort: 5432
5. 修正后的Django Deployment
apiVersion: apps/v1 kind: Deployment metadata: name: django1 labels: app: django1 spec: replicas: 1 selector: matchLabels: app: django-container template: metadata: labels: app: django-container spec: containers: - name: todo image: jayantkeer/image-of-kubernets command: ["sh", "-c"] args: ["python manage.py makemigrations && python manage.py migrate && python manage.py runserver 0.0.0.0:8000"] ports: - containerPort: 8000 env: - name: POSTGRES_USER valueFrom: secretKeyRef: name: postgres-credentials key: user - name: POSTGRES_PASSWORD valueFrom: secretKeyRef: name: postgres-credentials key: password - name: POSTGRES_HOST value: postgres-service - name: POSTGRES_DB value: kubernetes_django
6. Django Service(保留你的原配置)
apiVersion: v1 kind: Service metadata: name: todo labels: app: todo spec: type: NodePort selector: app: django-container ports: - port: 8000 targetPort: 8000
部署步骤
- 启动Minikube:
minikube start - 依次创建所有资源:
kubectl apply -f postgres-secret.yaml kubectl apply -f postgres-pvc.yaml kubectl apply -f postgres-deployment.yaml kubectl apply -f postgres-service.yaml kubectl apply -f django-deployment.yaml kubectl apply -f django-service.yaml - 验证Pod状态,确保所有Pod处于
Running状态:kubectl get pods - 获取Django应用的访问地址:
复制输出的URL到浏览器即可访问你的Django项目。minikube service todo --url
内容的提问来源于stack exchange,提问作者Noob
相关产品推荐
相关产品推荐

