Kubernetes:如何将卷挂载到 Windows Pod 中?

Kubernetes:如何将卷挂载到 Windows Pod 中?

我设置了一个小型 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 卷驱动程序。


希望你觉得这个有用。

相关内容