我设置了一个小型 Kubernetes 集群进行测试,并使用 glusterfs 进行存储。没有 CSI,我现在只是手动创建卷。
现在,我向集群添加了一个 Windows 节点。到目前为止,它运行良好,但我无法在容器中挂载任何卷。
我做了一个非常简单的 pod 定义:
---
apiVersion: v1
kind: Pod
metadata:
name: windows-test
labels:
name: windows-test
spec:
containers:
- name: sample
image: mcr.microsoft.com/windows/servercore:ltsc2019
resources:
limits:
cpu: "1.0"
memory: "1Gi"
command:
- cmd
- "/c"
- "dir"
- "/s"
- 'c:\'
volumeMounts:
- mountPath: "foo"
name: testvol
nodeSelector:
"kubernetes.io/os": windows
volumes:
- name: testvol
glusterfs:
path: wintest
endpoints: glusterfs-cluster
readOnly: false
当我运行这个程序时,pod 从未启动,当我描述它时,我得到:
Warning FailedMount <invalid> kubelet, node09 MountVolume.SetUp failed for volume "testvol" : mount failed: only cifs mount is supported now, fstype: "glusterfs", mounting source ("10.93.111.35:wintest"), target ("c:\\var\\lib\\kubelet\\pods\\6d207138-09fb-4e1f-86e7-6a71cef5ce7e\\volumes\\kubernetes.io~glusterfs\\testvol"), with options (["auto_unmount" "backup-volfile-servers=10.93.111.31:10.93.111.32:10.93.111.33:10.93.111.34:10.93.111.35:10.93.111.36:10.93.111.37:10.93.111.38" "log-file=\\var\\lib\\kubelet\\plugins\\kubernetes.io\\glusterfs\\testvol\\windows-test-glusterfs.log" "log-level=ERROR"]), the following error information was pulled from the glusterfs log to help diagnose this issue: could not open log file for pod windows-test
似乎 Windows pod 不支持 glusterfs,而只支持“cifs”。有人能指导我如何通过 cifs 安装卷吗?我在文档中找到的唯一信息是关于存储的,azure-file
但我不知道它是否也可以在本地安装 CIFS 共享。
答案1
我认为你可以从这。
适用于 Kubernetes 的 CIFS Flexvolume 插件
安装
flexvolume 插件是一个名为韋斯。此 shell 脚本必须在 Kubernetes 主服务器和每个 Kubernetes 节点上可用。默认情况下,Kubernetes 在 /usr/libexec/kubernetes/kubelet-plugins/volume/exec/ 中搜索第三方卷插件。可以使用 kubelet 的 --volume-plugin-dir 参数配置插件目录,运行 ps aux | grep kubelet 以了解系统上插件目录的位置(参见 #1)。cifs 脚本必须位于名为 fstab~cifs/ 的子目录中。目录名称 fstab~cifs/ 将映射到 Flexvolume 驱动程序名称 fstab/cifs。
在 Kubernetes 主服务器和每个 Kubernetes 节点上运行以下命令:
VOLUME_PLUGIN_DIR="/usr/libexec/kubernetes/kubelet-plugins/volume/exec"
mkdir -p "$VOLUME_PLUGIN_DIR/fstab~cifs"
cd "$VOLUME_PLUGIN_DIR/fstab~cifs"
curl -L -O https://raw.githubusercontent.com/fstab/cifs/master/cifs
chmod 755 cifs
cifs 脚本要求每个主机系统上都有几个可执行文件:
mount.cifs,在 Ubuntu 上,它位于cifs 实用程序package.jq,在 Ubuntu 上,它位于杰奇package.mountpoint,在 Ubuntu 上,它位于util-linuxpackage.base64,在 Ubuntu 上,这是在核心工具包。要检查安装是否成功,请运行以下命令:
VOLUME_PLUGIN_DIR="/usr/libexec/kubernetes/kubelet-plugins/volume/exec"
$VOLUME_PLUGIN_DIR/fstab~cifs/cifs init
它应该输出一个包含“status”:“Success”的 JSON 字符串。当在文件系统上检测到 cifs 插件时,Kubernetes 本身也会运行此命令。
跑步
该插件从Kubernetes 的秘密要创建秘密,您首先必须将您的用户名和密码转换为 base64 编码:
echo -n username | base64
echo -n password | base64
然后,创建一个文件 secret.yml 并使用上述命令的输出作为用户名和密码:
apiVersion: v1
kind: Secret
metadata:
name: cifs-secret
namespace: default
type: fstab/cifs
data:
username: 'ZXhhbXBsZQ=='
password: 'bXktc2VjcmV0LXBhc3N3b3Jk'
应用秘诀:
kubectl apply -f secret.yml
您可以使用 kubectl describe secret cifs-secret 检查密钥是否已成功安装。
接下来,创建一个带有测试 pod 的文件 pod.yml(将 //server/share 替换为您的 CIFS 共享的网络路径):
apiVersion: v1
kind: Pod
metadata:
name: busybox
namespace: default
spec:
containers:
- name: busybox
image: busybox
command:
- sleep
- "3600"
imagePullPolicy: IfNotPresent
volumeMounts:
- name: test
mountPath: /data
volumes:
- name: test
flexVolume:
driver: "fstab/cifs"
fsType: "cifs"
secretRef:
name: "cifs-secret"
options:
networkPath: "//server/share"
mountOptions: "dir_mode=0755,file_mode=0644,noperm"
启动 Pod:
kubectl apply -f pod.yml
您可以使用 kubectl describe pod busybox 验证该卷是否已成功挂载。
此外还有另一个github 教程使用 Kubernetes CIFS 卷驱动程序。
希望你觉得这个有用。