Kubernetes 持久化卷

问题描述 投票:0回答:1

我正在设置一个 Kubernetes pod,它需要与持久卷 (PV) 和持久卷声明 (PVC) 配合使用以进行数据存储。目标是将 SQLite 数据库文件复制到 pod 内的辅助目录中,但我遇到了找不到该文件的问题。这是我检查 pod 日志时收到的错误消息: 我收到错误消息

kubectl logs -f pathfinder-db-snapshot  cp: can't stat '/mnt/data/pathfinder/testnet-sepolia.sqlite': No such file or directory

这是我的dockerfile

FROM alpine:3.20

RUN apk update && apk add --no-cache \
    sudo \
    bash \
    unzip

WORKDIR /mnt/data

COPY testnet-sepolia.sqlite /mnt/data/pathfinder/testnet-sepolia.sqlite

CMD ["sh", "-c", "sudo -v && mkdir -p /mnt/data/pathfinder-2 && cp /mnt/data/pathfinder/testnet-sepolia.sqlite /mnt/data/pathfinder-2/testnet-sepolia.sqlite && tail -f /dev/null"]

如您所见,我将文件 (testnet-sepolia.sqlite) 复制到 /mnt/data/pathfinder 中,然后在 Pod 启动时尝试将其复制到另一个目录 (/mnt/data/pathfinder-2) 中。

这是使用 Docker 镜像的 pod 配置:

apiVersion: v1
kind: Pod
metadata:
  name: pathfinder-db-snapshot
spec:
  containers:
    - name: pathfinder-fetcher
      image: test/pathfinder-db-snapshotv2
      volumeMounts:
        - mountPath: /mnt/data/pathfinder
          name: pathfinder-volume
        - mountPath: /mnt/data/pathfinder-2
          name: pathfinder-volume-2
  volumes:
    - name: pathfinder-volume
      persistentVolumeClaim:
        claimName: pathfinder-pvc
    - name: pathfinder-volume-2
      persistentVolumeClaim:
        claimName: pathfinder-pvc-2

这是PV

apiVersion: v1
kind: PersistentVolume
metadata:
  name: pathfinder-pv
spec:
  capacity:
    storage: 16Gi
  accessModes:
    - ReadWriteMany
  persistentVolumeReclaimPolicy: Retain
  storageClassName: manual
  hostPath:
    path: "/mnt/data/pathfinder"
---
apiVersion: v1
kind: PersistentVolume
metadata:
  name: pathfinder-pv-2
spec:
  capacity:
    storage: 16Gi
  accessModes:
    - ReadWriteMany
  persistentVolumeReclaimPolicy: Retain
  storageClassName: manual
  hostPath:
    path: "/mnt/data/pathfinder-2"

这是PVC

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: pathfinder-pvc
spec:
  accessModes:
    - ReadWriteMany
  resources:
    requests:
      storage: 16Gi
  storageClassName: manual
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: pathfinder-pvc-2
spec:
  accessModes:
    - ReadWriteMany
  resources:
    requests:
      storage: 16Gi
  storageClassName: manual

流程基本上从

kind create cluster
然后应用 pv、pvc 和 snashot-fetcher pod。

即使在 Dockerfile 中指定了文件 testnet-sepolia.sqlite,但它似乎在 pod 内不可用,或者正确安装卷时可能存在问题。

任何有关可能出现问题的指导将不胜感激!

docker sqlite kubernetes persistent-volumes persistent-volume-claims
1个回答
0
投票

一般来说,在 Unix 中,在目录上安装某些内容会隐藏该目录中以前的内容。 这也适用于 Docker 绑定挂载和 Kubernetes 卷挂载:您挂载到 Pod 或容器中的任何内容都会隐藏底层映像中的任何内容。 有一种未初始化的 Docker 命名卷的情况,其行为显然有所不同,但依赖它是错误的,因为它在其他环境(如 Kubernetes)中不起作用,并且它有一些极端情况(如果图像内容发生变化,它将被卷中较旧的内容隐藏)。

因此,您问题的最短答案是删除第一个覆盖图像内容的 PV/PVC/volume/volumeMount。 如果没有卷,

cp
命令的源目录将来自图像。

© www.soinside.com 2019 - 2024. All rights reserved.