从 pods 访问 CIFS 文件
Accessing CIFS files from pods
我们有一个 docker 图像正在处理 samba 共享上的一些文件。
为此,我们创建了一个挂载到 /mnt/dfs 的 cifs 共享,可以通过以下方式访问容器中的文件:
docker run -v /mnt/dfs/project1:/workspace image
现在我被要求做的是将容器放入 k8s 并从 pod 访问 cifs 共享,可以使用 cifs 卷驱动程序 usiong FlexVolume。这就是弹出一些问题的地方。
我将这个 repo 安装为 daemonset
https://k8scifsvol.juliohm.com.br/
开始了 运行。
apiVersion: apps/v1
kind: DaemonSet
metadata:
name: cifs-volumedriver-installer
spec:
selector:
matchLabels:
app: cifs-volumedriver-installer
template:
metadata:
name: cifs-volumedriver-installer
labels:
app: cifs-volumedriver-installer
spec:
containers:
- image: juliohm/kubernetes-cifs-volumedriver-installer:2.4
name: flex-deploy
imagePullPolicy: Always
securityContext:
privileged: true
volumeMounts:
- mountPath: /flexmnt
name: flexvolume-mount
volumes:
- name: flexvolume-mount
hostPath:
path: /usr/libexec/kubernetes/kubelet-plugins/volume/exec/
接下来要做的是添加一个 PeristentVolume,但这需要一个容量,在示例中为 1Gi。这是否意味着我们丢失了 smb 服务器上的所有数据?为什么要有一个现有服务器的容量?
此外,我们如何从 pod 中访问挂载 /mnt/dfs 的子目录?那么如何访问pod中/mnt/dfs/project1的数据呢?
我们还需要 PV 吗? pod 是否可以从主机的挂载共享中读取?
apiVersion: v1
kind: PersistentVolume
metadata:
name: mycifspv
spec:
capacity:
storage: 1Gi
flexVolume:
driver: juliohm/cifs
options:
opts: sec=ntlm,uid=1000
server: my-cifs-host
share: /MySharedDirectory
secretRef:
name: my-secret
accessModes:
- ReadWriteMany
不,该字段对您链接的 FlexVol 插件没有影响。它甚至懒得解析你传入的大小:)
设法让它与 fstab/cifs 插件一起工作。
将其 cifs 脚本复制到 /usr/libexec/kubernetes/kubelet-plugins/volume/exec 并授予其执行权限。同时在所有节点上重启 kubelet。
然后添加
containers:
- name: pablo
image: "10.203.32.80:5000/pablo"
volumeMounts:
- name: dfs
mountPath: /data
volumes:
- name: dfs
flexVolume:
driver: "fstab/cifs"
fsType: "cifs"
secretRef:
name: "cifs-secret"
options:
networkPath: "//dfs/dir"
mountOptions: "dir_mode=0755,file_mode=0644,noperm"
现在容器内有 /data 挂载指向 //dfs/dir
我们有一个 docker 图像正在处理 samba 共享上的一些文件。
为此,我们创建了一个挂载到 /mnt/dfs 的 cifs 共享,可以通过以下方式访问容器中的文件:
docker run -v /mnt/dfs/project1:/workspace image
现在我被要求做的是将容器放入 k8s 并从 pod 访问 cifs 共享,可以使用 cifs 卷驱动程序 usiong FlexVolume。这就是弹出一些问题的地方。
我将这个 repo 安装为 daemonset
https://k8scifsvol.juliohm.com.br/
开始了 运行。
apiVersion: apps/v1
kind: DaemonSet
metadata:
name: cifs-volumedriver-installer
spec:
selector:
matchLabels:
app: cifs-volumedriver-installer
template:
metadata:
name: cifs-volumedriver-installer
labels:
app: cifs-volumedriver-installer
spec:
containers:
- image: juliohm/kubernetes-cifs-volumedriver-installer:2.4
name: flex-deploy
imagePullPolicy: Always
securityContext:
privileged: true
volumeMounts:
- mountPath: /flexmnt
name: flexvolume-mount
volumes:
- name: flexvolume-mount
hostPath:
path: /usr/libexec/kubernetes/kubelet-plugins/volume/exec/
接下来要做的是添加一个 PeristentVolume,但这需要一个容量,在示例中为 1Gi。这是否意味着我们丢失了 smb 服务器上的所有数据?为什么要有一个现有服务器的容量?
此外,我们如何从 pod 中访问挂载 /mnt/dfs 的子目录?那么如何访问pod中/mnt/dfs/project1的数据呢?
我们还需要 PV 吗? pod 是否可以从主机的挂载共享中读取?
apiVersion: v1
kind: PersistentVolume
metadata:
name: mycifspv
spec:
capacity:
storage: 1Gi
flexVolume:
driver: juliohm/cifs
options:
opts: sec=ntlm,uid=1000
server: my-cifs-host
share: /MySharedDirectory
secretRef:
name: my-secret
accessModes:
- ReadWriteMany
不,该字段对您链接的 FlexVol 插件没有影响。它甚至懒得解析你传入的大小:)
设法让它与 fstab/cifs 插件一起工作。
将其 cifs 脚本复制到 /usr/libexec/kubernetes/kubelet-plugins/volume/exec 并授予其执行权限。同时在所有节点上重启 kubelet。
然后添加
containers:
- name: pablo
image: "10.203.32.80:5000/pablo"
volumeMounts:
- name: dfs
mountPath: /data
volumes:
- name: dfs
flexVolume:
driver: "fstab/cifs"
fsType: "cifs"
secretRef:
name: "cifs-secret"
options:
networkPath: "//dfs/dir"
mountOptions: "dir_mode=0755,file_mode=0644,noperm"
现在容器内有 /data 挂载指向 //dfs/dir