Kubernetes + Gitlab CI人工制品:应该使用哪种体积?

时间:2019-01-23 06:00:01

标签: docker kubernetes gitlab docker-volume

我的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来安装该卷。当检测到测试失败时,我会将伪像提取到正确的位置,并删除容器和卷。

1 个答案:

答案 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