Доступ к файлам CIFS из модулей

У нас есть образ докера, который обрабатывает некоторые файлы на общем ресурсе samba.

Для этого мы создали общий ресурс cifs, который монтируется в /mnt/dfs, и доступ к файлам в контейнере можно получить с помощью:

docker run -v /mnt/dfs/project1:/workspace image

Теперь, что меня попросили сделать, это загрузить контейнер в k8s и получить доступ к общему ресурсу cifs из модуля, можно использовать драйвер тома cifs usiong FlexVolume. Вот и всплывают некоторые вопросы.

Я установил это репо как набор демонов

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-сервере? Зачем должна быть емкость для уже существующего сервера?

Кроме того, как мы можем получить доступ к подкаталогу монтирования /mnt/dfs из модуля? Итак, как получить доступ к данным из /mnt/dfs/project1 в модуле?

Нужен ли нам вообще PV? Может ли модуль просто прочитать с подключенного общего ресурса хоста?

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

person Serve Laurijssen    schedule 21.05.2021    source источник


Ответы (2)


Нет, это поле не влияет на подключенный вами подключаемый модуль FlexVol. Он даже не удосуживается разобрать размер, который вы передаете :)

person coderanger    schedule 21.05.2021

Удалось заставить его работать с плагином fstab/cifs.

Скопируйте его cifs-скрипт в /usr/libexec/kubernetes/kubelet-plugins/volume/exec и дайте ему права на выполнение. Также перезапустите kubelet на всех узлах.

https://github.com/fstab/cifs

Затем добавил

 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

person Serve Laurijssen    schedule 21.05.2021