Как настроить CSI драйвер SMB в Kubernetes?

Kubernetes SMB CSI Persistence Volume Persistence Volume Claim StorageClass

Легко. Берем и делаем.

Терминология

Server Message Block (SMB) - сетевой протокол прикладного уровня для удалённого доступа к файлам, принтерам и другим сетевым ресурсам. Часто используется в Windows сетях.

Container Storage Interface (CSI) - стандарт для предоставления блочного и файлового хранилища рабочим нагрузкам (контейнерам) в системах оркестрации контейнеров, таких как Kubernetes. Не смотря на то, что использоваться оно может не только в Kubernetes, нас интересует только это.

Требования

Kubernetes 1.22+

Подготовка узлов кластера

  1. Linux узлы (Ubuntu). Тут всё просто - надо установить cifs-utils пакет.
    sudo apt install -y cifs-utils
    
  2. Windows узлы. Нам надо собрать из исходников и установить csi-proxy.exe. Делается это из Linux. Хотя в теории можно и под Windows, но я не шарю в golang и уже в пижаме.
    git clone https://github.com/kubernetes-csi/csi-proxy
    sudo make build
    
    После успешной сборки в папке /bin мы найдем csi-proxy.exe. Теперь надо установить его как сервис. Создаем папки c:\etc\kubernetes\logs и c:\etc\kubernetes\node\bin и копируем csi-proxy.exe в последнюю. Выполняем заклинание:
    $flags = "-windows-service -log_file=\etc\kubernetes\logs\csi-proxy.log -logtostderr=false"
    sc.exe create csiproxy binPath= "\etc\kubernetes\node\bin\csi-proxy.exe $flags"
    sc.exe failure csiproxy reset= 0 actions= restart/10000
    sc.exe start csiproxy
    
  3. Кластер готов у кстановке CSI драйверов.

Установка CSI Driver SMB

Тоже всё просто:

curl -skSL https://raw.githubusercontent.com/kubernetes-csi/csi-driver-smb/master/deploy/install-driver.sh | bash -s master --

Проверяем что всё прошло успешно.

PS C:\Users\v.leschenko> kubectl -n kube-system get pod -o wide -l app=csi-smb-controller
NAME                                  READY   STATUS    RESTARTS   AGE    IP              NODE          NOMINATED NODE   READINESS GATES
csi-smb-controller-77897597b7-6vpgs   3/3     Running   0          3d3h   10.244.135.8    k8s-linux-3   <none>           <none>
csi-smb-controller-77897597b7-hkv9n   3/3     Running   0          3d3h   10.244.101.15   k8s-linux-2   <none>           <none>
PS C:\Users\v.leschenko> kubectl -n kube-system get pod -o wide -l app=csi-smb-node
NAME                 READY   STATUS    RESTARTS   AGE    IP               NODE          NOMINATED NODE   READINESS GATES
csi-smb-node-b4xjw   3/3     Running   0          3d3h   192.168.99.150   k8s-linux-1   <none>           <none>
csi-smb-node-bllsk   3/3     Running   0          3d3h   192.168.99.160   k8s-linux-2   <none>           <none>
csi-smb-node-k9m87   3/3     Running   0          3d3h   192.168.99.161   k8s-linux-3   <none>           <none>
PS C:\Users\v.leschenko> kubectl -n kube-system get pod -o wide -l app=csi-smb-node-win
NAME                     READY   STATUS    RESTARTS   AGE   IP              NODE            NOMINATED NODE   READINESS GATES
csi-smb-node-win-9k29c   3/3     Running   0          23h   10.244.147.27   k8s-windows-3   <none>           <none>
csi-smb-node-win-g64t2   3/3     Running   0          23h   10.244.159.35   k8s-windows-1   <none>           <none>
csi-smb-node-win-xl8b9   3/3     Running   0          23h   10.244.26.137   k8s-windows-2   <none>           <none>

Как это всё использовать?

А это уже другая история. Позже будет отдельаня статья.

Полезные ссылки

  1. Kubernetes 1.22: CSI Windows Support (with CSI Proxy) reaches GA
  2. csi-proxy
  3. csi-driver-smb