kubernetes - 如何在 OSX 上使用 Kubernetes 持久本地卷和 Minikub

我想试验 Persistent Local Volumes在 OSX 上使用 Minikube。我正在使用本地供应商 ( 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 上运行?

最佳答案

这是我的小方法,适用于那些最终在该页面上寻找使用 minikube 共享 Mac 上的本地文件夹的方法的人。

就个人而言,我正在启动一些 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

关于kubernetes - 如何在 OSX 上使用 Kubernetes 持久本地卷和 Minikube?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54993532/

相关文章:

android - 在自定义 Camera2 API 上显示矩形边界框(覆盖),以便仅捕获框内的图像

php - 如何使用 php 代码在 WHM/Cpanel 中以编程方式创建数据库?

ionic-framework - Ionic3 - 电子邮件编辑器 - 对象(...)不是函数

unity3d - 应该如何使用 Unity 的 ExecuteEvents.Execute?

c# - .NET Core 2 中的 Startup.cs 中的 "IConfiguration

javascript - 使用 css 或 html5 的置换贴图

reactjs - JEST - 如何使用同一 __test__ 文件夹中的实用程序管理不同的测试文

node.js - 如何在 Node js 中使用 Google Hangout 聊天 spaces

c++ - Cmake 仅包含 header 目标来自仅 header 目标

javascript - 使 postcss 与 material ui 的 jss 一起工作