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