我在尝试将我的Django应用程序和PostgreSQL数据库部署到我已配置的Kubernetes Google Cloud群集时遇到了麻烦。
我已经为我的Django Application和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
我已经构建了图像,并尝试了sudo docker-compose up
命令,应用程序运行正常。
成功将Django Application和PostgreSQL对接后,我尝试配置Kubernetes所需的部署/服务YML
文件,但我遇到了麻烦。例如:
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
在容器的词典列表中,我知道我的容器名称应该是web
,但我不确定该容器的图像位于何处,所以我不知道应该指定什么作为容器图像。< / p>
另一个问题在于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
我不明白volumeMounts
和volumes
的用途,以及我是否正确指定了它们。
这是我的secret-definition.yml文件:
apiVersion: v1
kind: Secret
metadata:
name: postgres-credentials
type: Opaque
data:
user: stefan_radonjic
passowrd: cepajecar995
我的postgres / service-definition.yml文件:
apiVersion: v1
kind: Service
metadata:
name: postgres-service
spec:
selector:
app: postgres-container
ports:
- protocol: TCP
port: 5432
targetPort: 5432
我的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
我的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
最后但并非最不重要的是,我的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
除了上面已经提到的问题,我还想问我做得对吗?如果没有,我该怎么做才能解决这个问题。
答案 0 :(得分:4)
在容器的词典列表中,我知道我的容器名称应该是web,但我不确定该容器的图像位于何处,所以我不知道应该指定什么作为容器图像。
容器的名称是pod的本地名称(您可以有多个容器共享同一个pod)。容器名称(在您的情况下为Web)适用于部署时提供的文件:
# setting name of first container within pod to web
spec:
containers:
- name: web
我不明白volumeMounts和卷的用途,以及我是否正确指定它们。
除了上面已经提到的问题,我还想问我做得对吗?如果没有,我该怎么做才能解决这个问题。