我有一个正在运行的 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。所有这个问题的发生都是因为这个目录在构建时被初始化。
要在运行时复制,您可以使用启动后 https://kubernetes.io/docs/concepts/containers/container-lifecycle-hooks/在 kubernetes 的容器生命周期中。
例如 :
spec:
containers:
- name: ....
image: ....
lifecycle:
postStart:
exec:
command: ["cp" , "-r" , "/test/" ,"/opt/stackstorm"]
该命令在容器启动后运行。
但是这种方法每次 pod 启动时都会进行复制,如果你想避免这种情况,可以在构建时删除 dockerfile 中 /opt/stackstorm 的内容,然后在 postStart 命令中编写脚本来检查该目录是否为空进行复制。
您可以将 /opt/stackstorm 作为 mountPath 并将 pvc 附加到它,就像您所做的那样。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)