当前位置: 首页 > 知识库问答 >
问题:

在kubernetes本地装载portgresql持久卷时面临的问题

太叔小云
2023-03-14

我正在尝试使用静态配置在本地kubernetes中挂载postgrsql毅力卷。这是我创建的pv、pvc和pod的yaml文件

 apiVersion: v1
    kind: PersistentVolume
    metadata:
      name: task-pv-volume
      namespace: manhattan
      labels:
        type: local
    spec:
      storageClassName: manual
      capacity:
        storage: 100Mi
      accessModes:
        - ReadWriteOnce
      hostPath:
        path: "/mnt/data"
    ---
    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
      name: task-pv-claim
      namespace: manhattan
    spec:
      storageClassName: manual
      accessModes:
        - ReadWriteOnce
      resources:
        requests:
          storage: 80Mi
    ---
    apiVersion: v1
    kind: Pod
    metadata:
      name: dbr-postgres
 namespace: manhattan
spec:
  volumes:
    - name: task-pv-storage
      persistentVolumeClaim:
        claimName: task-pv-claim
  containers:
    - name: task-pv-container
      image: postgresql:2.0.1
      tty: true
      volumeMounts:
        -  mountPath: "/var/lib/pgsql/9.3/data"
           name: task-pv-storage
           subPath: data
           readOnly: false
  nodeSelector:
     kubernetes.io/hostname: k8s-master

我的卷位于 /var/lib/pgsql/9.3/data,但我的pod失败了,我不想将Mount tPath的位置更改为 /var/lib/pgsql/9.3/data/backup

你能建议yaml文件中的任何覆盖选项吗

我不想在这里创建新名称的文件夹。

如果我改变了挂载路径 /var/lib/pgsql/9.3/data/backuppod开始运行,但我不希望我希望数据写在同一个目录 /var/lib/pgsql/9.3/data

共有2个答案

欧阳衡
2023-03-14

我弄清楚了它出现的问题,因为我的数据目录最初不是空的。我需要在运行时在ENTRYPOINT或CMD期间运行postgresql init db

在kubernetes卷中必须有空的挂载路径,但如果您使用docker卷进行挂载,它可以正常工作

冯星剑
2023-03-14

根据postgres的官方留档: dockerhub的9.4:

1.请注意:

警告:Docker特定变量仅在您使用空数据目录启动容器时有效;在容器启动时,任何预先存在的数据库都将保持不变。

2.PGDATA环境变量:

此可选变量可用于为数据库文件定义另一个位置(如子目录)。默认值为/var/lib/postgresql/data,但如果您使用的数据卷是文件系统装入点(如GCE持久磁盘),则Postgres initdb建议创建一个子目录(例如/var/lib/postgresql/data/pgdata)来包含数据。

作为解决方法,请参阅:

  • 使用Dockerfile时的官方文档

您还可以使用头盔图将图像更改为特定图像:

从图表版本4.0.0开始,可以将此图表与Docker官方PostgreSQL图像一起使用。除了指定新的Docker存储库和标记外,修改PostgreSQL数据目录和卷装载点也很重要。基本上,PostgreSQL数据目录不能直接作为装入点,它必须是一个子目录。

helm install --name postgres \
             --set image.repository=postgres \
             --set image.tag=10.6 \
             --set postgresqlDataDir=/data/pgdata \
             --set persistence.mountPath=/data/ \
             stable/postgresql

您可以将此舵图模板化并进行自定义。从另一个角度来看,主要问题是您已经初始化了数据库-正如您在/var/lib/pgsql/9.3/data/backup中提到的那样,因此请验证您的docker文件和docker入口点。sh需要找出问题所在。

如果这有帮助,请告诉我。

 类似资料:
  • 我找到的最接近的答案是这样的。 但我想知道的是,Dockerfile卷命令会被Kubernetes完全忽略吗?或者数据将被持久化到两个地方?一个用于docker卷(在主机中哪个豆荚运行),另一个是Kubernetes的PV? 之所以这样问,是因为我从docker hub部署了一些容器,其中包含VOLUME命令。同时,我也把PVC贴在我的豆荚上。我在考虑是否会在节点中创建本地卷(docker卷,而不

  • 我正在将堆栈转换为K8S。数据库需要持久存储。 我使用了 pv.yaml(根据@Whites11的回答进行了编辑): 我进入GUI上的PVC页面,并手动向索赔添加了一个卷(基于@Whites11的反馈)。我可以看到PVC已经更新了体积,但它仍然悬而未决。 意识到自从进行@Whites11建议的更改后,pod中的原始错误消息已经更改。现在是“persistentvolume”pvvolume“not

  • 然后,我创建一个Kubernetes只读多个持久化卷声明,如下所示: 它绑定到我在上面创建的只读PV: 然后,我使用我刚才创建的PVC创建了一个包含2个副本的Kubernetes部署,如下所示:

  • 然后创建一个PersistentVolumeClaim 然后创建一个StatefulSet,并将卷装入/mnt/disks,这是一个现有的目录。stateFulset.yaml: 我运行命令并看到磁盘已成功地挂载到每个实例 我插入的实例是运行docker映像的实例。我在实例和docker容器中都看不到卷 我找到了卷,在实例中运行,并看到了相关条目 然后我进入docker容器并运行,我得到了 为什么

  • 问题内容: 我有一个在Kubernetes中的POD上运行的应用程序。我想将一些输出文件日志存储在持久存储卷上。 为此,我在NFS上创建了一个卷,并通过相关的卷声明将其绑定到POD。当我尝试写入或访问共享文件夹时,由于“ NFS”显然是只读的,因此收到“权限被拒绝”消息。 以下是我用来创建卷的json文件: 以下是POD配置文件 有没有办法更改权限? 更新 这是PVC和NFS配置: PVC: NF

  • 我不确定我是否有配置错误,或者我只是不知道在哪里查找,但我似乎找不到我的文件存储这些配置的地方 我的计算机内也没有任何东西 我还尝试在中查找,但该位置没有volumes目录