Aspectos generales

¿Qué es Bottlerocket?

Bottlerocket es un nuevo sistema operativo de código abierto basado en Linux que está diseñado específicamente para ejecutar contenedores. Gracias a Bottlerocket, es posible mejorar la disponibilidad de las implementaciones en contenedores y reducir los costos operativos mediante la automatización de las actualizaciones de la infraestructura de contenedores. Bottlerocket incluye únicamente el software esencial para ejecutar contenedores, lo que mejora el uso de los recursos, reduce la superficie expuesta a ataques de seguridad y disminuye los gastos generales de administración. También se integra con los orquestadores de contenedores (como Amazon EKS y Amazon ECS) para reducir aún más la carga administrativa y operativa mientras se actualizan los alojamientos de contenedores en un clúster. 

¿Cuáles son los beneficios de utilizar Bottlerocket?

a) Mayor tiempo de actividad con un menor costo operativo y menor complejidad de administración. Al incluir únicamente los componentes necesarios para ejecutar contenedores, Bottlerocket requiere menos recursos y tiempos de arranque, a la vez que la superficie expuesta a ataques de seguridad es menor en comparación con los sistemas operativos de uso general. Esta menor presencia ayuda a reducir los costos al disminuir el uso de recursos de almacenamiento, informáticos y de redes. El uso de primitivas de contenedor (en lugar de administradores de paquetes) para ejecutar software reduce los gastos generales de administración.

b) Mayor seguridad gracias a las actualizaciones automáticas del sistema operativo: las actualizaciones de Bottlerocket se aplican como una sola unidad que se puede revertir si es necesario, lo que elimina el riesgo de actualizaciones “fallidas” que pueden dejar el sistema en un estado inutilizable. Es común que se presenten errores de actualización en los sistemas operativos de uso general, debido a los fallos irrecuperables que se producen durante las actualizaciones paquete por paquete. En Bottlerocket, las actualizaciones de seguridad se pueden aplicar automáticamente tan pronto como estén disponibles de una manera mínimamente disruptiva y se pueden revertir si se producen errores.

c) Código abierto y disponibilidad universal: un modelo de desarrollo abierto permite a los clientes, a los socios y a todas las partes interesadas realizar cambios en el código y en el diseño de Bottlerocket.

d) Premium Support: el uso de las compilaciones de Bottlerocket proporcionadas por AWS en Amazon EC2 está cubierto por los mismos planes de soporte de AWS que también cubren los servicios de AWS, como Amazon EC2, Amazon EKS, Amazon ECR, etc.

¿En qué se diferencia Bottlerocket de Amazon Linux?

Amazon Linux es un sistema operativo de uso general para ejecutar una amplia gama de aplicaciones que se empaquetan con el administrador de paquetes RPM o contenedores. Amazon Linux está optimizado para ofrecer la posibilidad de configurar cada instancia según sea necesario para su carga de trabajo mediante herramientas tradicionales, como yum, ssh, tcpdump, netconf, etc. Bottlerocket, por otro lado, está diseñado específicamente para ejecutar contenedores y permite administrar un gran número de alojamientos de contenedores de forma idéntica y automatizada. En concreto, Bottlerocket se diferencia de Amazon Linux en los siguientes aspectos:

  • Bottlerocket no dispone de un administrador de paquetes y el software únicamente se puede ejecutar como contenedores. Las actualizaciones de Bottlerocket se aplican y se pueden revertir en un solo paso atómico, lo que reduce los errores de actualización.
  • El mecanismo principal para administrar los alojamientos de Bottlerocket es utilizar un orquestador de contenedores, como Amazon EKS. A diferencia de Amazon Linux, el inicio de sesión en instancias individuales de Bottlerocket está previsto como una operación poco frecuente destinada a la depuración avanzada y la resolución de problemas.

¿Se mantendrá la compatibilidad con las AMI optimizadas para EKS y ECS basadas en Amazon Linux 2?

Se mantendrá la compatibilidad con las actuales AMI optimizadas para EKS que se basan en Amazon Linux. Además, continuarán las actualizaciones de seguridad para estas. Consulte AMI de Amazon Linux 2 optimizada para EKS y AMI optimizada para ECS para obtener más información acerca de la duración de la compatibilidad.  

¿Cuáles son los componentes principales de Bottlerocket?

Los principales componentes de Bottlerocket son:

  • Sistema operativo mínimo que incluye el kernel de Linux (5.4), el software del sistema y containerd como tiempo de ejecución del contenedor.
  • Mecanismo de actualización atómica para aplicar y revertir las actualizaciones del sistema operativo en un solo paso. 
  • Integraciones con orquestadores de contenedores, como Amazon EKS para administrar y orquestar las actualizaciones.
  • “Contenedor de administración” que se puede ejecutar opcionalmente para la solución de problemas y la depuración de errores avanzadas.

¿Cómo se pueden aplicar las actualizaciones a Bottlerocket?

Las actualizaciones de Bottlerocket se descargan automáticamente de los repositorios preconfigurados de AWS cuando están disponibles. Es necesario reiniciar Bottlerocket para aplicar las actualizaciones. Esta acción se puede iniciar manualmente o ser administrada a través de un orquestador, como Amazon EKS. Debe seleccionar el mecanismo adecuado para gestionar los reinicios en función de la tolerancia de las aplicaciones a los reinicios y de las necesidades operativas. Si se trata de una aplicación sin estado y resistente a los reinicios, estos últimos se pueden realizar inmediatamente después de la descarga de las actualizaciones. Si ejecuta cargas de trabajo tradicionales con estado (por ejemplo, bases de datos, aplicaciones de línea de negocio de larga duración, etc.) en contenedores que no son resistentes a los reinicios, es necesario asegurarse de que el estado se conserva antes de los reinicios.

Los orquestadores, como Amazon EKS, pueden administrar los reinicios de Bottlerocket mediante el vaciado y el reinicio de los contenedores en todos los alojamientos para habilitar las actualizaciones continuas en un clúster y reducir las interrupciones. Las actualizaciones de Bottlerocket también se pueden revertir de forma segura en caso de que se produzcan errores mediante orquestadores compatibles o a través de una acción manual.

¿Cuáles son los pasos para implementar y operar Bottlerocket mediante Kubernetes?

Para implementar y mantener Bottlerocket, siga los siguientes pasos:

Paso 1: puede implementar Bottlerocket de la misma manera que cualquier otro sistema operativo en una máquina virtual. En AWS, puede implementar Bottlerocket en instancias EC2 desde la consola, la API y la CLI. Debe proporcionar los detalles de la configuración a través de los datos de usuario de cada instancia de Bottlerocket para inscribirse en un clúster de Amazon EKS.

Paso 2: para operar Bottlerocket con su orquestador, es necesario implementar un componente de integración en su clúster. El componente de integración permite al orquestador comenzar reinicios, revertir actualizaciones y reemplazar contenedores de una manera mínimamente disruptiva para las actualizaciones continuas.

Consulte la documentación de Bottlerocket para obtener información sobre los pasos para implementar y utilizar el “operador de actualización de Bottlerocket” en los clústeres de Amazon EKS.

¿Puedo utilizar Bottlerocket sin usar un orquestador de contenedores?

Sí, puede ejecutar Bottlerocket como un sistema operativo independiente sin un orquestador en su laptop o servidor para casos de uso de desarrollo y pruebas. Puede utilizar las funcionalidades del “contenedor de administración” para administrar y actualizar Bottlerocket.  

¿Qué plataformas informáticas y tipos de instancia EC2 admite Bottlerocket?

Las compilaciones de Bottlerocket de AWS son compatibles con las familias de instancias HVM y EC2 Bare Metal, a excepción de los tipos de instancia P, G, F e INF. Bottlerocket necesita al menos una CPU virtual y 512 MB de RAM. Bottlerocket no admite los tipos de instancia PV.

¿Cómo puedo empezar a utilizar Bottlerocket en AWS?

AWS proporciona una imagen de Amazon Machine Image (AMI) para Bottlerocket que puede utilizar para ejecutar en los tipos de instancia EC2 compatibles desde la consola de AWS, la CLI y el SDK. AWS proporcionará compilaciones de Bottlerocket preconfiguradas para su uso con EKS y ECS. Puede utilizar EKS para actualizar y administrar el sistema operativo con mínimas interrupciones sin necesidad de iniciar sesión en cada instancia del sistema operativo. El operador de Bottlerocket para Kubernetes permite realizar operaciones de administración del sistema operativo, como activar reinicios y revertir actualizaciones con mínimas interrupciones.

¿Cómo se ejecuta el software en Bottlerocket?

Puede ejecutar sus aplicaciones en contenedores, incluido el software ISV de terceros, en una instancia de Bottlerocket en ejecución mediante el orquestador de contenedores. También puede incluir su software y scripts de inicio en Bottlerocket durante la personalización de la imagen. Consulte la documentación sobre Bottlerocket para obtener más información.

¿Cuál es el precio de Bottlerocket?

Las compilaciones de Bottlerocket proporcionadas por AWS están disponibles sin costo alguno en todas las plataformas compatibles. Se aplican las tarifas estándar de Amazon EC2 para ejecutar instancias de Amazon EC2.

¿Disponen de un plan de desarrollo público?

¡Sí!

Control de versiones

¿Cómo se controlan las versiones de los lanzamientos de Bottlerocket?

Las compilaciones de Bottlerocket proporcionadas por AWS siguen un esquema de control de versiones semántico “principal.secundaria.parche”. Se publicarán versiones secundarias de Bottlerocket varias veces al año con cambios, como la compatibilidad con nuevas plataformas EC2, la compatibilidad con nuevos agentes orquestadores y la actualización de componentes de código abierto. El esquema de la versión indicará si las actualizaciones contienen cambios trascendentales.

Soporte técnico

¿Qué tipo de soporte técnico ofrece AWS para Bottlerocket?

Las compilaciones de Bottlerocket proporcionadas por AWS recibirán actualizaciones de seguridad y correcciones de errores. Además, están cubiertas por los planes de soporte técnico de AWS. El periodo de soporte técnico para una determinada compilación varía en función de la versión del orquestador de contenedores que se utilice. Las compilaciones de Bottlerocket quedarán obsoletas cuando la versión del orquestador correspondiente quede obsoleta. Por ejemplo, ya no admitimos aws-k8s-1.15, que es la compilación de Bottlerocket para Kubernetes 1.15. Esto se debe a que Kubernetes 1.15 ya no cuenta con compatibilidad ascendente. Recomendamos a los clientes que sustituyan los nodos aws-k8s-1.15 por una compilación más reciente compatible con el clúster.

Además, la comunidad ofrece soporte para Bottlerocket en GitHub, donde se pueden publicar preguntas, solicitar características y reportar errores. La información sobre los lanzamientos y las correcciones de las vulneraciones y exposiciones comunes (CVE) se publicará en el registro de cambios de Bottlerocket.

Actualizaciones

¿Qué tipo de actualizaciones existen para Bottlerocket?

AWS proporciona actualizaciones previamente probadas para Bottlerocket que se aplican en un solo paso. Estas actualizaciones también se pueden revertir en un solo paso a un estado correcto conocido. Como resultado, Bottlerocket evita las actualizaciones “fallidas” que pueden provocar que el sistema quede inservible debido a estados incoherentes que necesitan una reparación manual. Con las actualizaciones atómicas de un solo paso, la complejidad es menor y se reducen los errores en las actualizaciones.

¿Cómo se pueden aplicar las actualizaciones a Bottlerocket?

Las actualizaciones de las compilaciones de Bottlerocket proporcionadas por AWS se descargan automáticamente de los repositorios preconfigurados de AWS cuando están disponibles. Es necesario reiniciar Bottlerocket para aplicar las actualizaciones. Esta acción se puede iniciar manualmente o ser administrada a través de un orquestador, como Amazon EKS. Debe seleccionar el mecanismo adecuado para gestionar los reinicios en función de la tolerancia de las aplicaciones a los reinicios y de las necesidades operativas. Si se trata de una aplicación sin estado y resistente a los reinicios, estos últimos se pueden realizar inmediatamente después de la descarga de las actualizaciones. Si ejecuta cargas de trabajo tradicionales con estado (por ejemplo, bases de datos, aplicaciones de línea de negocio de larga duración, etc.) en contenedores que no son resistentes a los reinicios, es necesario asegurarse de que el estado se conserva antes de los reinicios.

Los reinicios de los contenedores se pueden administrar mediante orquestadores, como Amazon EKS, que vacían y reinician los contenedores en los alojamientos para habilitar las actualizaciones continuas en un clúster y así reducir las interrupciones. De forma predeterminada, Bottlerocket se actualizará automáticamente a la versión segura más reciente al arrancar. Las actualizaciones de Bottlerocket también se pueden revertir de forma segura en caso de que se produzcan errores mediante orquestadores compatibles o a través de una acción manual.

¿Cómo contribuye Bottlerocket a garantizar que las actualizaciones causen la menor interrupción posible?

Las integraciones con orquestadores como Amazon EKS ayudan a que las actualizaciones de Bottlerocket causen la menor interrupción posible. Durante el proceso de actualización, el orquestador vacía los contenedores de los alojamientos que se actualizan y los coloca en otros alojamientos vacíos del clúster. El orquestador también revierte a los alojamientos a la versión anterior de Bottlerocket si las actualizaciones fallan.

Compatibilidad y migración

¿Qué imágenes de contenedores puedo ejecutar en Bottlerocket?

Bottlerocket puede ejecutar todas las imágenes de contenedores que cumplan con la especificación del formato de imagen de la iniciativa de contenedores abiertos (OCI) y las imágenes Docker.

¿Puedo trasladar los contenedores que se ejecutan en Amazon Linux 2 a Bottlerocket?

Sí, puede trasladar los contenedores entre Amazon Linux 2 y Bottlerocket sin modificaciones.

¿Cuándo no se debe utilizar Bottlerocket?

Si los flujos de trabajo operativos para ejecutar contenedores implican la instalación de software en el sistema operativo anfitrión con yum, el acceso directo por ssh a las instancias, la personalización de cada instancia individualmente o la ejecución de software ISV de terceros que no está en contenedores (por ejemplo, agentes para el registro y monitoreo), Amazon Linux 2 puede ser una mejor opción. Bottlerocket está optimizado para ejecutar y administrar grandes implementaciones en contenedores y no permite que se realicen fácilmente muchas de estas actividades.

Solución de problemas y seguridad

¿Cómo se depuran los problemas con Bottlerocket?

Puede ejecutar un “contenedor de administración” mediante la API de Bottlerocket (invocada a través de los datos del usuario o AWS Systems Manager) y, a continuación, iniciar sesión con SSH para la depuración avanzada y la resolución de problemas con privilegios elevados. AWS proporciona el contenedor de administración que permite instalar y utilizar herramientas de depuración, como sosreport, traceroute, strace y tcpdump. Se pretende que iniciar la sesión en una instancia individual de Bottlerocket sea una operación poco frecuente para la depuración y resolución de problemas avanzadas.

¿En qué consiste el contenedor de administración?

Un contenedor de administración es una imagen de contenedor de Amazon Linux que contiene funcionalidades para la resolución de problemas y la depuración de Bottlerocket y se ejecuta con privilegios elevados. La ejecución del contenedor de herramientas se puede iniciar a través de los datos del usuario o de las API de Bottlerocket.

¿Qué características de aislamiento y seguridad de los contenedores ofrece Bottlerocket?

Bottlerocket habilita las actualizaciones automáticas de seguridad y reduce la exposición a los ataques de seguridad gracias a que incluye únicamente el software esencial para alojar los contenedores. Bottlerocket utiliza grupos de control de contenedores (cgroups) y espacios de nombres de kernel para el aislamiento entre contenedores. También incluye Security-Enhanced Linux (SELinux) en modo impositivo y seccomp. eBPF en el kernel reduce la necesidad de módulos de kernel para muchas operaciones del sistema de bajo nivel al proporcionar un marco de rastreo de baja sobrecarga para rastrear la E/S, las operaciones del sistema de archivos, el uso de la CPU, la detección de intrusiones y la resolución de problemas. Bottlerocket utiliza con device-mapper-verity (dm-verity), una característica del kernel de Linux que verifica la integridad para ayudar a prevenir los encubridores que pueden mantener los privilegios de raíz.

Código abierto y marcas comerciales

¿En qué consiste la licencia de código abierto de Bottlerocket?

El código de Bottlerocket está bajo la licencia Apache 2.0 O MIT. Amazon escribió su Bottlerocket en Rust, de modo que optamos por una licencia que se adapta fácilmente a esa comunidad. El código de terceros subyacente, como el kernel de Linux, continúa sujeto a su licencia original.

¿Cómo se pueden visualizar y aportar cambios en el código fuente de Bottlerocket?

Bottlerocket es un proyecto de código abierto alojado en GitHub. Los documentos de diseño, el código, las herramientas de compilación, las pruebas y la documentación se alojarán en GitHub. Utilizaremos los sistemas de GitHub de seguimiento de errores y características para la administración del proyecto. Puede ver el código fuente de Bottlerocket y contribuir a este mediante los flujos de trabajo estándar de GitHub.

¿Cómo puedo crear compilaciones personalizadas de Bottlerocket que incluyan mis propios cambios?

Puede hacer una copia del repositorio de GitHub, hacer los cambios y seguir nuestra guía de compilación.

¿Es posible crear y redistribuir mis propias compilaciones de Bottlerocket?

Sí. Si compila Bottlerocket a partir de un código fuente no modificado y redistribuye los resultados, puede utilizar “Bottlerocket” únicamente si queda claro, tanto en el nombre de la distribución como en el contenido asociado a esta, que su distribución es su compilación de Bottlerocket de Amazon y no la compilación oficial. Además, debe identificar la confirmación a partir de la cual se compiló, incluida la fecha de confirmación.

¿Cómo puedo utilizar las marcas comerciales de Bottlerocket para referirme a mi propia versión de Bottlerocket de Amazon que he adaptado para un orquestador de contenedores diferente?

Si modifica Bottlerocket de Amazon para que funcione con un orquestador de contenedores diferente, puede utilizar “Bottlerocket Remix” para referirse a su versión de acuerdo con las directrices de la política. Si cuenta con los derechos para utilizar las marcas comerciales de ese orquestador de contenedores de esta manera, puede añadir el nombre de ese orquestador de contenedores a “Bottlerocket Remix”.

¿Qué cambios debo realizar en el sistema operativo de una versión modificada de Bottlerocket para cumplir con esta política?

Debe modificar el archivo os-release para utilizar su nombre “Bottlerocket Remix” o para eliminar las marcas comerciales de Bottlerocket. Para ello, puede modificar tanto packages/release/release.spec como tools/rpm2img. Los nombres de la raíz del sistema (/x86_64-bottlerocket-linux-gnu/sys-root), las etiquetas de las particiones, las rutas de los directorios y las descripciones de los archivos de servicio no se tienen que cambiar para cumplir con esta política.