¿Qué vamos a ver?
Basado en la documentación oficial de K8s (licencia CC-BY-4.0).
>_.source <(kubectl completion bash)
Comprueba que funciona escribiendo kubectl y presionando la tecla "TAB" 2 veces.Crea un namespace para aislar los recursos de este ejercicio del resto de recursos en tu clúster:
kubectl create namespace lab-persistent-volumes
Necesitamos crear un disco persistente de Compute Engine previamente para que K8s pueda montarlo en un Nodo:
gcloud compute disks create pd-disk-1 --size 15Gb --zone europe-west1-c
En este ejercicio vamos a crear un PersistentVolume de tipo gcePersistentDisk. Este tipo de PersistentVolume usa un disco persistente de Google Compute Engine.
persistent-volumes/pv-volume.yaml con este manifiesto:apiVersion: v1
kind: PersistentVolume
metadata:
name: pv-demo-volume
labels:
type: local
spec:
storageClassName: standard
capacity:
storage: 10Gi
accessModes:
- ReadWriteOnce
gcePersistentDisk:
fsType: ext4
pdName: pd-disk-1
kubectl apply -f persistent-volumes/pv-volume.yaml
kubectl get pv pv-demo-volume
La respuesta muestra que el PersistentVolume tiene un estado de AVAILABLE o disponible, lo cual significa que aún no ha sido asociado a un PersistentVolumeClaim.El siguiente paso es crear un PersistentVolumeClaim, que será usado por el Pod para solicitar almacenamiento.
persistent-volumes/pv-claim.yaml con este manifiesto:apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: pv-demo-claim
spec:
storageClassName: standard
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 3Gi
kubectl apply -f persistent-volumes/pv-claim.yaml -n lab-persistent-volumes
Al ser creado, el PersistentVolumeClaim será asociado a un Volumen Persistente que satisfaga sus requisitos y la StorageClass seleccionada.kubectl get pv pv-demo-volume
Ahora el estado muestra BOUND o asociado.kubectl get pvc pv-demo-claim -n lab-persistent-volumes
La salida muestra que el PersistentVolumeClaim está asociado al Volumen Persistente pv-demo-volume.El siguiente paso es crear un Pod que use dicho PersistentVolumeClaim como volumen de almacenamiento.
pods/pv-pod.yaml con este manifiesto:apiVersion: v1
kind: Pod
metadata:
name: pv-demo-pod
spec:
containers:
- name: pv-demo-container
image: nginx
ports:
- containerPort: 80
name: "http-server"
volumeMounts:
- mountPath: "/usr/share/nginx/html"
name: pv-storage
volumes:
- name: pv-storage
persistentVolumeClaim:
claimName: pv-demo-claim
kubectl apply -f pods/pv-pod.yaml -n lab-persistent-volumes
kubectl get pods pv-demo-pod -n lab-persistent-volumes
kubectl describe pod pv-demo-pod -n lab-persistent-volumes
kubectl delete namespace lab-persistent-volumes
gcloud compute disks delete pd-disk-1 --zone europe-west1-c
En esta práctica hemos visto cómo: