K8S | Utilizando compartilhamento Windows (SMB) para criação de volume no POD
O post à seguir demonstra em linhas gerais como utilizar um compartilhamento criado dentro de um host Windows, no exemplo à seguir presumimos que o compartilhamento esteja criado.
Criar Persistent Volume
Necessário criar um recurso PersistentVolume para representar o compartilhamento Windows. Isso pode ser feito adicionando um bloco de código como o seguinte em um arquivo YAML:
apiVersion: v1
kind: PersistentVolume
metadata:
name: pv-smb
spec:
capacity:
storage: 100Gi
accessModes:
- ReadWriteMany
persistentVolumeReclaimPolicy: Retain
mountOptions:
- dir_mode=0777
- file_mode=0777
- vers=3.0
csi:
driver: smb.csi.k8s.io
readOnly: false
volumeHandle: "projects/{project_id}/zones/{zone_name}/disks/{disk_name}"
volumeAttributes:
source: "//SMB_SERVER_NAME/SHARE_NAME"
nodeStageSecretRef:
name: secret-cdisvc
namespace: cdi
Ponto importante:
projects/{project_id}/zones/{zone_name}/disks/{disk_name}
para discos permanentes zonais ouprojects/{project_id}/regions/{region_name}/disks/{disk_name}
para discos permanentes regionais.
Observe que é necessário especificar o nome do driver CSI que será usado para se comunicar com o compartilhamento Windows, no exemplo mostrado no PV acima estamos usando o driver smb.csi.k8s.io, caso não haja instalado em seu cluster K8S, se faz necessário a instalação.
Segue o link para instalação via kubectl:
Criar Persistent Volume Claim
Uma vez criado o PV, se faz necessário criar um recurso PersistentVolumeClaim para solicitar o uso do PersistentVolume. Isso pode ser feito adicionando um bloco de código como o seguinte em um arquivo YAML:
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: pvc-smb
spec:
accessModes:
- ReadWriteMany
resources:
requests:
storage: 10Gi
volumeName: pv-smb
storageClassName: ""
Observe que é necessário especificar o nome da classe de armazenamento que foi usada para criar o PersistentVolume.
Implementar aplicação
Para validarmos, se fará necessário criar um recurso Deployment ou StatefulSet que use o PersistentVolumeClaim. Isso pode ser feito adicionando um bloco de código como o seguinte em um arquivo YAML:
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-smb
labels:
app: nginx
spec:
replicas: 1
template:
metadata:
name: nginx
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx
volumeMounts:
- name: smb
mountPath: "/pv/pv-smb"
resources:
requests:
memory: "1Gi"
cpu: "1"
limits:
memory: "2Gi"
cpu: "2"
volumes:
- name: smb
persistentVolumeClaim:
claimName: pvc-smb
selector:
matchLabels:
app: nginx
Observe que é necessário especificar o nome do PersistentVolumeClaim que foi criado.
Com esses passos, é possível utilizar um compartilhamento Windows em um POD Kubernetes. O compartilhamento será montado no diretório /pv/pv-smb
do container, conforme imagem abaixo:
Espero que tenha curtido e se entendeu que pode ser útil a outras pessoas, compartilhem.