K8S | Utilizando compartilhamento Windows (SMB) para criação de volume no POD

Thiago Pontes
2 min readFeb 21, 2023

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 ou projects/{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.

--

--

Thiago Pontes

Graduado em Redes de Computadores e pós-graduado em Gestão de TI, atuo como Gerente Cloud.