如何解决Kubernetes - 无法在 Azure 文件共享上安装 Windows 路径Linux 安装工作正常
首先我成功地挂载了我在 Pod 上的 Linux 路径。 我使用了 azure 文件共享,安装的文件夹出现在文件共享上。
volumeMounts:
- name: ads-filesharevolume
mountPath: /opt/front/arena/host
volumes:
- name: ads-filesharevolume
azureFile:
secretName: fa-fileshare-secret
shareName: faselectaksshare
readOnly: false
现在在文件共享上,我添加了一个子文件夹“windows”用于挂载,在日志中它提到它正在正确挂载,但我没有挂载任何东西(文件夹和文件没有出现在挂载的共享上,就像 Linux 的情况一样)
args: [ "-license_file","C:/Host/dat/license.dat","-key_file","C:/Host/dat/license.key"]
volumeMounts:
- name: ads-win-filesharevolume
mountPath: "C:\\host"
volumes:
- name: ads-win-filesharevolume
azureFile:
secretName: fa-fileshare-secret
shareName: faselectaksshare\windows
readOnly: false
对于 mountPath 我试过:C:\\host
和 C:/host
和 /c/host
同样对于 shareName 我最初尝试使用 faselectaksshare/windows
但它引发了异常。
在 Pod 描述中,我可以看到一切似乎都正常,但是我预期的来自 C:/host 的文件夹没有出现在 Windows 子文件夹中的 Azure 文件共享路径中。对于所有其他情况,我也收到类似的输出。
Mounts:
/var/run/secrets/kubernetes.io/serviceaccount from default-token-nx49r (ro)
C:/host from ads-win-filesharevolume (rw)
Conditions:
Type Status
Initialized True
Ready False
ContainersReady False
PodScheduled True
Volumes:
ads-win-filesharevolume:
Type: AzureFile (an Azure File Service mount on the host and bind mount to the pod)
SecretName: fa-fileshare-secret
ShareName: faselectaksshare\windows
ReadOnly: false
请帮忙!谢谢
更新: 我也用 subPath 尝试了这种方法,但我没有安装任何文件夹。此外,我在日志或描述 pod 命令中没有收到任何错误
volumeMounts:
- name: ads-filesharevolume
mountPath: /host
subPath: windows
volumes:
- name: ads-filesharevolume
azureFile:
secretName: fa-fileshare-secret
shareName: faselectaksshare
readOnly: false
解决方法
Windows 和 Linux 容器同时运行:
Linux 安装:
volumeMounts:
- name: azure
mountPath: /mnt/azure
volumes:
- name: azure
azureFile:
shareName: aksshare/linux
secretName: azure-secret
Windows 安装:
volumeMounts:
- name: azure
mountPath: "C:\\fileshare"
volumes:
- name: azure
azureFile:
shareName: aksshare\windows
secretName: azure-secret
并且文件共享的每个子文件夹中存在的文件不会影响其他文件。
,kubelet 应该将 Azure 文件共享挂载到容器中
它使用 https://github.com/kubernetes/kubernetes/blob/master/staging/src/k8s.io/mount-utils/mount_windows.go 和 https://github.com/kubernetes/kubernetes/blob/master/pkg/volume/azure_file/azure_file.go
它使用 SMB 映射,然后使用 mklink 将 Azure 文件共享挂载到容器中
请在运行 Pod 的 Windows 节点中启动 kubelet,并且 Azure 文件共享应该使用 --v 4 标志挂载,以便我们在 kubelet 日志中看到调试消息,当它尝试将 Azure 文件共享挂载到容器。然后请在 kubelet 日志中提供消息。您应该会看到来自 https://github.com/kubernetes/kubernetes/blob/master/staging/src/k8s.io/mount-utils/mount_windows.go
的以下消息klog.V(3).Infof("mounting source (%q),target (%q),with options (%q)",source,target,sanitizedOptionsForLogging)
klog.V(4).Infof("mount options(%q) source:%q,target:%q,fstype:%q,begin to mount",sanitizedOptionsForLogging,fstype)
klog.Warningf("SMB Mapping(%s) returned with error(%v),output(%s)",err,string(output))
klog.V(2).Infof("SMB Mapping(%s) already exists while it's not valid,return error: %v,now begin to remove and remount",err)
klog.V(2).Infof("SMB Mapping(%s) already exists and is still valid,skip error(%v)",err)
klog.Errorf("mklink failed: %v,source(%q) target(%q) output: %q",mklinkSource,string(output))
klog.V(2).Infof("mklink source(%q) on target(%q) successfully,output: %q",string(output))
,
根据以下线程,wsl2 尚不支持 hostPath 卷。
线程来源:https://github.com/docker/for-win/issues/5325 看看这个评论:https://github.com/docker/for-win/issues/5325#issuecomment-570683131
尝试更改此行
# For "C://host"
mountPath: /run/desktop/mnt/host/c/host
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。