首页 > 解决方案 > 将本地 docker 卷挂载到 kubernetes pod

问题描述

我正在尝试在 microk8s kubernetes 集群上启动一个 postgres pod。目前,包含所有数据的 postgres 容器在主机上本地启动。

问题是:是否可以将当前卷(从本地 docker 卷)映射到 kubernetes pod 部署?

我曾经将 Kubernetes 部署kompose转换docker-compose.yml为适当的.yaml文件。

上述命令kompose创建postgres-deployment.yamlpostgres-service.yaml和 2 persistantvolumeclaims(从 docker-compose 中映射的卷中,一个用于 pg_data,另一个用于 init_db 脚本)。

我是否需要在自动生成的PersistantVolume映射旁边生成映射以及它们的外观?PersistantVolumeClaimskompose

编辑:使用下面的 yaml,我为 postgres 容器制作了 2volumes和 2 volumeclaims,为 init_db 脚本制作了数据 1。运行它然后公开服务端点是有效的。警告:因为数据库在 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"

标签: postgresqlkubernetespersistent-volumesmicrok8skompose

解决方案


发布社区 wiki 以获得更好的可见性。随意扩展它。


通过定义自定义 PersistentVolume并设置如下,可以storageClassName与Kubernetes pod 共享相同的 docker 卷:hostPath

storageClassName: manual
hostPath:
  path: "/var/lib/docker/volumes/{docker-volume}"

但是,不可能在不同的 Postgres 安装之间共享相同的 Postgres 数据文件。它可能会导致数据损坏。检查此答案以获取更多详细信息。


推荐阅读