HomeLAB is going almost 100% HarvesterHCI

 

A black and orange x-shaped symbol

Description automatically generated A close-up of a logo

Description automatically generated

I just decided that Proxmox is not challenging enough and interesting enough to keep me trying stuff and investing learning time in it. Yeah, a lot of Proxmox lovers will hate me for saying that but the time for a new platform/way to do things is among us, and maybe you already notice, I don’t do VMware stuff anymore.

I just want to run Kubernetes, a lot of Kubernetes clusters for testing solutions like Cilium and others, my real issue with Proxmox is the integration with automation tools like Terraform (there is not an official module for it) and the Storage plugins for consuming Proxmox storage on Kubernetes is terrible. I always liked Harvester and the latest integration into the downstream cluster running on Harvester and deployed with Rancher is awesome!

So, this is the plan.

Currently running a 3-node Proxmox cluster with Ceph and a few NVME and Intel SSD drives that are good enough for decent storage performance. I will remove 2 nodes from that cluster and convert them to Harvester, now there is support for a 2-node Cluster + Witness node. The witness node will run on the stand-alone Proxmox (Harvester doesn’t have a USB pass-through yet and I run unRAID on that host).

The 2 HP z440 will be my new 2-node Harvester cluster.

This machine will have 4 drives, 2 NVME, and 2 Intel SSD, in the RAM area, there will be 256GB of RAM available and enough CPU to run at least 3 or 4 RKE2 clusters for testing and production stuff.

I’ll update on the progress…

 

Kubernetes – Respaldando un cluster de k8s con Kasten K10.

Kubernetes – Respaldando un cluster de k8s con Kasten K10.

Kasten K10 es una solución de respaldos para Kubernetes, ya he tocado el tema de los respaldos en dos ocasiones con dos herramientas diferentes, K10 tiene ventajas muy claras en frente a los respaldos de Longhorn o Velero.

El primer punto a favor que tiene la herramienta es la facilidad con la que se instala, sin embargo, K10 hace uso de funcionalidades que no vienen hábiles por defecto y tenemos que aplicar CRDs al cluster. K10 se apoya de VolumeSnapshot de Kubernetes que hasta hace varias versiones era Beta y que aun en versión 1.19 se deben agregar de manera manual algunos CRD.

Otro punto a tener en cuenta es que la solución de almacenamiento habilitada en k8s debe soportar el CSI de snapshots. En mi ambiente de “producción” estoy usando Longhorn 1.0.2 y esta opción solo está disponible para la versión 1.1.0, esto quiere decir que la instalación descrita en este artículo fue hecha en un cluster para estos fines ya que por circunstancias ajenas aun no puedo actualizar Longhorn a la última versión.

Continuar leyendo «Kubernetes – Respaldando un cluster de k8s con Kasten K10.»

Kubernetes – Respaldando volúmenes de Rancher Longhorn en Minio.

Kubernetes – Respaldando volúmenes de Rancher Longhorn en Minio.

Longhorn ha estado en beta desde que leí sobre este proyecto hace más de un año, actualmente está en la versión 0.8.1, cumple con lo necesario para usarlo como proveedor de almacenamiento en Kubernetes, al menos en mi caso.

Hace ya un tiempo escribí sobre esta implementación desarrollada por Rancher

https://arielantigua.com/weblog/2019/10/kubernetes-almacenamiento-con-rancher-longhorn-parte2/

En esta ocasión me ha tocado configurar la opción de respaldos ofrecida por Longhorn, actualmente solo respalda los volúmenes provisionados por su engine. Hace unos meses jugué un poco con Velero pero las pruebas no fueron satisfactorias como lo esperaba así que mientras tanto respaldare los volúmenes de Longhorn usando su propia implementación de respaldos.

En Longhorn un respaldo representa el estado de un volumen (un snapshot) en un momento determinado, este es almacenado en un espacio alternativo (backupstore, esto ha creado en Minio) el cual esta localizado fuera del sistema de Longhorn. https://longhorn.io/docs/0.8.0/concepts/backups/

Continuar leyendo «Kubernetes – Respaldando volúmenes de Rancher Longhorn en Minio.»

Kubernetes – Almacenamiento con Rancher Longhorn, Parte2.

Kubernetes – Almacenamiento con Rancher Longhorn, Parte2.

Announcing Longhorn: an open source project for microservices-based distributed block storage

En esta edición de mis aventuras con #k8s, acabo de instalar una implementación de almacenamiento desarrollada por Rancher. Desde mi punto de vista es parte2 porque fue la primera solución de almacenamiento distribuido que utilice hace meses, pero tenía varios temas, por ejemplo, cuando un pod era eliminado y este tenía un pvc montado, muchas veces no eran eliminados junto con su pod/deployment, otras veces si el pod/deployment era relanzado, el pvc tardaba minutos en montarse al pod.

Hace unos meses lanzaron nueva versión y tiene bastantes mejoras, además he tenido experiencias con Linstor que en mi pequeño ambiente son algo incomodas, actualmente tengo un controller de Linstor, si esta falla, falla la creación de volúmenes y por consecuente la creación de pods.

Instalar Longhorn es increíblemente fácil, con tan solo ejecutar kubectl -f url/de/yaml tendremos en marcha nuestro almacenamiento distribuido. Usando Rancher UI es mucho mas fácil, así lo he hecho esta vez, la ventaja de hacerlo desde Rancher UI es que podemos acceder al Dashboard de Longhorn desde Rancher usando las mismas credenciales.

https://rancher.com/blog/2017/announcing-longhorn-microservices-block-storage/

En ese enlace se puede leer sobre el diseño de Longhorn:

Storage Orchestration
Replica Operations
Replica Rebuild
Backup of Snapshots
Deployment Models

Documentar el proceso de instalación está de más, en YouTube podemos ver el video de Adrian Goins.

https://www.youtube.com/watch?v=q5JzZbiw4LE

Y para los que quieren entender más a profundidad como funciona Longhorn, les recomiendo ver un video de Rancher Labs titulado: Kubernetes Master Class – Using Persistent Storage in Kubernetes and Project Longhorn.

https://www.youtube.com/watch?v=BnHMAJ8azBU&t=

En los próximos días estaré moviendo todo lo que tengo en Linstor a Longhorn, espero no perder información en el proceso!!!

Kubernetes – Almacenamiento con Linstor.

Kubernetes – Almacenamiento con Linstor.

Hace ya un tiempo que escribí sobre k8s, otros proyectos han tomado tiempo y recursos, hace unas semanas retome el clúster que tengo en casa para terminar las configuraciones necesarias y mover lo más que pueda de algunas máquinas virtuales que tengo en vSphere y que entiendo desempeñarían mejor estando en Kubernetes.

Inicialmente las pruebas fueron realizadas con longhorn, algunos problemas los cuales no inspiran mucha confianza me hicieron no escribir sobre esa implementación, claramente Rancher dice que es un proyecto aun en beta.

Hace unas semanas leí sobre Linstor [ http://vitobotta.com/2019/08/07/linstor-storage-with-kubernetes/ ], la instalación fue realizada en Ubuntu que es la misma distribución que estoy usando. He decidido usar esta implementación porque usa LVM como backend en los equipos que aportaran almacenamiento para el clúster, además de esto los nodos que están aportando almacenamiento no necesariamente deben tener k8s, al menos eso es lo que entiendo y algo que debo validar.

Instalando Linstor.

Prepararemos nuestros equipos con los siguientes pasos:

apt-get install linux-headers-$(uname -r)
add-apt-repository ppa:linbit/linbit-drbd9-stack
apt-get update
apt install drbd-utils drbd-dkms lvm2
modprobe drbd
lsmod | grep -i drbd
echo drbd > /etc/modules-load.d/drbd.conf

 

En este punto ya los equipos están listos para instalar los componentes de Linstor. Para estar seguro de que todo estaba bien procedí a reiniciar el nodo.

Seleccionamos un equipo para que sea controlador del cluster de Linstor, además este mismo equipo puede aportar almacenamiento así que también instalaremos el componente de satellite.

apt install linstor-controller linstor-satellite linstor-client

Ahora habilitamos e inicializamos los componentes.

systemctl enable --now linstor-controller
systemctl start linstor-controller

En los demás equipos instalamos el componente de satélite.

apt install linstor-satellite linstor-client

Habilitamos el servicio y lo iniciamos.

systemctl enable --now linstor-satellite
systemctl start linstor-satellite

Desde el controller agregamos los equipos satélites.

linstor node create kube1 172.22.35.25
linstor node create kube2 172.22.35.26
linstor node create kube3 172.22.35.27

Esperamos unos minutos y ejecutamos:

linstor node list

Este comando nos mostrará la lista de nodos disponibles, será algo así:

Ya contamos con un clúster de Linstor pero aun no estamos presentando almacenamiento a este, procederemos a crear almacenamiento administrado por LVM, Linstor soporta ZFS, esta es una herramienta que nunca he usado en el pasado de manera seria así que prefiero LVM que tiene años disponible en las distribuciones Linux.

En cada máquina virtual para Kubernetes agregue dos discos, uno para el sistema operativo y otro para almacenamiento que ahora será usado en su totalidad con Linstor.

Lo primero es preparar el disco físico para ser usado en LVM.

pvcreate /dev/sdb

Luego creamos un volumen group (vg).

vgcreate kube /dev/sdb

He seleccionado kube para que sea el nombre del Volume Group.

Procederemos a crear un thin pool, esto nos permitirá crear volúmenes más grandes que el espacio físico del cual disponemos.

lvcreate -l 100%FREE --thinpool kube/lvmthinpool

Una vez realizados estos pasas en cada nodo que aportara almacenamiento al cluster, volvemos al controller para crear un storage-pool.

linstor storage-pool create lvmthin kube1 linstor-pool kube/lvmthinpool
linstor storage-pool create lvmthin kube2 linstor-pool kube/lvmthinpool
linstor storage-pool create lvmthin kube3 linstor-pool kube/lvmthinpool

validamos que nuestro storage-pool fue creado.

linstor storage-pool list

Debemos recibir lo siguiente:

Listo, ya contamos con una plataforma para provisionar almacenamiento a Kubernetes, lo interesante es que también podría provisionar almacenamiento a otras plataformas tales como Proxmox.

Kubernetes – que necesitamos?

Para habilitar que Kubernetes pueda usar almacenamiento proveniente de Linstor, debemos contar con el plugin CSI y crear StorageClass, recomiendo tener una versión de Kubernetes mínimo 1.13 para que todo funcione bien ya que ahí plugins que no están habilitados por defecto antes de esta versión. Al momento de crear los CRD estos fallaban con un mensaje que especificaba la falta de CSINodeInfo, actualizando RKE a 1.14.6 se resolvió.

Instalaremos todo lo necesario para usar Linstor usando esta línea la cual descargar la versión 0.7.2 del CSI y usando sed estamos cambian un valor de ejemplo por el controlador de Linstor que en mi caso es 172.22.35.25. Esto debe ser ejecutado en la misma maquina de donde administramos k8s.

curl https://raw.githubusercontent.com/LINBIT/linstor-csi/v0.7.0/examples/k8s/deploy/linstor-csi-1.14.yaml | sed "s/linstor-controller.example.com/172.22.35.25/g" | kubectl apply -f -

Podemos ver el avance del de la instalación con:

watch kubectl -n kube-system get all

Procederemos a crear un Storage Class usando este yaml

El número de réplicas debe ser el número de nodos de Kubernetes.

apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: linstor
provisioner: linstor.csi.linbit.com
parameters:
  autoPlace: "3"
  storagePool: "linstor-pool"

Para este punto ya podemos hacer solicitudes de volúmenes usando un PresistentVolumeClaim

En mi caso ya tenia varios yaml con requerimientos de pvc, aquí uno.

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  namespace: services
  name: adguard-config
spec:
  storageClassName: linstor
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
       storage: 2Gi

Podemos ver que el STATUS es Bound, esto quiere decir que satisfactoriamente Linstor asigno espacio a Kubernetes para este volumen.

Desde el punto de vista de Linstor usando

linstor volume list

Podemos ver lo siguiente:

Estos son todos los volúmenes que están siendo usados por contenedores en Kubernetes.

Listo!

Ya puedo usar el cluster de Kubernetes, bueno por la cantidad de volúmenes que se ven en la imagen se puede deducir que lo estoy usando. He movido varios servicios hacia el clúster y hasta ahora muy feliz con Kubernetes.

El próximo paso es los respaldos, para esto estaré usando Velero de Heptio/VMware.