正在将 Windows 个本地文件夹装载到 pod 中
Mounting Windows local folder into pod
我是 运行 一个 Ubuntu 容器,在我的本地 Kubernetes 环境中有 SQL 服务器,在 Windows 笔记本电脑上有 Docker 桌面。
现在,我正在尝试将包含数据库文件的本地文件夹 (C:\data\sql
) 装载到 pod 中。
为此,我在 Kubernetes 中配置了持久卷和持久卷声明,但它似乎没有正确挂载。我没有看到错误或任何东西,但是当我使用 docker exec -it
进入容器并检查数据文件夹时,它是空的。我希望本地文件夹中的文件出现在安装的文件夹中 'data',但事实并非如此。
是不是PV、PVC或pod配置有误?
这是我的 yaml 文件:
apiVersion: v1
kind: PersistentVolume
metadata:
name: dev-customer-db-pv
labels:
type: local
app: customer-db
chart: customer-db-0.1.0
release: dev
heritage: Helm
spec:
capacity:
storage: 1Gi
accessModes:
- ReadWriteOnce
hostPath:
path: /C/data/sql
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: dev-customer-db-pvc
labels:
app: customer-db
chart: customer-db-0.1.0
release: dev
heritage: Helm
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 100Mi
apiVersion: apps/v1
kind: Deployment
metadata:
name: dev-customer-db
labels:
ufo: dev-customer-db-config
app: customer-db
chart: customer-db-0.1.0
release: dev
heritage: Helm
spec:
selector:
matchLabels:
app: customer-db
release: dev
replicas: 1
template:
metadata:
labels:
app: customer-db
release: dev
spec:
volumes:
- name: dev-customer-db-pv
persistentVolumeClaim:
claimName: dev-customer-db-pvc
containers:
- name: customer-db
image: "mcr.microsoft.com/mssql/server:2019-latest"
imagePullPolicy: IfNotPresent
volumeMounts:
- name: dev-customer-db-pv
mountPath: /data
envFrom:
- configMapRef:
name: dev-customer-db-config
- secretRef:
name: dev-customer-db-secrets
起初,我试图在没有 PV 和 PVC 的 pod 中定义一个卷,但是当我试图从挂载的数据文件夹中读取文件时,出现访问被拒绝的错误。
spec:
volumes:
- name: dev-customer-db-data
hostPath:
path: C/data/sql
containers:
...
volumeMounts:
- name: dev-customer-db-data
mountPath: data
我也尝试过使用 --set volumePermissions.enabled=true
安装 Helm,但这并没有解决访问被拒绝的错误。
根据 GitHub for Docker 中的信息,WSL 2 中不支持主机路径卷。
因此,可以使用下一个解决方法。
我们只需要将 /run/desktop/mnt/host
附加到主机 /c/data/sql
上的初始路径。在这种情况下不需要 PersistentVolume 和 PersistentVolumeClaim - 只需删除它们。
我根据 information about hostPath configuration on Kubernetes site 更改了 spec.volumes
部署:
volumes:
- name: dev-customer-db-pv
hostPath:
path: /run/desktop/mnt/host/c/data/sql
type: Directory
应用这些更改后,可以在 pod 的 data
文件夹中找到这些文件,因为 mountPath: /data
我是 运行 一个 Ubuntu 容器,在我的本地 Kubernetes 环境中有 SQL 服务器,在 Windows 笔记本电脑上有 Docker 桌面。
现在,我正在尝试将包含数据库文件的本地文件夹 (C:\data\sql
) 装载到 pod 中。
为此,我在 Kubernetes 中配置了持久卷和持久卷声明,但它似乎没有正确挂载。我没有看到错误或任何东西,但是当我使用 docker exec -it
进入容器并检查数据文件夹时,它是空的。我希望本地文件夹中的文件出现在安装的文件夹中 'data',但事实并非如此。
是不是PV、PVC或pod配置有误?
这是我的 yaml 文件:
apiVersion: v1
kind: PersistentVolume
metadata:
name: dev-customer-db-pv
labels:
type: local
app: customer-db
chart: customer-db-0.1.0
release: dev
heritage: Helm
spec:
capacity:
storage: 1Gi
accessModes:
- ReadWriteOnce
hostPath:
path: /C/data/sql
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: dev-customer-db-pvc
labels:
app: customer-db
chart: customer-db-0.1.0
release: dev
heritage: Helm
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 100Mi
apiVersion: apps/v1
kind: Deployment
metadata:
name: dev-customer-db
labels:
ufo: dev-customer-db-config
app: customer-db
chart: customer-db-0.1.0
release: dev
heritage: Helm
spec:
selector:
matchLabels:
app: customer-db
release: dev
replicas: 1
template:
metadata:
labels:
app: customer-db
release: dev
spec:
volumes:
- name: dev-customer-db-pv
persistentVolumeClaim:
claimName: dev-customer-db-pvc
containers:
- name: customer-db
image: "mcr.microsoft.com/mssql/server:2019-latest"
imagePullPolicy: IfNotPresent
volumeMounts:
- name: dev-customer-db-pv
mountPath: /data
envFrom:
- configMapRef:
name: dev-customer-db-config
- secretRef:
name: dev-customer-db-secrets
起初,我试图在没有 PV 和 PVC 的 pod 中定义一个卷,但是当我试图从挂载的数据文件夹中读取文件时,出现访问被拒绝的错误。
spec:
volumes:
- name: dev-customer-db-data
hostPath:
path: C/data/sql
containers:
...
volumeMounts:
- name: dev-customer-db-data
mountPath: data
我也尝试过使用 --set volumePermissions.enabled=true
安装 Helm,但这并没有解决访问被拒绝的错误。
根据 GitHub for Docker 中的信息,WSL 2 中不支持主机路径卷。
因此,可以使用下一个解决方法。
我们只需要将 /run/desktop/mnt/host
附加到主机 /c/data/sql
上的初始路径。在这种情况下不需要 PersistentVolume 和 PersistentVolumeClaim - 只需删除它们。
我根据 information about hostPath configuration on Kubernetes site 更改了 spec.volumes
部署:
volumes:
- name: dev-customer-db-pv
hostPath:
path: /run/desktop/mnt/host/c/data/sql
type: Directory
应用这些更改后,可以在 pod 的 data
文件夹中找到这些文件,因为 mountPath: /data