Ste*_*jic 1 django postgresql docker kubernetes
我在尝试将我的 Django 应用程序和 PostgreSQL 数据库部署到我已经配置的 Kubernetes Google Cloud 集群时遇到了问题。
我已经成功地为我的 Django 应用程序和 PostgreSQL 数据库创建了 Docker 容器。这是我的 docker-compose.yml 文件的样子:
version: '3'
services:
db:
image: postgres
environment:
- POSTGRES_USER=stefan_radonjic
- POSTGRES_PASSWORD=cepajecar995
- POSTGRES_DB=agent_technologies_db
web:
build: .
command: python manage.py runserver 0.0.0.0:8000 --settings=agents.config.docker-settings
volumes:
- .:/agent-technologies
ports:
- "8000:8000"
links:
- db
depends_on:
- db
Run Code Online (Sandbox Code Playgroud)
我已经构建了图像,并尝试了sudo docker-compose up命令,应用程序运行良好。
在成功对 Django 应用程序和 PostgreSQL 进行 dockerizing 后,我尝试配置YMLKubernetes 所需的部署/服务文件,但我在这样做时遇到了麻烦。例如:
deployment-definition.yml - 用于部署 Django 应用程序的文件:
apiVersion: apps/v1
kind: Deployment
metadata:
name: agent-technologies-deployment
labels:
app: agent-technologies
tier: backend
spec:
template:
metadata:
name: agent-technologies-pod
labels:
app: agent-technologies
tier: backend
spec:
containers:
- name:
image:
ports:
- containerPort: 8000
replicas:
selector:
matchLabels:
tier: backend
Run Code Online (Sandbox Code Playgroud)
在字典的容器列表中,我知道我的容器名称应该是web,但是我不确定该容器的图像所在的位置,所以我不知道应该将什么指定为容器图像。
另一个问题在于 postgres/deployment-definition.yml :
apiVersion: apps/v1
kind: Deployment
metadata:
name: postgres
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: agent_technologies_db
ports:
- containerPort: 5432
volumeMounts:
- name: postgres-volume-mount
mountPath: /var/lib/postgresql/data
volumes:
- name: postgres-volume-mount
persistentVolumeClaim:
claimName: postgres-pvc
Run Code Online (Sandbox Code Playgroud)
我不明白是什么volumeMounts和volumes是的,如果我连正确指定它们。
这是我的 secret-definition.yml 文件:
apiVersion: v1
kind: Secret
metadata:
name: postgres-credentials
type: Opaque
data:
user: stefan_radonjic
passowrd: cepajecar995
Run Code Online (Sandbox Code Playgroud)
我的 postgres/service-definition.yml 文件:
apiVersion: v1
kind: Service
metadata:
name: postgres-service
spec:
selector:
app: postgres-container
ports:
- protocol: TCP
port: 5432
targetPort: 5432
Run Code Online (Sandbox Code Playgroud)
我的 postgres/volume-definition.yml 文件:
apiVersion: v1
kind: PersistentVolume
metadata:
name: postgres-pv
labels:
type: local
spec:
capacity:
storage: 2Gi
storageClassName: standard
accessModes:
- ReadWriteMany
hostPath:
path: /data/postgres-pv
Run Code Online (Sandbox Code Playgroud)
还有我的 postgres/volume-claim-definitono.yml 文件:
apiVersion: v1
kind: PersistentVolume
metadata:
name: postgres-pv
labels:
type: local
spec:
capacity:
storage: 2Gi
storageClassName: standard
accessModes:
- ReadWriteMany
hostPath:
path: /data/postgres-pv
Run Code Online (Sandbox Code Playgroud)
最后但并非最不重要的是,我的 service-definition.yml 文件 - 用于 Django 应用程序
apiVersion: v1
kind: Service
metadata:
name: agent-technologies-service
spec:
selector:
app: agent-technologies
ports:
- protocol: TCP
port: 8000
targetPort: 8000
type: NodePort
Run Code Online (Sandbox Code Playgroud)
除了上面我已经问过的问题,我还想问我这样做对吗?如果没有,我能做些什么来解决这个问题。
在字典的容器列表中,我知道我的容器名称应该是 web,但是我不确定该容器的图像所在的位置,所以我不知道我应该将什么指定为容器图像。
容器的名称是 pod 的本地名称(您可以让多个容器共享同一个 pod)。容器名称(在您的情况下为 web)用于您在部署下提供的文件:
# setting name of first container within pod to web
spec:
containers:
- name: web
Run Code Online (Sandbox Code Playgroud)我不明白volumeMounts 和volumes 是做什么用的,如果我什至正确指定了它们。
除了上面我已经问过的问题,我还想问我这样做对吗?如果没有,我能做些什么来解决这个问题。
| 归档时间: |
|
| 查看次数: |
487 次 |
| 最近记录: |