Cómo configurar un volumen persistente basado en NFS en Kubernetes

Se recomienda colocar los datos del pod en algún volumen persistente para que los datos estén disponibles incluso después de la finalización del pod. En Kubernetes (k8s), los volúmenes persistentes basados ​​en NFS se pueden usar dentro de los pods. En este artículo, aprenderemos cómo configurar el volumen persistente y el reclamo de volumen persistente y luego discutiremos cómo podemos usar el volumen persistente a través de su nombre de reclamo en los pods k8s.

Supongo que tenemos un clúster k8s funcional y un servidor NFS. Los siguientes son detalles para la configuración del laboratorio,

  • IP del servidor NFS = 192.168.1.40
  • Compartir NFS = /opt/k8s-pods/data
  • Clúster K8s = un nodo maestro y dos trabajadores

Nota: Asegúrese de que se pueda acceder al servidor NFS desde los nodos trabajadores e intente montar el recurso compartido nfs en cada trabajador una vez para realizar pruebas.

Cree un archivo Index.html dentro del recurso compartido nfs porque montaremos este recurso compartido en el pod de nginx más adelante en el artículo.

[[email protected] ~]$ echo "Hello, NFS Storage NGINX" > /opt/k8s-pods/data/index.html

Configurar PV basado en NFS (Volumen persistente)

Para crear un volumen persistente basado en NFS en K8s, cree el archivo yaml en el nodo principal con los siguientes contenidos:

[[email protected] ~]$ vim nfs-pv.yaml
apiVersion: v1
kind: PersistentVolume
metadata:
  name: nfs-pv
spec:
  capacity:
    storage: 10Gi
  volumeMode: Filesystem
  accessModes:
    - ReadWriteMany
  persistentVolumeReclaimPolicy: Recycle
  storageClassName: nfs
  mountOptions:
    - hard
    - nfsvers=4.1
  nfs:
    path: /opt/k8s-pods/data
    server: 192.168.1.40

Guardar y salir del archivo

NFS-PV-Yaml-Archivo-K8s

Ahora cree un volumen persistente usando el archivo yaml creado anteriormente, ejecute

[[email protected] ~]$ kubectl create -f nfs-pv.yaml
persistentvolume/nfs-pv created
[[email protected] ~]$

Ejecute el siguiente comando kubectl para verificar el estado del volumen persistente

[[email protected] ~]$ kubectl get pv
NAME     CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS      CLAIM   STORAGECLASS   REASON   AGE
nfs-pv   10Gi       RWX            Recycle          Available           nfs                     20s
[[email protected] ~]$

El resultado anterior confirma que el PV se ha creado correctamente y está disponible.

Configurar reclamo de volumen persistente

Para montar un volumen persistente dentro de un pod, debemos especificar su reclamo de volumen persistente. Entonces, creemos un reclamo de volumen persistente usando el siguiente archivo yaml

[[email protected] ~]$ vi nfs-pvc.yaml
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: nfs-pvc
spec:
  storageClassName: nfs
  accessModes:
    - ReadWriteMany
  resources:
    requests:
      storage: 10Gi

Guardar y salir del archivo.

NFS-PVC-Yaml-k8s

Ejecute el comando debajo de kubectl para crear pvc usando el archivo yaml anterior,

[[email protected] ~]$ kubectl create -f nfs-pvc.yaml
persistentvolumeclaim/nfs-pvc created
[[email protected] ~]$

Después de ejecutar lo anterior, el plano de control buscará un volumen persistente que satisfaga el requisito del reclamo con el mismo nombre de clase de almacenamiento y luego vinculará el reclamo al volumen persistente, el ejemplo se muestra a continuación:

[[email protected] ~]$ kubectl get pvc nfs-pvc
NAME      STATUS   VOLUME   CAPACITY   ACCESS MODES   STORAGECLASS   AGE
nfs-pvc   Bound    nfs-pv   10Gi       RWX            nfs            3m54s
[[email protected] ~]$
[[email protected] ~]$ kubectl get pv nfs-pv
NAME     CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS   CLAIM             STORAGECLASS   REASON   AGE
nfs-pv   10Gi       RWX            Recycle          Bound    default/nfs-pvc   nfs                     18m
[[email protected] ~]$

El resultado anterior confirma que el reclamo (nfs-pvc) está vinculado con el volumen persistente (nfs-pv).

Ahora estamos listos para usar el volumen persistente basado en nfs dentro de los pods.

Use un volumen persistente basado en NFS dentro de un pod

Cree un pod nginx usando el archivo yaml debajo, montará un reclamo de volumen persistente en ‘/usr/share/nginx/html’

[[email protected] ~]$ vi nfs-pv-pod
apiVersion: v1
kind: Pod
metadata:
  name: nginx-pv-pod
spec:
  volumes:
    - name: nginx-pv-storage
      persistentVolumeClaim:
        claimName: nfs-pvc
  containers:
    - name: nginx
      image: nginx
      ports:
        - containerPort: 80
          name: "nginx-server"
      volumeMounts:
        - mountPath: "/usr/share/nginx/html"
          name: nginx-pv-storage

Guarde y cierre el archivo.

Pod-usando-PVC-K8s

Ahora cree el pod usando el archivo yaml anterior, ejecute

[[email protected] ~]$ kubectl create -f nfs-pv-pod.yaml
pod/nginx-pv-pod created
[[email protected] ~]$
[[email protected] ~]$ kubectl get pod nginx-pv-pod -o wide
NAME           READY   STATUS    RESTARTS   AGE   IP           NODE           NOMINATED NODE   READINESS GATES
nginx-pv-pod   1/1     Running   0          66s   172.16.140.28 k8s-worker-2   <none>           <none>
[[email protected] ~]$

Nota: Para obtener más detalles sobre el pod, kubectl describe el pod

La salida de los comandos anteriores confirma que el pod se ha creado correctamente. Ahora intente acceder a la página nginx usando el comando curl

[[email protected] ~]$ curl http://172.16.140.28
Hello, NFS Storage NGINX
[[email protected] ~]$

Perfecto, la salida del comando anterior curl confirma que el volumen persistente está montado correctamente dentro del pod ya que estamos obteniendo el contenido del archivo index.html que está presente en el recurso compartido NFS.

Esto concluye el artículo, creo que tienen una idea básica sobre cómo configurar y usar un volumen persistente basado en NFS dentro de los pods de Kubernetes.

Leer también : Cómo configurar el clúster de Kubernetes (k8s) en HA con Kubeadm

Leer también : Cómo instalar y usar Helm en Kubernetes

Entradas relacionadas

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *