【问题标题】:How to use Kubernetes Persistent Local Volumes with Minikube on OSX?如何在 OSX 上将 Kubernetes 持久本地卷与 Minikube 一起使用?
【发布时间】:2019-07-26 08:57:01
【问题描述】:

我想在 OSX 上使用 Minikube 来试验 Persistent Local Volumes。我正在使用本地供应商 (https://github.com/kubernetes-sigs/sig-storage-local-static-provisioner) 为我创建 PV。

我在 OSX 主机上创建本地目录并将其挂载到 Minikube VM:

mkdir -p /path/to/data/dir
minikube mount /path/to/data/dir:/data/dir &

当我查看配置程序的日志时,我可以看到如下错误:

Found new volume at host path "/data/dir" with capacity 0, creating Local PV "local-pv-ccc90d9b", required volumeMode "Filesystem"
Error creating PV "local-pv-ccc90d9b" for volume at "/data/zk-2": PersistentVolume "local-pv-ccc90d9b" is invalid: spec.capacity[storage]: Invalid value: "0": must be greater than zero

在此处的建议 (https://github.com/kubernetes-incubator/external-storage/issues/968) 的指导下,我 ssh 进入 Minikube VM 并查看了挂载的容量:

$ df /data/dir/
Filesystem     1K-blocks  Used Available Use% Mounted on
192.168.99.1           0     0         0    - /data/dir

所以安装的容量为零,这似乎是它抛出我看到的错误的原因。但是,父目录

$ df /data          
Filesystem     1K-blocks    Used Available Use% Mounted on
/dev/sda1       16888216 1129408  14769676   8% /data

这是minikube mount 命令的问题吗?这可以在 OSX 上运行吗?如何让持久本地卷在 OSX Minikube 上运行?

【问题讨论】:

  • 你确定这应该在/data下完成吗?Mounted Host Folders说它的/Users
  • 静态 PV Provisioner 要求每个 PV 使用的位置必须是挂载点;它不能只是一个文件夹。因此,对于要创建的每个 PV,您需要在 VM 中存在一个挂载。如果我尝试将目录挂载到那里,我在 VM 内的 /Users 内看不到任何内容。
  • 我什至不知道我必须自己挂载数据目录。我只在minikube.sigs.k8s.io/docs/handbook/persistent_volumes 读到,包括/data 在内的几个目录被分配来保存数据。但是当我读到minikube.sigs.k8s.io/docs/handbook/mount 时,它并没有提到这些是为不同的驱动程序自动安装的。

标签: kubernetes minikube


【解决方案1】:

对于那些最终在该页面上寻找一种在 Mac 上与 minikube 共享本地文件夹的方法的人来说,这是我的小方法。

就个人而言,我正在启动一些 Azure SQL Edge 服务器(相当于 MS SQL Server,但它是为 M1 硅芯片的 arm 架构编译的),我希望数据库的数据能够保留在我的磁盘上,以便我可以重新启动我的 Pod 不会丢失它们的数据。

1.在 minikube 中挂载您要在主机上共享的文件夹:

minikube mount ./path/to/mySharedData:/mnt1/shared1 --uid 10001 --gid 10001

这里,安装在 minikube 中的卷将具有组 ID 和用户 ID 10001。这是容器内 Azure SQL Edge 服务器的用户 ID。

我使用了这些 --uid 和 --gid 参数,因为我遇到了一些写访问错误。

如果您不知道容器内的用户 ID 是什么,请登录您的容器并输入 id,它会告诉您用户 ID。

不要关闭终端。该进程需要一直运行才能访问该文件夹。

2。将该文件夹与 hostPath 一起使用:

    spec:
      volumes:
        - name: mssql-data
          hostPath:
            path: /mnt1/shared1
      containers:
        - name: azuresqledge
          image: mcr.microsoft.com/azure-sql-edge:latest
          ports:
            - containerPort: 1433
          volumeMounts:
            - name: mssql-data
              mountPath: /var/opt/mssql/data
          env:
            - name: MSSQL_PID
              value: "Developer"
            - name: ACCEPT_EULA
              value: "Y"
            - name: SA_PASSWORD
              valueFrom:
                secretKeyRef:
                  name: mssql
                  key: SA_PASSWORD
            - name: MSSQL_AGENT_ENABLED
              value: "TRUE"
            - name: MSSQL_COLLATION
              value: "SQL_Latin1_General_CP1_CI_AS"
            - name: MSSQL_LCID
              value: "1033"
      terminationGracePeriodSeconds: 30
      securityContext:
        fsGroup: 10001

这里的很多东西都是特定于 Azure SQL 的(所有环境......)。有两件事很重要: 定义安装在 minikube 中的卷:

      volumes:
        - name: mssql-data
          hostPath:
            path: /mnt1/shared1

并将其安装在您需要的容器中:

          volumeMounts:
            - name: mssql-data
              mountPath: /var/opt/mssql/data

【讨论】:

    猜你喜欢
    • 2019-08-26
    • 2018-09-18
    • 2016-05-18
    • 1970-01-01
    • 2017-10-08
    • 2018-01-12
    • 1970-01-01
    • 2020-12-08
    • 2017-08-24
    相关资源
    最近更新 更多