Kubernetes PVC 删除 POD 的内容



我有一个正在运行的 Kubernetes POD,并且我给它附加了一个 PVC。 PVC 卷是/opt/stackstorm。

默认情况下,/opt/stackstorm 中有一些文件,它们是 docker 官方镜像的一部分。当没有 PVC 连接到 POD 时,这些文件可见。

但是,当附加 PVC 时,将替换文件并创建丢失和找到的目录。

即使在附加 PVC 后,我们如何保留目录?

我已经更改了 PVC 的目录。 当我将目录从opt/stackstorm更改为/opt/stack时,/opt/stackstorm具有所有详细信息,但/opt/stack变为空。

因此,PVC 连接到 POD 时会产生问题。

pvc.yaml:

kind: PersistentVolumeClaim
apiVersion: v1
metadata:
name: stacke
annotations:
volume.beta.kubernetes.io/storage-class: "ebs"
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 3Gi
deployment.yaml:
volumeMounts:
- name: stacke
mountPath: /opt/stackstorm
volumes:
- name: stacke
persistentVolumeClaim:
claimName: stacke
imagePullSecrets:
- name: regcred

预期结果是/opt/stackstorm 应该将所有文件作为映像的一部分。

可以将/opt/stackstorm 的内容复制到 dockerfile 中的新目录,构建一个新镜像。之后,您可以在运行时将新目录的内容复制回/opt/stackstorm。发生所有这些问题是因为此目录在构建时初始化。 对于运行时复制,您可以在 kubernetes 的容器生命周期中使用 postStart 。 例如: spec: containers: - name: .... image: .... lifecycle: postStart: exec: command: ["cp" , "-r" , "/test/" ,"/opt/stackstorm"] 此命令在容器启动后运行。 但是这种方法每次 pod 启动时都会复制,如果你想避免这种情况你可以在构建时删除 dockerfile 中/opt/stackstorm 的内容,然后在 postStart 命令中编写脚本来检查这个 dir 是否为空做复制。 你可以将/opt/stackstorm 作为 mountPath,并像你所做的那样将 pvc 附加到它。

您的数据从 pod 中删除,因为您的 PVC 路径未指向特定的目录。

在这种情况下,如果您想保存 docker 镜像默认附带的文件,您可以使用 init 容器,它将复制数据或更改权限,以便文件不会被删除。

initContainers:
- name: init-sysctl
image: busybox
imagePullPolicy: IfNotPresent
command: ["sysctl", "-w", "Command"]
securityContext:
privileged: true
volume:
mount path : /

相关内容

  • 没有找到相关文章

最新更新