Windows 中 Kubernetes .yaml 中 PersistentVolume 的路径

path for PersistentVolume in Kubernetes .yaml in Windows

我刚开始使用 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) 和更新的 kubectl Windows 10 Pro 已更新,Docker 社区最新版本。

我搜索了很多,因为 Kubernetes 的每个示例都引用了 Unix/Macos 的路径。 我发现(不记得在哪里...) Windows 的有效路径应该是示例中的路径 路径:/c/temp/data/db

但它不起作用:Docker 已打开 Linux 容器,c: 共享,Docker 中的 Kubernetes 已激活,"describe pod " 我得到

"didn't find available persistent volumes to bind"

显然我尝试了另一个磁盘(在 Docker 中共享),尝试了“/c/temp/data/db”,它被“包围”,试图将所有权限授予这条路径上的每个人,/c/Users...没有

I searched a lot because of every sample for Kubernetes is referring to paths for Unix/Macos. I found (don't remember where...) that a valid path for Windows should be the one in the sample path: /c/temp/data/db

使用 minikube 时,您无法将本地目录挂载到 PersistentVolume 中。

Minikube 使用 Linux 创建了一个虚拟机,您的集群是 运行 在此 Linux VM 中。这就是它无法在您的 windows 计算机中看到您的文件的原因。

为了能够将您的本地目录访问到您的 minikube 集群中,您需要将其安装到您的 minikube 中:

您几乎没有选择来实现您的需求。最好和最简单的方法是使用选项 --mount 启动您的 minikube。默认情况下,此选项将挂载 C:/Users/。

示例:

PS C:\WINDOWS\system32> minikube delete; minikube.exe start --vm-driver=virtualbox --mount  

如果你通过 ssh 进入 minikube Linux 虚拟机:

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  

如果您 want\need 挂载除 C:/Users 以外的任何其他目录,请查看 minikube mount and/or --mount-string。根据您的虚拟机驱动程序,您可能会遇到这些选项的一些问题。

挂载目录后,您可以在 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

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