欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

在 Kubernetes 中挂载 cifs 网络文件共享协议的卷

程序员文章站 2022-03-03 07:58:53
...

kubernetes 插件地址: https://github.com/fstab/cifs

安装:

Kubernetes提供了Flexvolume,这是一种插件机制,使用户可以编写自己的驱动程序。
Kubernetes 在默认的情况下在 /usr/libexec/kubernetes/kubelet-plugins/volume/exec/ 下搜索第三方插件。在该目录下创建文件夹 fstab~cifs, 把 cifs 文件放到该文件夹下。fstab~cifs 将被映射为名为 fstab/cifs 的 flexvolume 插件。

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

集群各节点都需要有以下 packages 环境:

  • mount.cifs:在 ubuntu 上 sudo apt install cifs-utils
  • jq:在ubuntu 上 sudo apt install jq
  • mountpoint:在ubuntu 上sudo apt install util-linux
  • base64: 在 ubuntu 上 sudo apt install coreutils (大多已默认安装)

可以执行一下刚刚复制到 /usr/libexec/kubernetes/kubelet-plugins/volume/exec/fstab~cifs 目录的脚本 看是否安装成功:./cifs init,成功会显示“status”: "Success"

使用

这款插件从 Kubernetes Secret 资源中获取用户名和密码。所以要先创建 Secret 资源,首先你需要对用户名和密码进行 base64 编码:

echo -n username | base64
echo -n password | base64

创建 cifs-secret.yml 文件:

apiVersion: v1
kind: Secret
metadata:
  name: cifs-secret
  namespace: default
type: fstab/cifs
data:
  username: 'ZXhhbXBsZQ=='
  password: 'bXktc2VjcmV0LXBhc3N3b3Jk'

创建 Secret 资源:
kubectl apply -f cifs-secret.yml
使用命令 kubectl describe secret cifs-secret 检测是否创建成功。

然后在 pod 中挂载网络硬盘, 创建 pod.yml:

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

Pod 创建成功后,在 Pod 中启动一个shell 查看网络硬盘是否挂载成功?

kubectl exec -ti busybox /bin/sh

ls /data