windows - Windows 中 Kubernetes .yaml 中 PersistentVolume 的路径
问题描述
我是 Kubernetes 的第一步,但我遇到了 Windows 路径的问题。我为我拥有的 PersistentVolume 定义了一个 .yaml (文件不完整,只有问题的一部分)
apiVersion: v1
kind: PersistentVolume
metadata:
name: mongo-pv
spec:
capacity:
storage: 1Gi
volumeMode: Filesystem
accessModes:
- ReadWriteOnce
storageClassName: local-storage
local:
path: /c/temp/data/db
nodeAffinity:
required:
nodeSelectorTerms:
- matchExpressions:
- key: kubernetes.io/hostname
operator: In
values:
- docker-desktop
我正在使用最新的 minikube (1.8.2) 和更新的 Windows 10 Pro 上的 kubectl 更新,Docker 社区最新版本。
我搜索了很多,因为 Kubernetes 的每个样本都指的是 Unix/Macos 的路径。我发现(不记得在哪里......)Windows的有效路径应该是示例路径中的路径:/c/temp/data/db
但它不起作用:Docker 已打开 Linux 容器,c:共享,Docker 中的 Kubernetes 已激活,我得到了“描述 pod”
“没有找到要绑定的可用持久卷”
显然我尝试了另一个磁盘(在 Docker 中共享),尝试了“/c/temp/data/db”,它围绕着“,尝试将所有权限授予此路径上的每个人,/c/Users...nothing
解决方案
我搜索了很多,因为 Kubernetes 的每个样本都指的是 Unix/Macos 的路径。我发现(不记得在哪里......)Windows的有效路径应该是示例路径中的路径:/c/temp/data/db
使用 minikube,您无法在尝试时将本地目录挂载到 PersistentVolume 中。
Minikube 使用 Linux 创建一个虚拟机,并且您的集群在这个 Linux VM 中运行。这就是为什么它无法在您的 Windows 机器中看到您的文件。
为了能够访问您的本地目录到您的 minikube 集群,您需要将其挂载到您的 minikube 中:
你几乎没有选择来实现你所需要的。最好和最简单的方法是使用选项启动您的 minikube --mount
。默认情况下,此选项将挂载 C:/Users/。
例子:
PS C:\WINDOWS\system32> minikube delete; minikube.exe start --vm-driver=virtualbox --mount
如果你 ssh 进入 minikube Linux VM:
PS C:\WINDOWS\system32> minikube ssh
_ _
_ _ ( ) ( )
___ ___ (_) ___ (_)| |/') _ _ | |_ __
/' _ ` _ `\| |/' _ `\| || , < ( ) ( )| '_`\ /'__`\
| ( ) ( ) || || ( ) || || |\`\ | (_) || |_) )( ___/
(_) (_) (_)(_)(_) (_)(_)(_) (_)`\___/'(_,__/'`\____)
$
$ df -h
Filesystem Size Used Avail Use% Mounted on
tmpfs 1.9G 489M 1.5G 26% /
devtmpfs 987M 0 987M 0% /dev
tmpfs 1.1G 0 1.1G 0% /dev/shm
tmpfs 1.1G 17M 1.1G 2% /run
tmpfs 1.1G 0 1.1G 0% /sys/fs/cgroup
tmpfs 1.1G 4.0K 1.1G 1% /tmp
/dev/sda1 17G 1.3G 15G 8% /mnt/sda1
/c/Users 181G 106G 76G 59% /c/Users
$ cd /c/Users/
$ pwd
/c/Users
如果您想\需要挂载 C:/Users 以外的任何其他目录,请查看minikube mount和/或--mount-string。根据您的 vm-driver,您可能会在使用这些选项时遇到一些问题。
挂载目录后,您可以在 PersistentVolume 中使用它,指的是基于我的示例的 Linux 路径,它可以是 /c/Users/myname/myapp/db。
apiVersion: v1
kind: PersistentVolume
metadata:
name: mongo-pv
spec:
capacity:
storage: 1Gi
volumeMode: Filesystem
accessModes:
- ReadWriteOnce
storageClassName: local-storage
local:
path: /c/Users/myname/myapp/db
nodeAffinity:
required:
nodeSelectorTerms:
- matchExpressions:
- key: kubernetes.io/hostname
operator: In
values:
- docker-desktop
请让我知道我的回答是否可以帮助您解决问题。
推荐阅读
- java - Hibernate JPA 组合键
- tensorflow - 损失随着批量标准化而增加(tf.Keras)
- javascript - 访问对象内的数组时出现错误无法读取未定义的属性“1”
- c# - Rotativa 在 Azure 中的服务结构节点上崩溃
- python - Django如何创建会话变量以将信息从一个网页传递到另一个网页
- reactjs - 理解 React js 代码
- oracle - ora_database_name 和 sys_context('userenv','service_name') 有什么区别
- c# - SqlConnection.OpenAsync 无法识别
- c# - Razor 类库中的图像
- wicket - Wicket:对一个巨大的结果查询进行分页