docker - 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 和卷。
解决方案
您可以尝试使用 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
卷、容器日志、镜像层和容器可写层共享和使用。
在您的情况下,您需要一个运行时临时存储。
推荐阅读
- mvvmcross - 在关闭 xamarin 视图时,我收到错误:当它也是当前显示的页面时,无法删除根页面
- css - 打印布局的 Chrome 渲染损坏
- angular - Angular 11:错误:未捕获(承诺):错误:无法匹配任何路由。URL 段:'http:'
- c# - 如何在 Unity3D 中从顶点自动生成三角形,或者如何从 STL 文件中获取它们?
- reactjs - 当我运行 npm install react-currency format 。我收到以下错误?我能做些什么?
- azure - 适用于 Azure 的 OpenNESS Devkit:权限错误
- javascript - 网页元素调整大小会降低高度但正确调整宽度?
- html - 我应该在我的模式中添加什么来显示?
- vba - 自最近的 Office 更新以来,Outlook 的 MS Access VBA 参考不起作用
- informatica - 源 Informatica PowerCenter