在 Kubernetes 中挂载 cifs 网络文件共享协议的卷
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
上一篇: [51nod - 1215] 数组的宽度
下一篇: docker(十二):docker持久化