Kubernetes. Монтируем SMB шары в Windows Containers.

Если есть необходимость примотнировать SMB шару внутрь Windows контейнера, то можно воспользоваться вот такой штукой.

Если коротко, то для начала надо настроить сами Windows узлы в кластере. Делается это путем копирования папки сюда: C:\usr\libexec\kubernetes\kubelet-plugins\volume\exec\

Затем создать секрет с логином и паролем (в виде base-64):

apiVersion: v1
kind: Secret
metadata:
  name: smb-secret
data:
  password: cGFzc3dvcmQ=
  username: dXNlcm5hbWU=
type: microsoft.com/smb.cmd

А теперь можно монтировать volume вот так:

apiVersion: v1
kind: Pod
metadata:
  name: smb
  namespace: default
spec:
  restartPolicy: Never
  containers:
  - name: smb
    image: microsoft/nanoserver
    command: ["C:\\Windows\\System32\\cmd.exe"]
    args: ["/C", "echo", "0", ">", "c:\\d\\smb_test.txt"]
    volumeMounts:
    - name: smb-volume
      mountPath: /d
  volumes:
  - name: smb-volume
    flexVolume:
      driver: "microsoft.com/smb.cmd"
      secretRef:
        name: "smb-secret"
      options:
        # source can be in any of the following formats
        # \\servername\share\path  (\'s will need to be escaped)
        # smb://servername/share/path
        # //servername/share/path
        source: "\\\\Server\\Share\\optional\\sub\\path"

PS: Для Linux подов подойдет аналогичное решение: https://github.com/fstab/cifs

Комментарии

  • max#

    В GKE сделал класте с виндовой нодой. Возникла потребность SMB в под подключить. kubelet говорит что папка для плагинов вот тут: --volume-plugin-dir=C:\etc\kubernetes\flexvolume Вроде все по статье делаю, однако: Unable to attach or mount volumes: unmounted volumes=[smb-volume], unattached volumes=[smb-volume default-token-xk4rd]: failed to get Plugin from volumeSpec for volume "smb-volume" err=no volume plugin matched. Может есть какие-то нюансы?

    • Виталий Лещенкоавтор#

      Для того, чтобы это работало в облаках, вам надо как-то реализовать поставку файлов плагина на узлы кластера. Я делат это с помощью DaemonSet, которому монтировал папку с плагинами и уже из контейнера копировал туда нужные файлы. В этом случае при создании новой ноды, плагин будет автоматически установлен. Вот мои yaml файлы:

      • Виталий Лещенкоавтор#

        Замените только /usr/libexec/kubernetes/kubelet-plugins/volume/exec на /etc/kubernetes/flexvolume

Оставить комментарий могут только зарегистрированные пользователи.

Войдите на сайт или зарегистрируйтесь, чтобы оставить комментарий.