cover

INTRO

En la primera parte realizamos la instalacion de un cluster K3s vía Ansible en nuestras raspis, luego conectamos un disco externo (que puede ser mecanico o de estado solido) a nuestro nodo master y lo configuramos, ahora, necesitamos compartirlo vía NFS para que todo el cluster pueda ver el espacio de almacenamiento como un todo

Requisitos previos

  • Conocimiento básico en GNU/Linux y algo de experiencia con la terminal para realizar instalaciones de paquetes.
  • Haber completado la primer parte de esta serie.
  • Conocimiento básico de que es NFS.

En el Nodo Master:

Recuerdan el folder /mnt/ssd que creamos en la primer parte en el nodo Master? bueno ahora vamos a hacerlo accesible al resto de los nodos.

En primer lugar, nos conectamos por ssh e instalamos algunas dependencias, nada raro, lo necesario para levantar un NFS server old school (como lo haciamos en el mundo SysAdmin tradicional):

pi@yngwie-master:~ $ sudo apt-get install nfs-kernel-server -y

Ahora editamos el file de exports y agregamos la sig. linea:

pi@yngwie-master:~ $ sudo vi /etc/exports

/mnt/ssd *(rw,no_root_squash,insecure,async,no_subtree_check,anonuid=1000,anongid=1000)

por último, iniciamos el NFS server con:

pi@yngwie-master:~ $ sudo exportfs -ra

super sencillo, ahora vamos por los workerNodes

En todos los WorkerNodes que tengan:

Los siguientes comandos deben repetirlos en TODOS sus workers, o mejor dicho, en realidad en todos los workers que quieran que vean el almacenamiento, pueden jugar un poco mas y tener multimaster, o tener mas de un sqlite (la BD que usa K3s) corriendo en alguna otra raspi, mas de un api server etc, eso lo podemos explorar mejor en otros posts si les interesa ese tipo de approach, pero por ahora volvamos a lo tradicional

instalamos dependencias:

pi@gilbert:~ $ sudo apt-get install nfs-common -y

creamos el mismo folder para montar el NFS share:

pi@gilbert:~ $ sudo mkdir /mnt/ssd

y le damos permisos al user pi… pase Don Pi adelante:

pi@gilbert:~ $ sudo chown -R pi:pi /mnt/ssd/

vamos al FSTAB y agregamos el mount automático usando la IP de nuestro Master:

pi@kube-worker1:~ $ sudo vi /etc/fstab
192.168.1.100:/mnt/ssd   /mnt/ssd   nfs    rw  0  0

reiniciamos:

pi@gilbert:~ $ sudo reboot

Listo, ya son NFS Admins…

hackerman

jeje, pero fuera de todo chiste, es bastante sencillo hacerlo, y ahora ya tenemos el almacenamiento disponible en todos los nodos de nuestro cluster, en solo unas pocas lineas

Como usamos nuestro NFS en K3s?

Ya tenemos un disco accesible por todos nuestros nodos, pero ahora, como hacemos para que nuestros k8s deployments puedan consumir ese espacio persistente? lo hacemos con los objetos nativos de k8s para manejar storage, vamos a levantar los siguientes manifests:

primero definimos un PV usando “manual” de SC:

## k3s-nfs-pv.yaml
---
apiVersion: v1
kind: PersistentVolume
metadata:
  name: example-ssd-volume
  labels:
    type: local
spec:
  storageClassName: manual
  capacity:
    storage: 2Gi
  accessModes:
    - ReadWriteOnce
  hostPath:
    path: "/mnt/ssd/mymware-blog"
---

lo aplicamos (en el ns que queramos, pueden hacerlo en el default tambien):

$ k create ns k3spost
$ kubie ns k3spost
$ k apply -f k3s-nfs-pv.yaml

y ahora necesitamos un PVC para mapear nuestro PV al Deployment que queramos (o al StatefulSet que queramos)

## k3s-nfs-pvc.yaml
---
  apiVersion: v1
  kind: PersistentVolumeClaim
  metadata:
    name: k3s-nfs-volume
  spec:
    storageClassName: manual
    accessModes:
      - ReadWriteOnce
    resources:
      requests:
        storage: 2Gi
---

aplicamos

$ k apply -f k3s-nfs-pvc.yaml

podemos listar nuestro PV y nuestro PVC (lo deberiamos ver en estado “Bound”) con los siguientes comandos:

$ k get pv
$ k get pvc

Listo, ya podemos realizar nuestros deployments y otorgarles almacenamiento persistente en nuestro cluster K3s

En la siguiente parte de esta serie vamos a setear Nginx Ingress Controller, MetalLB y tambien una solucion magica llamada CertManager.

Fuente

Material Extra: Curso “Devops en 5 Pasos” Disponible en Udemy

Temas:

  • Docker
  • Kubernetes
  • MultiCloud (AWS - Azure - GCP)
  • IaC (Terraform, Cloud Formation, ARM Templates, Cloud Resource Manager)
  • CI/CD Pipelines (GitlabCI, Azure Devops, CircleCI)

Descripción completa: Detalle y enlaces del curso

Invitame un CaféInvitame un Café