Подключить файловое хранилище к Managed Kubernetes по протоколу CIFS
- Подготовьте инфраструктуру для подключения файлового хранилища к Managed Kubernetes.
- Закажите подключение файлового хранилища по протоколу CIFS.
- Установите CSI-драйвер для Samba.
- Создайте секрет.
- Создайте манифест для StorageClass.
- Создайте манифест для PersistentVolumeClaim.
- Добавьте файловое хранилище в контейнер Deployment.
- Проверьте подключение файлового хранилища.
Заказать подключение файлового хранилища
- Создайте тикет на подключение файлового хранилища и укажите:
- размер файлового хранилища;
- протокол:
CIFS
; - инфраструктуру: кластер Kubernetes;
- IP-адрес: адрес приватной сети облачной платформы, которую вы добавили к кластеру Managed Kubernetes.
- Дождитесь ответа в тикете. В ответе будут предоставлены команды с параметрами подключения:
- GNU/Linux
- Windows
apt install cifs-utils
sudo mkdir -p /mnt/my_samba_share &&
mount.cifs //x.x.x.x/<UUID> /mnt/my_samba_share
Параметры подключения:
x.x.x.x
— IP-адрес;/share/<UUID>
— путь к файловому хранилищу.
net use X: \\x.x.x.x\\<UUID> /PERSISTENT:YES
Параметры подключения:
x.x.x.x
— IP-адрес;/share/<UUID>
— путь к файловому хранилищу.
Установить CSI-драйвер для Samba
Для установки драйвера нужен пакетный менеджер helm.
Скачайте пакетный менеджер helm chart и CSI-драйвер с GitHub Kubernetes CSI.
Установите последнюю версию драйвера:
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 kube-system --version v1.4.0Проверьте, что поды установлены и запущены:
kubectl --namespace=kube-system get pods --selector="app=csi-smb-controller"
Создать секрет
Создайте секрет для хранения логина и пароля (по умолчанию guest/guest):
kubectl create secret generic smbcreds --from-literal username=guest --from-literal password=guest
Создать манифест для StorageClass
Создайте файл sfs_storage_class.yaml:
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: smb
provisioner: smb.csi.k8s.io
parameters:
source: "//ip_adress/share/mount_path"
csi.storage.k8s.io/provisioner-secret-name: "smbcreds"
csi.storage.k8s.io/provisioner-secret-namespace: "default"
csi.storage.k8s.io/node-stage-secret-name: "smbcreds"
csi.storage.k8s.io/node-stage-secret-namespace: "default"
reclaimPolicy: Delete
volumeBindingMode: Immediate
mountOptions:
- dir_mode=0777
- file_mode=0777Укажите параметры подключения:
ip_address
— IP-адрес из команды;mount_path
— UUID из пути к файловому хранилищу.
Примените манифест:
kubectl apply -f ./sfs_storage_class.yaml
Проверьте, что StorageClass создался:
kubectl get storageclass
В выводе команды будет указан StorageClass —
smb
.
Создать манифест для PersistentVolumeClaim
Создайте файл sfs_persistent_volume_claim.yaml:
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: samba-test
annotations:
volume.beta.kubernetes.io/storage-class: smb
spec:
accessModes: ["ReadWriteMany"]
resources:
requests:
storage: storage_sizeУкажите
storage_size
— размер файлового хранилища, который был указан в тикете на подключение файлового хранилища (например, 500Gi).Примените манифест в кластер:
kubectl apply -f ./sfs_persistent_volume_claim.yaml
Проверьте, что PersistentVolumeClaim создался:
kubectl get pvc
Добавить файловое хранилище в контейнер Deployment
Создайте файл deployment.yaml:
apiVersion: apps/v1
kind: Deployment
metadata:
name: sfs-test-deployment
labels:
project: sfs-test-deployment
spec:
replicas: 2
selector:
matchLabels:
project: sfs-test
template:
metadata:
labels:
project: sfs-test
spec:
volumes:
- name: volume_name
persistentVolumeClaim:
claimName: samba-test
containers:
- name: container-nginx
image: nginx:stable-alpine
ports:
- containerPort: 80
name: "http-server"
volumeMounts:
- name: samba-test-storage
mountPath: mount_pathУкажите
mouth_path
— путь внутри контейнера, куда будет смонтировано файловое хранилище.Примените манифест:
kubectl apply -f deployment.yaml
Проверить подключение файлового хранилища
Выведите имена контейнеров из Deployment
sfs-test-deployment
:kubectl get pods -l=project=sfs-test-deployment -A
Подключитесь к контейнеру:
kubectl -it container_name sh
Укажите
container_name
— имя контейнера.Проверьте, что файловое хранилище смонтировалось:
mount -l | grep nfs
Проверьте, что объем тома соответствует параметру
storage_size
из файла sfs_persistent_volume.yaml:df -h
Запишите и выведите текст:
echo "Hello World!" > mount_path/hello.txt
cat mount_path/hello.txtУкажите
mouth_path
— путь внутри контейнера, куда было смонтировано файловое хранилище.