我的笔记本电脑上运行着一个 docker 镜像,里面的 docker 卷文件夹myVolume
绑定到我的桌面上的一个文件夹(可以是主机上的任何目录)Desktop-Volume
:
docker run -it -v ~/Desktop/Desktop-Volume:/myVolume ..
里面有文件和文件夹Desktop-Volume
,当docker应用程序运行时,这个文件夹就会被新创建的文件填充,当然,在关闭docker之后,这些文件仍然保留在里面Desktop-Volume
,
现在,我在 Google Cloud 上创建了一个 Kubernetes 集群,并创建了 PersistentVolumes 并运行deployment
,但容器崩溃了,因为它依赖于那些预处理 Desktop-Volume
才能初始化 ,所以我需要将这些文件放入 PersistentVolumes前在 Kubernetes 集群上运行我的容器,但我不知道如何操作。
这个吊舱是这样的
spec:
volumes:
- name: demo
persistentVolumeClaim:
claimName: disk
containers:
- name: myContainer
image: "gcr.io/my-instance/myDocker:latest"
volumeMounts:
- mountPath: "/myVolume"
name: disk
我也尝试过:
我connect
进入集群 shell,然后从那里将Desktop-Volume.zip
我的笔记本电脑上传到 shell,然后解压并设置
hostPath:
path: "/home/<name>/Desktop-Volume"
但容器因引用no such a file or directory
驻留myVolume
在Desktop-Volume
Desktop-Volume
如何在集群上运行容器之前将预处理文件的内容放入PersistentVolumes 中?- PersistentVolumes 的挂载路径在哪里,以便我可以
ls
到那里查看我的文件?
答案1
这听起来像是您的容器需要预填充卷才能启动。您可以像您提到的那样使用 hostPath,但由于几个原因,不建议这样做。相反,您将数据传输到 GCE PD,确保您的 PV 使用该预先存在的磁盘,然后将其安装到您的 pod。以下是一些详细信息:
1.将数据复制到GCE PD:启动虚拟机然后将数据从本地机器传输到虚拟机或者创建文件系统并直接从虚拟机而不是本地机器准备所需的文件。
2. 准备一个 GCE 磁盘供 PV 使用:任何一个从虚拟机中分离 GCE 磁盘或者磁盘快照并从快照创建一个新的 GCE PD。
3. 创建 PV 来使用该磁盘:请务必仔细遵循此步骤的文档。GKE 中 PVC 的默认行为是配置动态使用 StorageClass。相反,我们希望确保首先创建 PV,并明确针对 GCE-PD。GCP 具有良好的走过如何做到这一点。
4. 创建 PVC 以定位 PV:正如我提到的,默认行为是动态创建一个全新的磁盘,这将是一个空白的新磁盘。确保遵循走过仔细检查。如果任何字段设置不正确,则会创建不同的 PV。
5. 将 PVC 安装到您的 pod 中:首先请注意,GCE 磁盘不支持多次读写,因此该 PVC 只能由单个 pod 使用。
如果您需要拥有多个 Pod,则需要使用上述步骤创建多个 PVC。如果容器所需的文件和文件系统只需为只读,则还有另外两个选项可以简化操作:
以 readOnlyMnay 模式创建 GCE 磁盘,这样同一个 PVC 就可以在多个 pod 中使用。
使用包含所有所需文件的 configMap。这需要事先进行更多规划,以确保所有适当的文件都位于正确的位置
答案2
如果我理解你的问题,你想要一个持久卷,当它在你的本地docker部署中用作卷时,它的行为就像你桌面上的本地文件夹一样。
PersistentVolume 由 Compute Engine 持久磁盘支持,这意味着为了访问磁盘,您需要将其连接到虚拟机才能使用它,例如这。
我认为您需要一个比 GKE 上的 PersistentVolumnes 更灵活的解决方案,因为您想要使用不同的挂载点(您的本地桌面和 kubernets)。
您可以使用云存储保险丝,此适配器允许您将 Cloud Storage 存储桶安装为文件系统,您可以将其安装在您的桌面、另一台虚拟机上,Kubernetes。
另一个选择是保险库。
问候。