- Slack pasó de su enfoque anterior de modificar continuamente EC2 de larga duración a un despliegue de reemplazo basado en AMI inmutables, aplicando una forma moderna de despliegue incluso a cargas de trabajo difíciles de migrar a contenedores
- Sobre la imagen base común slack-zero se apilan imágenes por servicio, y la configuración pesada se resuelve durante el horneado de imágenes, mientras que solo los secretos y metadatos por entorno se aplican al arrancar
- El orquestador de despliegue Gondola gestiona una AMI y artefactos versionados de Chef como una sola unidad de despliegue, y realiza despliegues graduales basados en métricas, detenciones y rollback automático
- Peekaboo ofrece casi en tiempo real el inventario completo de EC2, y The Reaper reemplaza instancias contaminadas o vencidas bajo límites de velocidad y mecanismos de pausa
- Aunque es eficaz para servicios de corta duración, las instancias de larga duración que no pueden reemplazarse rápido, como nodos de datos, GitHub Enterprise y Atlassian JIRA, requieren un método de parcheo y ejecutores de despliegue aparte
Límites del modelo de EC2 modificado de forma continua
- Slack transformó su antigua pila única de Chef en una estructura resiliente de múltiples pilas, e introdujo despliegues versionados de cookbook y procedimientos seguros de promoción, aumentando la confiabilidad y el control operativo sobre decenas de miles de instancias EC2
- El proceso relacionado puede verse en Advancing Our Chef Infrastructure
- Después introdujo entornos de producción segmentados, ejecuciones de Chef basadas en señales y mejores métodos de rollout, reduciendo mucho el alcance del impacto de fallas sin que los equipos tuvieran que reescribir sus cookbook
- En la etapa de Safety Without Disruption, obtuvo margen para mantener estable la plataforma legacy mientras planificaba la arquitectura futura
- Sin embargo, el modelo de seguir actualizando instancias de larga duración dificultaba los despliegues por servicio, hacía imposible evitar el drift de infraestructura y se volvía más complejo cuanto más había que coordinar cambios entre varias capas
- Los contenedores resolvieron parte del problema para algunas cargas de trabajo, pero no todos los sistemas podían migrarse fácilmente, así que hacía falta una plataforma que aplicara directamente a EC2 inmutabilidad, despliegues graduales y mecanismos automáticos de seguridad
El modelo operativo de EC2 que ofrece Shipyard
- Shipyard es la plataforma EC2 de próxima generación de Slack, que trata la infraestructura no como instancias para modificar continuamente, sino como artefactos desplegables
- Al combinar despliegues por servicio con sistemas de build y orquestación, aplica a las actualizaciones de EC2 el mismo nivel de seguridad y previsibilidad que una plataforma de despliegue de aplicaciones
-
Soporte para múltiples arquitecturas y sistemas operativos
- Soporta varias arquitecturas de CPU, incluyendo AMD64 y Graviton basado en ARM, y puede usar Ubuntu, RHEL y Amazon Linux
- Los equipos pueden elegir instancias y sistemas operativos según costo, rendimiento y compatibilidad sin tener que implementar una plataforma aparte
- Es especialmente adecuado para componentes de infraestructura difíciles de migrar a contenedores, nodos worker de Kubernetes y la pila de red de egress
-
Despliegues seguros basados en métricas
- Cada servicio se integra con Gondola para ejecutar rollouts graduales, incluyendo verificaciones automáticas de seguridad basadas en métricas
- Según las señales de salud del servicio, puede detener automáticamente el despliegue o hacer rollback automático a la última versión estable
-
Provisionamiento rápido y predecible
- Usa una estructura de imágenes en capas similar a la de los contenedores para construir imágenes por servicio sobre una imagen base dorada compartida
- Al reducir el trabajo que debe hacerse en tiempo de ejecución, las instancias arrancan de forma rápida y consistente en varias regiones
-
Gestión de configuración simplificada
- Antes, tareas programadas de Chef revisaban y reaplicaban periódicamente la configuración para devolver al estado deseado cambios manuales o inesperados
- En Shipyard, la configuración solo se aplica en etapas claras del ciclo de vida, como el horneado de imágenes y el provisionamiento inicial
- Las herramientas de gestión de configuración se usan principalmente para desplegar servicios, en lugar de modificar continuamente todo el sistema
- Con eso se reducen la carga en segundo plano y las sobrescrituras no deseadas, y como las instancias no siguen cambiando con el tiempo, es más fácil razonar sobre su comportamiento
-
Instancias con vida útil limitada
- A cada instancia se le asigna una vida útil limitada y se reemplaza automáticamente de forma periódica
- Eso reduce el tiempo en que posibles vulnerabilidades pueden causar problemas e impulsa a los equipos a reemplazar instancias en vez de modificarlas en ejecución
Inventario de Peekaboo y visibilidad de toda la flota
- Peekaboo es un sistema de inventario que, en lugar de depender de Chef Server, usa eventos de la nube y metadatos de instancias para mostrar casi en tiempo real el estado de la flota EC2
- También rastrea instancias desplegadas fuera de Shipyard, permitiendo ver toda la flota en un solo lugar
- Está construido con AWS EventBridge, OpenSearch y Lambda, y ofrece las siguientes interfaces
- UI para explorar la flota
- API para integración de sistemas
- CLI para verificaciones rápidas desde la línea de comandos
- Al centralizar la información de EC2, unifica la telemetría y los puntos de administración en todo el entorno
slack-zero, la imagen base dorada
- slack-zero es una imagen de máquina común creada por el Compute Platform Team y administrada en conjunto con los equipos de seguridad y monitoreo
- Es una base estandarizada y confiable que todos los servicios heredan, y sobre la que los equipos de servicio construyen su propio entorno de runtime
- La imagen incluye lo siguiente
- Línea base del sistema operativo y configuraciones de hardening de seguridad
- Configuración de red y de service discovery
- Agentes de monitoreo y seguridad
- Herramientas comunes y configuración base del sistema
- La imagen base se trata como un objetivo inmutable y efímero
- Cuando se necesitan parches de seguridad, actualizaciones de monitoreo o mejoras de red, se crea una nueva imagen slack-zero
- Las imágenes de servicio derivadas se vuelven a construir sobre la nueva base para heredar las correcciones
-
Por qué eligieron AWS Image Builder
- slack-zero se construye con AWS Image Builder en lugar del Packer anterior
- Las políticas de ciclo de vida limpian automáticamente las AMI antiguas y reducen costos de almacenamiento
- Cuando se genera una nueva imagen, se actualiza un parámetro de AWS Systems Manager (SSM) que apunta a la AMI más reciente por cuenta, y los pipelines de servicio lo leen para usar la base más reciente
- Cuando el horneado de imagen termina con éxito, EventBridge y Lambda inician automáticamente pipelines descendientes en las cuentas propietarias de los servicios
- Antes de publicar la AMI, se ejecutan pruebas de validación en instancias temporales para reducir el riesgo del rollout a producción
Horneado y provisionamiento de imágenes de servicio
- Cada equipo de servicio crea su propia AMI basada en slack-zero, heredando componentes comunes de la plataforma mientras mantiene control sobre su entorno de runtime
- El pipeline de imágenes de servicio define lo siguiente
- Software que se instalará
- Cómo se configurará el servicio
- El procedimiento de inicialización de instancias para ese servicio
- La mayor parte de la configuración se incluye en la imagen para mejorar la velocidad de ejecución, la consistencia y minimizar el drift de configuración
-
Separación de funciones en dos etapas
- En la etapa de horneado, se instalan paquetes y configuraciones comunes entre entornos para que la instancia llegue al arranque ya mayormente en un estado listo
- En la etapa de provisionamiento, al arrancar solo se aplican ajustes dependientes del entorno, como secretos, configuración por región y metadatos de despliegue
- Por lo general, solo se realizan tareas como colocar archivos de configuración, recuperar secretos e iniciar servicios
- Al mover tareas pesadas como la instalación de paquetes al horneado, las instancias pueden arrancar en segundos en lugar de minutos
- El inicio rápido es importante para eventos de escalado, despliegues secuenciales y reemplazo automático de instancias, y el provisionamiento mínimo reduce el drift que podría surgir durante la adaptación en runtime
Actualización de la flota centrada en reemplazo de AMI
- Los cambios se aplican creando una nueva AMI y haciéndola avanzar por el pipeline de despliegue, renovando la flota mediante reemplazo controlado en lugar de parchear instancias existentes
- Los Auto Scaling Group (ASG) usan AWS Instance Refresh, y las flotas de workers de Kubernetes usan Karpenter
- Los servicios con requisitos especiales de despliegue pueden agregar ejecutores separados, y Gondola unifica distintos patrones bajo una experiencia consistente de despliegue
-
Ruta de corrección de emergencia
- En emergencias, se pueden aplicar cambios limitados de configuración a instancias en ejecución, pero luego esas instancias deben reemplazarse mediante el pipeline de despliegue normal
- Las correcciones de emergencia se aplican ejecutando recipes de Chef seleccionadas mediante documentos predefinidos de AWS Systems Manager
- Una vez estabilizado el sistema, las instancias se rotan para volver al estado inmutable deseado
Despliegues graduales con Gondola
- Los pipelines de clientes pueden componerse de varias etapas ajustadas a los requisitos operativos y del servicio
- Cada etapa de Gondola representa una unidad de despliegue, como un ASG, un clúster de Kubernetes o un grupo de instancias EC2
- El Egress Team mantiene ASG separados de canary y producción en cada zona de disponibilidad, y ordena las etapas para que las actualizaciones fluyan secuencialmente
- Gondola monitorea métricas clave mientras actualiza cada etapa y, si detecta problemas, hace rollback automático para evitar la propagación de incidentes
-
Artefactos y ejecutores de despliegue
- El paquete de despliegue que crea Gondola se compone de dos partes
- La AMI que se desplegará en la flota
- El artefacto de Chef con recipes versionadas vinculadas a un commit de Git
- Ambos elementos se tratan como una sola unidad de despliegue, y cada etapa hace rollout mediante el ejecutor definido por el servicio
- En despliegues sobre ASG, el ejecutor actualiza el launch template con la nueva AMI y configuración
- El código de Chef se empaqueta en Amazon S3
- El bootstrapper integrado en las nuevas instancias obtiene el artefacto correcto y ejecuta las recipes correspondientes
- Usa metadatos de configuración para aplicar solo los ajustes adecuados a ese rol
- En flotas de workers de Kubernetes, el ejecutor entrega a Karpenter la AMI y los mismos metadatos de configuración, y los nodos también se inicializan del mismo modo
- Incluso al agregar ejecutores para despliegues especiales, se mantiene el enfoque de AMI, artefactos de configuración versionados y bootstrap basado en metadatos
- El paquete de despliegue que crea Gondola se compone de dos partes
Reparto de responsabilidades entre el equipo de plataforma y los equipos de servicio
- Los equipos de Compute, Security y Monitoring gestionan los componentes globales de infraestructura de la capa base, los parches de seguridad y la configuración obligatoria
- Los equipos de servicio construyen sobre esa base AMI con su propio software y configuraciones específicas del servicio
- Cuando el equipo de Compute despliega parches de seguridad, agentes de monitoreo o cambios de red, los equipos de servicio deben incorporar la imagen base actualizada en sus propias AMI
- Este modelo de responsabilidad compartida equilibra consistencia, seguridad y confiabilidad de la flota mientras mantiene la autonomía de cada servicio
Excepción de secretos en una inmutabilidad no total
- Aunque los paquetes y la configuración de las instancias de Shipyard quedan mayormente fijados durante el horneado, los secretos son la excepción
- El servicio Consul Template de cada instancia despliega nuevos secretos desde Vault sin reemplazar toda la flota
- Como credenciales y certificados pueden renovarse dinámicamente, Shipyard es una infraestructura semiinmutable donde solo quedan fijas las capas centrales del sistema y del servicio
- Así mantiene estabilidad y previsibilidad mientras permite actualizar secretos críticos de runtime cuando es necesario
La política de reemplazo de The Reaper
- The Reaper decide qué reemplazar a partir de dos tipos de entrada
- Señales de contaminación enviadas por sistemas externos, como herramientas de seguridad o eventos de AWS EC2, cuando una instancia se desvía del estado deseado
- Revisiones periódicas para verificar si la instancia ha estado ejecutándose más tiempo que su vida útil máxima permitida
- Si se cumple cualquiera de las condiciones, programa el reemplazo de la instancia según la política del servicio
- El acceso remoto manual se permite para emergencias, pero si alguien entra directamente a un nodo de nivel producción se emite una señal y la instancia queda marcada para reemplazo futuro
- Integrado con Peekaboo, rastrea la edad de las instancias en toda la flota, y los nodos que alcanzan su vida útil máxima siguen el mismo procedimiento normal de apagado y reemplazo
- A futuro, planean agregar conciencia de contexto para que solo los cambios significativos, como actualizaciones de software o drift de configuración, disparen reemplazos, evitando rotaciones innecesarias por operaciones de solo lectura o de bajo riesgo
-
Velocidad de reemplazo y control de emergencia
- Con límites de velocidad integrados, se define por servicio, región y zona de disponibilidad cuántas instancias pueden reemplazarse al mismo tiempo, evitando impactos repentinos de capacidad
- Con un mecanismo global de pausa llamado “big red button”, que coloca un objeto de control en S3, puede detenerse toda actividad de Reaper durante incidentes o periodos de alto riesgo
- Desde la CLI se gestionan límites de velocidad, verificación de configuración y activación o desactivación de la pausa global
- En situaciones break-glass que requieren investigación profunda, pueden usarse mecanismos de acceso controlado como certificados SSH de corta duración
Pruebas de infraestructura real con Ship Quick
- Ship Quick es un flujo de trabajo para desarrolladores que permite a equipos de plataforma y responsables de servicio ejecutar pruebas realistas de horneado y provisionamiento en infraestructura real antes de hacer merge de un pull request
- Los desarrolladores ejecutan comandos de CLI desde el repositorio de cookbook y definen los casos de prueba en archivos YAML
- Ship Quick procesa en este orden
- Empaqueta el cookbook y lo sube a S3
- Envía un mensaje de workflow a una cola
- Una instancia worker administrada por Longshoremen toma la tarea
- El worker se desacopla de un Auto Scaling Group y ejecuta el workflow de Chef
- Hace streaming de logs a la CLI y luego termina, aunque el desarrollador puede elegir mantenerlo para depuración
-
Flotas de workers por capa base
- Debido a la estructura de bootstrap, operan dos flotas separadas de workers
- La flota base de Ubuntu hornea y prueba la imagen base sobre una AMI limpia de Ubuntu, porque slack-zero no puede construirse sobre sí misma
- La flota slack-zero prueba cookbook de equipos de servicio que dependen de una slack-zero prehorneada
- Valida el provisionamiento sobre la misma base que producción
- Se actualiza continuamente con las imágenes más recientes para reflejar el entorno actual de producción
- Ambas flotas hacen auto scaling según la demanda
- Los equipos que crean imágenes en su propia cuenta de AWS pueden configurar una flota dedicada de workers y enviar ahí los trabajos de Ship Quick para mantener el aislamiento
Expansión hacia cargas de trabajo de larga duración
- Shipyard actualmente funciona de manera efectiva en servicios de corta duración y sigue incorporando equipos desde la plataforma EC2 legacy
- El siguiente desafío son las instancias de larga duración que no pueden rotarse rápidamente
- Nodos de datos de Slack
- Servicios singleton como GitHub Enterprise
- Instancias de tecnología de negocio de terceros como Atlassian JIRA
- Estas cargas de trabajo requieren métodos seguros de parcheo y actualización, además de políticas de ciclo de vida que The Reaper pueda manejar correctamente
- En colaboración con los equipos de servicio, están desarrollando un ejecutor de cargas de trabajo de larga duración para Gondola, y planean seguir mejorando herramientas, flujos de trabajo para desarrolladores y experiencia de despliegue a medida que crezca la adopción
- Más adelante abordarán por separado la API de Shipyard, los pipelines de imágenes, los flujos de trabajo para desarrolladores, los componentes del sistema de inventario y los problemas surgidos al escalar la plataforma
Aún no hay comentarios.