Kubernetes historias de éxito en producción. Parte 10: Reddit

La semana pasada, se anunció que a partir de ahora todos los nuevos servicios de Reddit se lanzarán en producción en una infraestructura basada en clústeres de Kubernetes. Este es un hito importante en la ruta de migración a K8 de uno de los recursos en línea más populares, y así es como llegó a ...



Likbez : Hasta la fecha, Reddit se encuentra en los 20 principales sitios mundiales (y el número 6 en los Estados Unidos) según Alexa . Esta comunidad en línea de origen estadounidense comprende más de 400 millones de usuarios activos (en un mes), 12 millones de publicaciones y 2 mil millones de votos por día.

Acerca de por qué y cómo los ingenieros de Reddit llegaron a Kubernetes, en diciembre pasado en KubeCon 2018 ( presentación + video ) Greg Taylor, jefe del Grupo de Ingeniería de Lanzamiento de Project Engineering, Departamento de Infraestructura.



¿Por qué viniste a Kubernetes?


A principios de 2016, el servicio, implementado como una aplicación monolítica , tenía solo unos 20 ingenieros que formaron 3 equipos, uno de los cuales es una especie de héroe de la historia: el equipo de Infraestructura. Sin embargo, este año ha traído grandes cambios: al final del año, más de 60 ingenieros trabajaron en la compañía (y para fines de 2018, su número había aumentado a 200, es decir, en solo 3 años, hubo un aumento de 10 veces en el personal ).

Tales tasas de crecimiento rápido ponen en la agenda la irrelevancia (ineficiencia) de la arquitectura de aplicación monolítica, ya que la introducción de numerosos cambios en sus diversos componentes (por diferentes equipos) se ha vuelto muy difícil. Tras reunirse para resolver el problema y considerar numerosas opciones, los ingenieros eligieron el camino de la arquitectura orientada a servicios (SOA) .

Al cambiar a una arquitectura de servicio en lugar de un gran monolito, Reddit se encontró con un nuevo problema. El equipo de infraestructura se ha convertido en un cuello de botella en las actividades de los desarrolladores que resultaron ser muy dependientes de él en diferentes etapas: durante la inicialización de los servicios, durante su operación continua, durante la depuración y la resolución de problemas de rendimiento. Como una solución rápida para el problema, la compañía formó más equipos autosuficientes llamados "orientados a la infraestructura": los participantes de dichos equipos tenían las habilidades necesarias en el campo de la operación de la infraestructura, lo que les permitió superar muchas dificultades sin esperar las acciones del equipo de Infraestructura, que estaba sobrecargado con una acumulación interminable de numerosos desarrolladores.

Sin embargo, todavía era una solución temporal y la práctica demostró que no todos querían operar la pila completa para su servicio:



¿Cómo se resolvió esta situación? La organización introdujo el concepto de propietarios de servicios (propietarios de servicios) , que podrían desarrollar su servicio desde el principio hasta el final, implementar el servicio temprano y, a menudo, operar el servicio (incluidos los problemas de disponibilidad y rendimiento). ¿Pero cómo lograr esto?

En lugar de esperar que equipos de ingenieros con habilidades impecables combinen servicios de docenas de ladrillos, para muchos de los cuales pueden no tener conocimiento, debe ofrecerles un camino bien pensado y predefinido para llevar los servicios a la producción, lo que afecta un mínimo de tecnología. Esto evitará que los ingenieros tengan que aprender numerosas tecnologías y herramientas nuevas, que pueden ser muchas:



"Para poner en práctica esta idea, necesitábamos" agrupar "nuestro conocimiento, proceso, mejores prácticas y mucho más en una forma más accesible".

InfreRedd - Kubernetes en Reddit


Así es como surgió InfreRedd, el producto de infraestructura interna de Reddit, basado en Kubernetes.

¿Cómo se cumplieron las tres necesidades de los propietarios de servicios especificadas en su definición?

1. Desarrollo


El estándar para el desarrollo en la organización no indica la elección de un lenguaje o marco específico, sino que establece la "forma" general del servicio, al que debe corresponder. El estándar, una especificación de servicio independiente del lenguaje de programación, incluye la definición de un protocolo RPC, trabajando con secretos, devolviendo métricas, trazabilidad y el formato para emitir registros. Un ejemplo de la implementación de dicha especificación en Python se puede encontrar en el proyecto de placa base , que, sin embargo, es poco probable que sea útil para alguien para un uso real, pero puede ser una inspiración.

Además, se crearon materiales para un inicio rápido al escribir nuevos servicios: códigos de código para diferentes idiomas (Python, Go, Node), así como Dockerfile, configuraciones para CI e incluso gráficos Helm.

Para ayudar con el desarrollo local, la elección de los ingenieros de Reddit recayó en el producto de Google: Skaffold , que ofrece a los desarrolladores un ciclo de lectura completa editar → reconstruir → actualizar, que:

  • no requiere un conocimiento profundo de Kubernetes;
  • lo más cerca posible de la producción;
  • le permite usar gráficos / imágenes estándar;
  • y, a diferencia del Minikube que se usaba antes, trabajar con Skaffold no requiere grandes recursos de las computadoras portátiles que funcionan (porque la implementación se realiza en clústeres remotos).

2. Implementar


Reddit utiliza la plataforma de entrega continua Drone para ejecutar pruebas y construir artefactos (generalmente imágenes de Docker).

Kubernetes usó originalmente el complemento Helm para Drone para la implementación, pero rápidamente los ingenieros llegaron a la conclusión de que Helm no estaba contento con él porque querían un sistema que "comprenda mejor el estado de los objetos creados o actualizados", y una mayor automatización de los procesos de implementación condujo a La necesidad de una solución que pueda atraer a las herramientas utilizadas y pausar la reversión en caso de fallas o problemas de rendimiento.

Como resultado, Spinnaker fue elegido para organizar el despliegue en Kubernetes. Para él, se crearon plantillas para tuberías típicas (en Jsonnet). A continuación, se generan gráficos de Helm, que Spinnaker ya ha desplegado en Kubernetes. Los usuarios reciben información sobre el progreso de la implementación y ayuda para el diagnóstico en caso de cualquier problema. Así es como se ve un proceso de implementación típico en etapas / producción de una manera muy general:



3. Operación


En primer lugar, ¿cómo se comparten las obligaciones de los propietarios de servicios y el equipo de infraestructura?

  • Propietarios de servicios : entiendan los conceptos básicos de Kubernetes, implementen y operen sus servicios;
  • Equipo de infraestructura : respalde la operatividad (despliegue, soporte, escalado) de los clústeres de Kubernetes, brindándoles todos los recursos necesarios, y también asesore a los ingenieros de la organización en el diseño de servicios confiables, productivos y tolerantes a fallas (en particular, las sesiones de capacitación se llevan a cabo regularmente, los registros de los cuales luego se distribuyen en toda la empresa).

Los propietarios del servicio están limitados en sus derechos. Sin embargo, para obtener acceso a la producción (para diagnosticar un problema), es posible solicitar (a través de una utilidad de consola especial) un token temporal que les otorgue todos los derechos sobre sus espacios de nombres.

Otro punto importante de operación es la minimización del daño potencial que puede provenir de diferentes fuentes. Esto es lo que hace Reddit para esto:



Para facilitar la vida de los ingenieros involucrados en la operación, también están involucrados los siguientes:


Estado de Kubernetes en Reddit


Las estadísticas generales sobre la infraestructura de Kubernetes en diciembre del año pasado fueron las siguientes:

  • 7 grupos (se agregarán de 3 a 6 nuevos en los próximos meses);
  • de un tercio a la mitad de todos los equipos de ingeniería interactúan con Kubernetes;
  • Cerca de 20 servicios de Reddit están en producción con K8;
  • en un día hábil, se llevan a cabo 10-20 implementaciones de estos servicios en K8.

La disponibilidad de InfreRedd con Kubernetes para toda la organización se planificó para el primer trimestre de 2019, lo que implicó el despliegue de cualquier nuevo servicio en producción atendido por Kubernetes. (En ese momento, esto estaba sucediendo para aproximadamente 3 de 4 nuevos servicios).

Como se mencionó al comienzo del artículo, este hito se alcanzó con éxito la semana pasada:



Otros articulos del ciclo


Source: https://habr.com/ru/post/441754/


All Articles