windows - Kubernetes 如何在 wsl2 支持的环境中正确挂载 windows 路径
问题描述
我有一个以这种方式运行良好的本地图像:
docker run -p 8080:8080 -v C:\Users\moritz\Downloads\1\imageService\examples1:/images -v C:\Users\moritz\entwicklung\projekte\imageCluster\logs:/logs imageservice
现在我希望它作为 Kubernetes(使用 Docker-for-Windows v1.19.7 内置)部署运行:
apiVersion: apps/v1
kind: Deployment
metadata:
name: image-service
spec:
selector:
matchLabels:
app: image-service
template:
metadata:
labels:
app: image-service
spec:
containers:
- name: image-service
image: "imageservice"
resources:
limits:
cpu: "0.9"
memory: "1Gi"
ports:
- name: http
containerPort: 8080
volumeMounts:
- mountPath: /images
name: image-volume
- mountPath: /logs
name: log-volume
volumes:
- name: image-volume
hostPath:
path: "c:\\Users\\moritz\\Downloads\\1\\imageService\\examples1"
type: Directory
- name: log-volume
hostPath:
path: /mnt/c/Users/moritz/entwicklung/projekte/imageCluster/logs
type: Directory
如您所见,我尝试了不同的方法在 Windows 机器上设置我的主机路径,但我总是得到:
Warning FailedMount 0s (x4 over 4s) kubelet MountVolume.SetUp failed for volume "log-volume" : hostPath type check failed: /mnt/c/Users/moritz/entwicklung/projekte/imageCluster/logs is not a directory
Warning FailedMount 0s (x4 over 4s) kubelet MountVolume.SetUp failed for volume "image-volume" : hostPath type check failed: c:\Users\moritz\Downloads\1\imageService\examples1 is not a directory
我还尝试了其他变体(两者都适用):
- C:\Users\moritz\entwicklung\projekte\imageCluster\logs
- C:/Users/moritz/entwicklung/projekte/imageCluster/logs
那么如何正确设置这些 Windows 主机路径。(下一步是将它们设置为环境变量。)
小更新:
删除type: Directory
有助于消除错误,并且 pod 正在启动,但挂载无法正常工作。如果我“查看”容器中的内容,/images
我看不到主机上的图像,并且在容器/logs 中包含预期文件时,我看不到日志挂载中的任何日志。
同时我也尝试过(无济于事)
- /host_mnt/c/...
- /C/用户/...
- //C/用户/...
解决方案
如此处所述,您可以使用下面的 hostPath 使其在 wsl2 上工作。
// C:\someDir\volumeDir
hostPath:
path: /run/desktop/mnt/host/c/someDir/volumeDir
type: DirectoryOrCreate
您还可以使用一个示例。
apiVersion: v1
kind: Pod
metadata:
name: test-localpc
spec:
containers:
- name: test-webserver
image: ubuntu:latest
command: ["/bin/sh"]
args: ["-c", "apt-get update && apt-get install curl -y && sleep 600"]
volumeMounts:
- mountPath: /run/desktop/mnt/host/c/aaa
name: mydir
- mountPath: /run/desktop/mnt/host/c/aaa/1.txt
name: myfile
volumes:
- name: mydir
hostPath:
# Ensure the file directory is created.
path: /run/desktop/mnt/host/c/aaa
type: DirectoryOrCreate
- name: myfile
hostPath:
path: /run/desktop/mnt/host/c/aaa/1.txt
type: FileOrCreate
推荐阅读
- javascript - ReactJS:为什么可以将函数传递给 setState() 来触发同步更新?
- java - 在文件路径前加上“..\”有什么作用?
- python - 如何从 DynamoDb 查询表
- reactjs - GitHub Pages 不会加载字体
- docker - Xdebug: IDE最小化几分钟后脚本在后台自动恢复运行
- c++ - 指针整数类型转换的定义
- object-detection - 针对测试数据集计算 YOLO mAP
- python - 使用 pandas 计算具有其他字符串类型列的数据框的 groupby 更改
- android - 自定义小吃店有一个文本覆盖
- python - 按钮 Tkinter 的默认颜色