Migrando de Amazon Linux a Bottlerocket mientras usamos Karpenter

Iniciamos una serie nueva: Píldoras técnicas sobre Platform engineering: más allá de lo que encuentras en la documentación. Vamos a compartir pequeños fragmentos de información sobre cómo resolvemos el equipo de platform engineering de Codurance algunas de las situaciones que nos encontramos en nuestro día a día, y nos encontraremos que las respuestas a menudo requieren ir un paso más allá de leer documentación. ¡Empezamos!

Hoy estábamos revisando una nueva actualización de Karpenter que hicimos en nuestros clústeres, que incluía una migración de las AMI de Amazon Linux a Bottlerocket.

Según define Amazon en su sitio web:

"Bottlerocket es un sistema operativo de código abierto basado en Linux que ha sido diseñado por Amazon Web Services específicamente para ejecutar contenedores. Bottlerocket incluye únicamente el software necesario para ejecutar contenedores y garantiza que el software subyacente permanezca seguro en todo momento." - Documentación de AWS

Nuestro objetivo principal es lograr ese nivel deseado de seguridad y optimización, por eso decidimos migrar de Amazon Linux a Bottlerocket.

Este cambio de configuración se realizará a través de Karpenter. Karpenter es una herramienta de aprovisionamiento de nodos de código abierto que automatiza el redimensionamiento del clúster según las demandas de carga de trabajo, aprovechando las capacidades nativas de Kubernetes y ofreciendo soporte para recursos de computación rentables como instancias spot. Uno de sus principales beneficios es la facilidad para configurar estos cambios en los nodos.

Por defecto, la configuración de AMI en Karpenter es AL2, por lo que ahora necesitamos especificar en nuestra nodeClass el nuevo tipo de AMI:

Screenshot 2024-02-21 at 16.20.22

Eso sería todo lo que necesitamos para realizar el cambio... ¡Siempre y cuando no tengamos especificaciones de almacenamiento!

En este caso, tenemos algunas especificaciones de EBS; por ejemplo, queríamos encriptar el volumen y aumentar el tamaño del disco para nuestros nodos de Kubernetes:

Screenshot 2024-02-22 at 10.21.32

Es importante tener en cuenta que Bottlerocket tiene dos volúmenes:

  • Un volumen de sistema operativo, utilizado para almacenar todos los archivos relacionados con el sistema operativo y las imágenes de arranque.
  • Un volumen de datos, utilizado para almacenar datos de contenedores, imágenes de contenedores, volúmenes efímeros...

Si no cambiamos nuestra configuración actual, el volumen del sistema operativo tendrá un tamaño de disco aumentado y estará encriptado, pero el volumen de datos tendrá la configuración predeterminada: tamaño de disco reducido y sin encriptación.

Como indica la documentación oficial de Karpenter, debemos tener en cuenta este caso especial y definir los dos bloques, configurando nuestro volumen de datos con la configuración que teníamos previamente para AL2:

Screenshot 2024-02-22 at 10.22.22

En caso de que tengamos alguna duda adicional, siempre podemos encontrar más información en la documentación oficial de Karpenter.

codurance_migracion_al_cloud