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

标签 kubernetes minikube

我想试验 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/

相关文章:

kubernetes - 无法使用Vagrant初始化Kubernetes集群

kubernetes - 如何通过API获取kubernetes资源信息(总体CPU和内存使用情况)

docker - Minikube 不从本地 docker 容器注册表中拉取图像

bash - 如何使用 Minikube 在 pod 中捕获 SIGTERM

postgresql - K8S使用volume来保存DB数据

kubernetes - Knative服务http超时设置

kubernetes - 如何向本地计算机公开入口? (Windows 上的 minikube)

kubernetes - 错误: error installing: the server could not find the requested resource HELM Kubernetes

kubernetes蓝绿部署