【发布时间】:2021-10-30 00:29:29
【问题描述】:
我正在尝试在 microk8s kubernetes 集群上启动一个 postgres pod。目前,包含所有数据的 postgres 容器在主机本地启动。
问题是:是否可以将当前卷(从本地 docker 卷)映射到 kubernetes pod 部署?
我已使用kompose 将docker-compose.yml 转换为适当的.yaml 文件以用于kubernetes 部署。
上述命令kompose 创建postgres-deployment.yaml、postgres-service.yaml 和2 个persistantvolumeclaims(来自docker-compose 中映射的卷,一个用于pg_data,另一个用于init_db 脚本)。
我是否需要在 PersistantVolumeClaims 旁边生成由 kompose 自动生成的映射以及它们的外观?
编辑:使用下面的 yaml,我为 postgres 容器制作了 2 个 volumes 和 2 个 volumeclaims,其中一个用于 init_db 脚本的数据。运行它然后公开服务端点是有效的。
警告:因为数据库在 docker 主机容器和 kubernetes pod 上运行,同时发生数据损坏。
kind: PersistentVolume
apiVersion: v1
metadata:
name: postgres-pv-volume
labels:
type: local
spec:
storageClassName: manual
capacity:
storage: 10Gi
accessModes:
- ReadWriteOnce
hostPath:
path: "/var/lib/docker/volumes/dummy_pgdata/_data"
【问题讨论】:
-
澄清一下 - 您想将现有的 docker 卷(独立于 Kubernetes 创建)和一些数据挂载到 Kubernetes pod?
-
@MikolajS。是的。而且我希望在主机或 kubernetes pod 上传播该卷(在每次更改时更新)。
-
能否分享一个 Docker compose
yaml配置文件?您使用哪个kompose命令进行转换? -
我已经编辑了@WytrzymałyWiktor 上面的帖子
-
@MikolajS。我使用了 kompose convert 并提供了 docker-compose 文件。虽然我对volumes和volumeMounts做了一些调整。使用上面编辑中的 Persistant 卷,我已经能够从已经运行的 postgres db 中挂载数据,但就像我说的那样,发生数据损坏是因为 2 个数据库试图插入同一个卷(来自 /var/lib/docker 的快照/volumes/dummy_pgdata/_data 没有为两个数据库同步)
标签: postgresql kubernetes persistent-volumes microk8s kompose