Un DataCenter en tu Escritorio con K3s - Parte 2 NFS Conf en K3s
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…
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