Kubernetes - 如何下载 PersistentVolume 的内容

50

我在K8s集群中通过helm创建了一个测试执行器Pod,它要求动态创建一个PersistentVolume来存储测试结果。

现在我想获取这个卷的内容。这似乎是一件很自然的事情。 我期望有一些kubectl download pv <id>。但我无法找到任何相关资料。

如何获取PersistentVolume的内容?

我在AWS EKS中,因此AWS API也是一种选择。此外,我可以访问ECR,所以我可以将其存储为镜像并下载吗?

或者,总的来说,我正在寻找一种传输文件夹的方法,甚至可以是在归档文件中。 但是这应该是在容器完成并不再运行之后


1
我已经创建了一个新的问题,以便在不使用PersistentVolume的情况下获得此功能:https://github.com/kubernetes/kubernetes/issues/111045 请支持我并给予这个问题重视。同样重要的是,请帮助我找到能够使这个主题成功的人。 - Hardy Hobeck
1个回答

73

我可以考虑两种选项来满足您的需求:

  1. 创建一个与PV连接的Pod,并使用kubectl cp将内容复制到您需要的位置。例如,您可以使用类似以下的PodSpec
apiVersion: v1
kind: Pod
metadata:
  name: dataaccess
spec:
  containers:
  - name: alpine
    image: alpine:latest
    command: ['sleep', 'infinity']
    volumeMounts:
    - name: mypvc
      mountPath: /data
  volumes:
  - name: mypvc
    persistentVolumeClaim:
      claimName: mypvc
请注意,mypvc 应该是绑定到你想要从中复制数据的 PV 的 PersistentVolumeClaim 的名称。一旦 pod 运行,你可以运行像下面这样的命令从任何已配置了连接到你的集群的 kubectl 的机器上复制数据:
kubectl cp dataaccess:/data data/
  1. 在EC2实例中挂载PV的EBS卷并从那里复制数据。这个案例不太容易详细解释,因为它需要更多关于您正在尝试实现的内容的上下文。

1
不,kubectl cp 的工作时间与 kubectl 相同,因此如果您希望将数据从集群复制到本地工作站,则可以使用它。 - whites11
2
添加了我的第一个提案的示例。 - whites11
当然不是,我忘记指定一个命令,而alpine的默认命令会立即返回(因此导致崩溃循环回退)。更新了示例规范。 - whites11
1
关于保持Pod存活所使用的命令,需要注意一点:如果您想让Pod无限期地存活直到明确删除,您也可以使用tail -f /dev/null来代替sleep 999999 - bluu
非常有用。我将这种技术与博客文章中的链接结合起来,介绍了在灾难恢复时如何使用rsync和kubernetes:https://vhs.codeberg.page/post/recover-files-kubernetes-persistent-volume/ - vhs
显示剩余5条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接