我的Kubernetes集群中有一个正在运行的Gitlab CI管道。
测试失败时,我需要从运行它的pod中获取应用程序的屏幕截图和日志,以便在Gitlab Runner期望它们的位置可用。
我尝试kubectl cp <namespace>/<podname>:/in-pod-path /local/path
从停止的pod(在Docker映像中安装了tar
命令)复制文件,但是it isn't yet supported。
在此可用之前,我想我需要在保存我的伪像的路径上的容器中安装一个卷,以便在测试执行完成后从该卷中抓取它们。
我想知道我应该使用哪种卷,因为我有3个kube worker,我不需要该卷随着时间的推移而持久,也不需要在节点之间共享更多的卷吗?
我希望先部署此卷,然后再部署运行我的测试的Pod来安装该卷。当检测到测试失败时,我会将伪像提取到正确的位置,并删除容器和卷。
答案 0 :(得分:1)
您可以尝试定义访问模式为ReadWriteMany
的PVC,以便在多个Pod之间共享卷。
参见“ How to share storage between Kubernetes pods?”
它仍将是一个永久卷(以支持该卷),所有的pod都调度到具有该卷的节点上。
有几种适合于此的卷类型,它们与任何云提供商无关:
- NFS
- RBD(Ceph块设备)
- CephFS
- Glusterfs
- Portworx卷
但是:
我真的不需要在多个Pod之间共享音量,我可以为每个Pod创建一个音量。
我想避免从您提供的列表中安装/配置节点共享卷服务。
我正在寻找临时卷(如果可能)?
然后可以使用 ephemeral storage :
Kubernetes版本1.8引入了一个新资源,即临时存储,用于管理本地临时存储。在每个Kubernetes节点中,kubelet的根目录(默认为
/var/lib/kubelet
)和日志目录(/var/log
)存储在该节点的根分区上。
Pods还通过emptyDir
卷,容器日志,图像层和容器可写层共享和使用此分区。
在您的情况下,您需要一个runtime ephemeral storage。