У меня возникают проблемы при попытке развернуть мою базу данных Django Application и PostgreSQL в кластере Google Cloud Kubernetes, который я уже настроил.
Я успешно создал контейнеры Docker для моей базы данных Django Application и PostgreSQL. Вот как выглядит мой файл 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 и PostgreSQL я попытался настроить файлы Deployment / Service YML
, необходимые для Kubernetes, но у меня возникли проблемы с этим. Например:
deploy-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
, но я не уверен, где находится изображение этого контейнера, поэтому я не знаю, что я должен указать в качестве изображения контейнера.
Другая проблема заключается в postgres / deploy-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-претензия-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
Помимо вопросов, которые я уже задавал выше, я также хочу спросить, правильно ли я делаю? Если нет, что я могу сделать, чтобы это исправить.