首页 > 解决方案 > 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

标签: windowskubernetesyamlpersistence

解决方案


我搜索了很多,因为 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

请让我知道我的回答是否可以帮助您解决问题。


推荐阅读