Иногда хочется странного, но чаще ничего не хочется, а странного хочется кому-то другому. Вот и в этот раз появилась необходимость прицепить в pod кубера удалённую samba-шару с одного из виндовых серверов. Вызов брошен — вызов принят.
В качестве испытуемых возьмём компьютер в ОС Windows 10 и виртуалку с одно-нодовым кубер-кластером, который мы поднимали ранее.
Создание samba-шары
Запускаем PowerShell под администратором на нашей Win10 и последовательно выполняем команды.
Создаём пользователя:
$pass = ConvertTo-SecureString "smbp@ssword" -AsPlainText -Force New-LocalUser -Name smbuser -Password $pass
Создаём samba-шару:
mkdir $HOME\Desktop\share New-SmbShare -Name share -Path $HOME\Desktop\share -FullAccess smbuser
В только-что созданной samba-шаре создаём тестовый файл:
echo "test file 321" > $HOME\Desktop\share\testfile.txt
Проверяем доступность samba-шары на линуксовой виртуалке
mkdir /mnt/smb mount -t cifs //smb-host/share/ /mnt/smb -o username=smbuser,password=smbp@ssword ls –la /mnt/smb umount /mnt/smb
Подключение samba в качестве PersistentVolume
Устанавливаем в кубер-кластер csi-driver-smb:
helm repo add csi-driver-smb https://raw.githubusercontent.com/kubernetes-csi/csi-driver-smb/master/charts helm install csi-driver-smb csi-driver-smb/csi-driver-smb --namespace csi-driver-smb --create-namespace kubectl get pods –n csi-driver-smb
Создаём namespace для наших экспериментов:
kubectl create namespace smb-example
Создаём Secret с кредами для подключения к нашей samba-шаре (помните создавали пользователя в Windows10?):
cat <<EOF | kubectl apply -f - --- apiVersion: v1 kind: Secret metadata: name: smb-creds namespace: smb-example stringData: username: smbuser password: smbp@ssword EOF
Создаём StorageClass, указывая в нём параметры подключения к samba-шаре:
cat <<EOF | kubectl apply -f - --- apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: name: sc-smb provisioner: smb.csi.k8s.io parameters: source: //172.20.0.1/share/ csi.storage.k8s.io/node-stage-secret-name: smb-creds csi.storage.k8s.io/node-stage-secret-namespace: smb-example reclaimPolicy: Delete volumeBindingMode: Immediate allowVolumeExpansion: true mountOptions: - dir_mode=0777 - file_mode=0777 - uid=65534 - gid=65534 EOF
Создаём PersistentVolume:
cat <<EOF | kubectl apply -f - --- apiVersion: v1 kind: PersistentVolume metadata: name: pv-smb annotations: pv.kubernetes.io/provisioned-by: smb.csi.k8s.io spec: capacity: storage: 1Gi accessModes: - ReadWriteMany persistentVolumeReclaimPolicy: Delete storageClassName: sc-smb mountOptions: - dir_mode=0777 - file_mode=0777 - uid=65534 - gid=65534 csi: driver: smb.csi.k8s.io volumeHandle: 172.20.0.1#share# volumeAttributes: source: //172.20.0.1/share/ nodeStageSecretRef: name: smb-creds namespace: smb-example EOF
Создаём PersistentVolumeClaim:
cat <<EOF | kubectl apply -f - --- apiVersion: v1 kind: PersistentVolumeClaim metadata: name: pvc-smb namespace: smb-example spec: accessModes: - ReadWriteMany resources: requests: storage: 1Gi storageClassName: sc-smb EOF
Запускаем тестовый pod с samba-шарой примонтированной с помощью pvc:
cat <<EOF | kubectl apply -f - --- apiVersion: v1 kind: Pod metadata: name: smb-example namespace: smb-example spec: containers: - name: smb-example image: debian command: ["sleep","1000000"] volumeMounts: - name: smb-volume mountPath: /mnt/smb readOnly: false volumes: - name: smb-volume persistentVolumeClaim: claimName: pvc-smb
Проверка
Смотрим, что в итоге у нас получилось:
kubectl get sc kubectl get pv kubectl -n smb-example get pvc kubectl -n smb-example get pods
Проверяем точку монтирования в pod’е:
kubectl exec -it -n smb-example smb-example -- df -h /mnt/smb
Смотрим, что видно в подмонтированной папке:
kubectl exec -it -n smb-example smb-example -- ls -la /mnt/smb
kubectl exec -it -n smb-example smb-example -- cat /mnt/smb/testfile.txt
Создаём в pod’е новый тестовый файл:
kubectl exec -it -n smb-example smb-example -- echo "test echo from pod" > /mnt/smb/testfile2.txt kubectl exec -it -n smb-example smb-example -- ls -la /mnt/smb
Смотрим на результат в Windows 10
Получилось неплохо. Не очень сложно и вполне работоспособно. Данное решение можно например будет использовать для файлового обмена.
ссылка на оригинал статьи https://habr.com/ru/articles/867282/
Добавить комментарий