Atividade 06 - Storage
Configurando StorageClass com NFS no Kubernetes
Instalar o nfs-subdir-external-provisioner, configurar um StorageClass e criar um PVC usando armazenamento NFS.
Pré-requisitos
Cluster Kubernetes com acesso ao servidor NFS 10.5.16.5
A pasta /nfs deve estar criada e com permissões de escrita no servidor NFS
Passo 1: Instalar o provisionador
helm install nfs-client nfs-subdir-external-provisioner \
--repo https://kubernetes-sigs.github.io/nfs-subdir-external-provisioner/ \
--set nfs.server=10.5.16.5 \
--set nfs.path=/nfs \
--set storageClass.name=nfs-client \
--set storageClass.defaultClass=true \
--namespace nfs-provisioner \
--create-namespace
Passo 2: Verificar StorageClass criada
kubectl get storageclass
Você deve ver uma StorageClass chamada nfs-client definida como padrão.
Exercício 1: Criando um PersistentVolumeClaim utilizando o StorageClass
Objetivo: Criar manualmente um volume persistente e vinculá-lo a um Pod.
1 - Crie um PVC com o arquivo pvc.yaml:
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: meu-pvc
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 1Gi
2 - Aplique o arquivo:
kubectl apply -f pvc.yaml
4 - Verifique se o PVC foi vinculado ao PV:
kubectl get pv,pvc
Exercício 2: Usando um PVC em um Pod
1 - Crie um Pod com o seguinte arquivo pod-com-volume.yaml:
apiVersion: v1
kind: Pod
metadata:
name: pod-com-volume
spec:
containers:
- name: nginx
image: nginx
volumeMounts:
- name: volume-dados
mountPath: /usr/share/nginx/html
volumes:
- name: volume-dados
persistentVolumeClaim:
claimName: meu-pvc
2 - Aplique o Pod:
kubectl apply -f pod-com-volume.yaml
3 - Acesse o Pod e escreva algo no volume:
kubectl exec -it pod-com-volume -- /bin/bash
echo "Olá, Kubernetes!" > /usr/share/nginx/html/index.html
exit
4 - Delete o Pod, recrie e veja se o conteúdo permanece.
Exercício 3: Criando um PVC em um StatefulSet
1 - Crie o statefulset-com-pvc.yaml com o volumeClaimTemplate
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: my-statefulset
spec:
serviceName: "my-service"
replicas: 3
selector:
matchLabels:
app: my-app
template:
metadata:
labels:
app: my-app
spec:
containers:
- name: my-container
image: registry.nuvem.unicamp.br/curso-kubernetes/nginx
volumeMounts:
- name: my-volume
mountPath: /data
volumeClaimTemplates:
- metadata:
name: my-volume # Esse nome deve ser o mesmo nome do volumeMounts no container
spec:
accessModes:
- ReadWriteOnce # Ou ReadWriteMany, ReadOnlyMany
resources:
requests:
storage: 1Gi
2 - Aplique e verifique:
kubectl apply -f statefulset-com-pvc.yaml
kubectl get pvc,pv
Projeto
Adicione um volume persistente no StatefulSet do banco de dados, de modo que mantenha os dados do banco.