0

Kubernetes – Respaldando volúmenes y configuraciones de Kubernetes con Velero.

Kubernetes – Respaldando volúmenes y configuraciones de Kubernetes con Velero.

¿Otro post sobre respaldos?

Si, pero esta vez además de poder respaldar la data de un volumen, también podremos respaldar la información necesaria de un Deployment para ser recuperado o migrado mas adelante en caso de fallas o en una migración.

Velero

Anteriormente conocido como Heptio Ark, nos permite realizar respaldos tanto como de los volúmenes así también de los recursos en un cluster de Kubernetes. ¿Qué me permite hacer?

  • Respaldos de un cluster y restaurarlos en caso de perdidas.
  • Migración de un cluster a otro, sin importar que sea en premisa o en la nube.
  • Replicar un ambiente de producción a desarrollo o QA.

Instalación

Los requisitos para realizar una instalación de Velero son:

  • Acceso a un cluster de Kubernetes mayor a v1.10 con DNS y CNI habilitado.
  • kubectl instalado en la misma maquina donde se realizará la instalación.

Velero usa object Storage para almacenar los respaldos asociados a las tareas de backup, en mi caso estaré usando MinIO. Como en el caso anterior, no se mostrará la instalación de un servidor Minio.

Lo primero es que necesitamos la utilidad cli de velero para inicializar sus componentes en el cluster de Kubernetes.

https://github.com/vmware-tanzu/velero/releases/latest

Descargamos la última versión de dicha utilidad y la colocamos en nuestro path de ejecución.

Como aun no se han instalado los componentes de Velero en el cluster, tenemos un mensaje de error validando la versión que debería de estar en él.

Algo que tenemos que saber es que, para tener respaldos de volúmenes debemos inicializar Velero con soporte Restic, esto lo podemos indicar mientras lo inicializamos.

https://velero.io/docs/master/restic/

En el enlace anterior se puede encontrar información de esta integración y cuáles son sus limitantes.

¿Que nos está pidiendo la instalación de Velero?

–provider aws – Ya que Minio es una implementación del s3 de AWS necesitamos especificar este valor.

–plugins – al igual que el valor anterior, estamos usando una alternativa a s3.

–bucket – el nombre del bucket en Minio será velero.

–secret-file – un archivo con la información de login de Minio.

–use-volume-snapshots – hace falta investigar un poco más, pero entiendo que esto indica que si necesita hacer un respaldo de un volumen que no use la opción de snapshot proporcionada por el CSI.

–backup-location-config – información refernete a nuestro servidor Minio.

–use-restic – esto instalara un pod con restic para poder hacer respaldos de volúmenes.

 

Luego de ejecutar el comando de instalación, podemos validar que todo termino bien:

 

Uso de Velero en mi ambiente

En la implementación que he decido hacer, aunque velero fue instalado con soporte Restic, no estaré usando esa funcionalidad y solo realizare respaldos de los resources/recursos del cluster en caso de pérdida poder recrear todo lo que esta corriendo en el y restaurar desde Lonhorn+Minio.

velero backup create nxcloud-backup –selector app=nxcloud

Se le está instruyendo a velero que realice un respaldo de todo lo relacionado a la aplicación con el label app=nxcloud

Debemos recordar que solo está respaldando la información relacionada a configuraciones y no volúmenes.

Por el momento es suficiente y más adelante estaré probando las recuperaciones de Velero junto a longhorn.

 

0

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/

El backupstore puede ser un NFS o una implementación AWS S3 compatible, en mi caso he decidido probar con Minio que es la implementación OpenSource de S3 mas conocida. El servicio de Minio que estoy usando está instalado en mi servidor de unRAID usando Docker y provee alrededor de 7TB que pueden ser usados para respaldos. En este espacio no cubriré como montarse un servidor de Minio, la documentación de Longhorn tiene un pequeño ejemplo de como correr uno en k8s.

Una vez tenemos las credenciales, URL y el nombre del bucket de nuestro Minio, procederemos a crear un Kind:Secret con dicha información.

Minio-secret.yaml :

apiVersion: v1
kind: Secret
metadata:
  name: minio-secret
  namespace: longhorn-system
type: Opaque
data:
  AWS_ACCESS_KEY_ID: bG9uZ2hvcm4tdGVzdC1hY2Nlc3Mta2V5 #
  AWS_SECRET_ACCESS_KEY: bG9uZ2hvcm4tdGVzdC1zZWNyZXQta2V5
  AWS_ENDPOINTS: aHR0cDovL21pbmlvLXNlcnZpY2UuZGVmYXVsdDo5MDAw

https://kubernetes.io/docs/concepts/configuration/secret/#creating-a-secret-manually

Longhorn UI:

En el manager de Longhorn se debe completar la información en Settings->General->Backup Target

Se debe remplazar longhorn por el nombre del bucket creado en Minio, en mi caso se llama longhorn. Ya realizada esta configuración se puede acceder al área de Backup y no recibiremos mensaje de error.

Para crear respaldos recurrentes debemos hacerlo desde el Volumen que queremos respaldar, procedemos al final donde encontraremos:

Hacemos click en Edit:

Agregaremos un nuevo calendario de backup haciendo click en + New

Se habilitará una nueva sección y allí debemos asegurarnos de seleccionar Backup y no snapshot.

En este punto tenemos un respaldo que será creado a las 12:00AM todos los días y almacenara la información en nuestro Minio. Si deseamos cambiar el horario, podemos hacer click en el mismo:

Si entendemos Cron con facilidad, podemos llenar la casilla con la configuración que deseamos, si no, podemos hacer uso de Generate Cron el cual encontré un poco difícil de manipular.

Cuando estemos complacidos con nuestra configuración, hacemos click en Save.

Así de fácil tenemos respaldos con Longhorn.

Para validar que nuestros respaldos están configurados y ejecutándose, lo podemos validar en Volumen.

Se puede apreciar que tenemos tres respaldos agendados y que uno de ellos ya fue ejecutado hace una hora.

En Backups se pueden ver con más detalles estos respaldos, al hacer click en el nombre nos despliegue la cantidad de respaldos disponibles, tamaño y fecha de creación.

Estoy cubierto con la creación del respaldo, para hacer uso de uno de esos respaldos, usaremos la opción de Create Desaster Recovery Volume

Hacemos click en OK

Una vez completado:

Se puede ver que el Volumen fue colocado en el mismo Namespace que tiene asignado el Volumen respaldado, incluso nos dice el tiempo en el que esta copia de seguridad fue creada, así tenemos una idea de la data que estamos recuperando.

Aun me falta mucho por explorar con relación a recuperar la data, estaré investigando mas si existe una manera de solicitar un respaldo desde k8s para que este sea presentado a un Pod sin tener que intervenir desde el manager de Longhor.

0

Optimizando el uso de kubectl usando Krew!

Optimizando el uso de kubectl usando Krew!

Kubectl es una interfaz de línea de comandos para ejecutar comandos sobre despliegues clusterizados de Kubernetes. Esta interfaz es la manera estándar de comunicación con el clúster ya que permite realizar todo tipo de operaciones sobre el mismo. Desde desplegar servicios, pods o volúmenes hasta conseguir toda la información del clúster de Kubernetes. (fuente: Wikipedia)

Una vez que iniciamos el uso de Kubernetes, encontramos que las opciones que nos brinda kubectl son difíciles de recordar, por ejemplo, trabajar en un namespaces. Estar siempre indicando de cual namespace quiero ver los pods es tedioso y a la larga cansa.

Ahí es donde entran los plugins de kubectl que sirven para extender el uso de este CLI. Para sacar partido a esta plataforma de plugins podemos instalar krew.

Krew

Es una herramienta que hace fácil el uso de los plugins de kubectl, nos ayuda a buscar, instalar y actualizar plugins de una manera fácil.

https://github.com/kubernetes-sigs/krew

  • For kubectl users: Krew helps you find, install and manage kubectl plugins in a consistent way.
  • For plugin developers: Krew helps you package and distribute your plugins on multiple platforms and makes them discoverable.

Instalando Krew

https://krew.sigs.k8s.io/docs/user-guide/setup/install/

Antes de ejecutar el comando de instalación debemos asegurarnos de tener git instalado. Luego agregamos la ruta con los ejecutables necesarios a nuestro PATH.

export PATH=”${KREW_ROOT:-$HOME/.krew}/bin:$PATH

Probamos que todo funciona ejecutando kubectl krew

Actualmente sigo explorando que plugins mejoraran el uso de kubectl en mi flujo. Por le momento tengo instalado los siguientes.

En mi caso, los más usados son ns y ctx.

ns Switch between Kubernetes namespaces

ctx Switch between contexts in your kubeconfig

Hasta el momento se cuentan con mas de 90 plugins en krew-index.

https://github.com/kubernetes-sigs/krew-index/blob/master/plugins.md

Espero que otros le saquen partido a esto!

0

vEXPERT 2020!

 

Otro año mas formo parte de esta increíble comunidad de profesionales que aportan conocimiento sin importar las circunstancias, gracias a este programa de reconocimiento he conocido muchas personas de diferentes países, eso es lo mas importante en una comunidad.

Este año tenemos algo diferente en el vEXPERT, ya no soy el único vEXPERT en República Dominicana, tenemos un nuevo miembro en esta comunidad quien trabajo mucho para lograr se reconocido como fuente de aporte de información para la comunidad de virtualización de VMware.

Lamentablemente no cuenta con un blog al cual yo podría direccionar desde esta entrada, pero mas adelante veré si lo traigo al lado oscuro del blogging!

https://vexpert.vmware.com/directory/4923

0

Kubernetes – Explorando un Cluster de Kubernetes con VMware Octant.

Kubernetes – Explorando un Cluster de Kubernetes con VMware Octant.

VMware se ha montado en el ecosistema de Kubernetes, luego de adquirir Heptio, VMware recibió varias plataformas opensource tales como Velero y Sonobuoy.

Sin embargo, no solo estan las que llegaron via Heptio, un ejemplo notable es Octant, hace unos meses me tope con esta aplicacion en la cuenta de Github de Vmware mientras buscaba informacion sobre Tanzu.

https://github.com/vmware-tanzu/octant

Octant es una aplicacion para que los desarrolladores (¡¡también los administradores!!) entiendan como las aplicaciones son ejecutadas en Kubernetes. Con la información presentada en Octant se muestra de una manera mas clara la relacion entre Ingress, Services, Pod y Deployments. Desde hace un tiempo estoy usando Rancher, no planeo reemplazarlo ya que Octant esta pensado para ser ejecutado desde el desktop usando el kubeconfig local, desde mi punto de vista es una aplicación de diagnóstico.

Ya lo quiero, como lo consigo?

El proyecto provee varias formas de instalación, yo he usado una mezcla del empaquetado .deb y Docker.

Aquí esta el dockerfile que he usado, esta algo crudo y merece mejoras.

FROM debian:buster-slim
RUN apt-get update && apt-get install -y \
apt-transport-https \
ca-certificates \
curl

RUN mkdir /octant && cd /octant && curl -o octant.deb -L https://github.com/vmware-tanzu/octant/releases/download/v0.8.0/octant_0.8.0_Linux-64bit.deb && dpkg -i octant.deb

ENV OCTANT_LISTENER_ADDR=0.0.0.0:8080
ENV OCTANT_DISABLE_OPEN_BROWSER=true

VOLUME ["/root/.kube"]
ENTRYPOINT ["octant"]

 

Para crear la imagen de Octant hacemos lo siguiente:

docker build . -t aredan/octant

El resultado será una imagen en Docker con el nombre aredan/octant la cual podemos usar de la siguiente manera:

docker run -it -p 8080:8080 -v /home/ariel/.kube/:/root/.kube/ aredan/octant

Ya Podemos acceder al Dashboard de Octant, recordar que Octant utiliza el kubeconfig que este en el home directory especificado en el Docker run y que solo tendrá acceso al cluster asociado a ese config. Aun no existe manera de cargar configuraciones de conexión a cluster independientes al config del usuario.

http://localhost:8080

Partiendo de este punto lo siguiente seria entender como Octant encaja en el día a día de un administrador de Kubernetes o un desarrollador que quiere entender como una actualización afecta su aplicación corriendo en k8s.

Aquí un video de VMware Cloud Native Apps con bastante información acerca del proyecto.

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