Core IntegrateEntrega continua
03 · Despliegue · 12 min

Llevar contenedores a producción sin sorpresas

Funciona en mi máquina dejó de ser el problema. Ahora el problema es que funciona en el contenedor y no en producción.

Redacción de Core IntegrateCómo escribimos Actualizado el
Persona supervisando el estado de una plataforma de despliegue

Lo que cambia al salir del portátil

Un contenedor que funciona en desarrollo puede fallar en producción por razones que no tienen que ver con el código: límites de memoria, permisos, variables que no existen, un sistema de ficheros de sólo lectura, o simplemente que ahora hay tres copias en lugar de una.

La mayoría de estas diferencias se pueden anticipar, y casi ninguna se descubre probando en local.

Lo que hay que definir antes

Elementos que rara vez se configuran a tiempo
ElementoQué ocurre si falta
Comprobación de vidaUn proceso colgado sigue recibiendo tráfico
Comprobación de disponibilidadSe envía tráfico antes de estar listo
Límite de memoriaUn contenedor consume el nodo entero
Límite de CPUUna tarea pesada degrada al resto
Parada ordenadaPeticiones cortadas en cada despliegue
Registro a la salida estándarLos registros se pierden con el contenedor

Dos comprobaciones que no son la misma

La comprobación de vida responde a «¿sigue funcionando?»; si falla, el contenedor se reinicia. La de disponibilidad responde a «¿puede atender tráfico ahora?»; si falla, se le deja de enviar peticiones pero no se reinicia.

Confundirlas produce el fallo clásico: un servicio que tarda en arrancar se reinicia en bucle porque la comprobación de vida se activa antes de que esté listo.

Secretos

Las credenciales no van en la imagen ni en el repositorio. Se inyectan en el despliegue desde un almacén de secretos, y conviene comprobar que no aparecen en los registros, que es donde reaparecen con más frecuencia.

Imágenes

  1. Fijar la versión base, no usar la etiqueta más reciente: hace los despliegues irreproducibles.
  2. Reconstruir periódicamente para incorporar parches de seguridad de la base.
  3. No ejecutar como superusuario salvo que haya una razón concreta.
  4. Mantenerla pequeña: menos superficie y despliegues más rápidos.
  5. Etiquetar con el identificador del commit, para saber siempre qué hay desplegado.
Seguir

Los demás textos