首页 > 解决方案 > Kubernetes + Gitlab CI artefacts:我应该使用什么样的卷?

问题描述

我的 Kubernetes 集群中有一个正在运行的 Gitlab CI 管道。

当测试失败时,我需要从运行它的 pod 中获取应用程序屏幕截图和日志,以便它们在 Gitlab Runner 期望它们的地方可用。

我尝试kubectl cp <namespace>/<podname>:/in-pod-path /local/path从停止的 pod 中复制文件(tar在我的 Docker 映像中安装了该命令),但它尚不受支持

在此可用之前,我想我需要将一个卷安装在 pod 中保存我的人工制品的路径上,以便在测试执行完成后我可以从该卷中获取它们。

我想知道我应该使用什么样的卷,因为我有 3 个 kube 工作人员,我不需要那个卷随着时间的推移而持久,更多的卷可以在节点之间共享?

我希望在部署运行安装此卷的测试的 pod 之前部署此卷。当检测到测试失败时,我会将人工制品提取到正确的位置并删除 pod 和卷。

标签: dockerkubernetesgitlabdocker-volume

解决方案


您可以尝试使用 access mode 定义 PVC ReadWriteMany,以便在多个 pod 之间共享一个卷。
请参阅“如何在 Kubernetes pod 之间共享存储?

它仍然是一个持久卷(以支持它),所有 pod 都安排到具有该卷的节点。

有几种卷类型适用于此,并且不依赖于任何云提供商:

  • NFS
  • RBD(Ceph 块设备)
  • CephFS
  • Glusterfs
  • Portworx 卷

但:

我真的不需要在许多 pod 之间共享卷,我可以为每个 pod 创建一个卷。
我想避免从您提供的列表中安装/配置节点共享卷服务。如果可能的话,
我正在寻找一个临时卷?

然后可以进行临时存储

Kubernetes 1.8 版引入了一种新资源 ephemeral-storage,用于管理本地临时存储。在每个 Kubernetes 节点中,kubelet 的根目录(/var/lib/kubelet默认)和日志目录(/var/log)都存储在节点的根分区上。
这个分区也被 Pod 通过emptyDir卷、容器日志、镜像层和容器可写层共享和使用。

在您的情况下,您需要一个运行时临时存储


推荐阅读