El documento habla sobre las promesas de Kubernetes y algunas experiencias reales que muestran que no siempre es fácil cumplir esas promesas. Se describe un caso donde un cliente instaló Kubernetes de forma incorrecta, lo que causó problemas graves de rendimiento. También se discuten otros desafíos como especificar adecuadamente los recursos requeridos y el escalamiento automático. El mensaje principal es que Kubernetes requiere un uso adecuado para aprovechar realmente sus beneficios.
2. Sobre Domingo
• Twitter @domix
• Parte del equipo organizador de Java México (JVM Group)
• Responsable del canal de YouTube http://bit.ly/yt-javamexico
• Fundador del capitulo de la CNCF en México
• https://cloudnative.mx/
• https://cloudnative.mx/podcast/
• Cofundador y Consejero https://www.meetup.com/Cloud-Native-Guadalajara/
• Java Champion
• Autoempleado en https://circulosiete.com/
• https://www.youtube.com/Coderdog
3.
4. Kubernetes
• Kubernetes es una plataforma Open Source de calidad productiva que
organiza la colocación (scheduling) y la ejecución de contenedores de
aplicaciones dentro y a través de clústers de computadoras.
• Kubernetes coordina un grupo de computadoras de alta disponibilidad
que están conectadas para trabajar como una sola unidad.
• Kubernetes automatiza la distribución y planificación (scheduling) de
contenedores de aplicaciones en un clúster de una manera más eficiente.
7. Funcionalidades
• Controlar el consumo de recursos por aplicación o equipo
• Distribución uniforme de la carga de aplicaciones en la infraestructura
• Balanceo de carga automático en las diferentes instancias (réplicas) de una aplicación
• Monitorear el consumo de recursos y los límites de recursos para evitar automáticamente que las
aplicaciones consuman demasiados recursos y reinicio de aplicaciones
• Mover una instancia de aplicación de un host a otro si hay una escasez de recursos en un host, o
si el host muere
• Aprovechar automáticamente recursos adicionales disponibles cuando se agrega un nuevo host
al clúster
• Realizar fácilmente despliegues y rollbacks
8. Promesas
• Kubernetes te ayuda a moverte más rápido
• Kubernetes es rentable
• Kubernetes es agnóstico de la nube
• Los proveedores de la nube administran Kubernetes por nosotros
• ¡Ejecutar aplicaciones nunca fue tan sencillo!
11. Una historia verdadera
• Recibo una llamada de un potencial cliente.
• Tiene un problema con su cluster de Kubernetes instalado On Premises
• Necesita una solución inmediata
• El core business de su cliente principal se ejecuta ahí.
• Empiezo a hacerle unas preguntas sencillas.
12. • ¿Cuál es el problema?
• La aplicación no responde, se esta ejecutando el contenedor pero pareciera que no recibe trafico.
• ¿Cuantos nodos hay en el Control Plane?
• ¿eh?… este… ¿que es eso?, oh espera, me dicen que son 4 master
• ¿Cuantos nodos worker tienen?
• Tenemos 4
• OK, solo para confirmar ¿Tu cluster completo tiene 8 VMs en total?
• …
• Son entonces 8 máquinas, ¿cierto?
• No. Son 4 en total…..
13.
14. Problema 1
• GRAVE
• ¡¡¡Instalaron todos los componentes tanto del Control Plane como de los
worker nodes en todas las máquinas!!!
• No hay separación de responsabilidades.
15. Problema 2
• El control plane tiene un número par de miembros
• En muchos escenarios esto no representa un problema. El problema
puede presentarse cuando los procesos de etcd se ejecutan en las VMs
del Control Plane.
• etcd NO debe ejecutarse en nodos pares
18. Algoritmo de consenso Raft
• https://raft.github.io/
• Pueden ver una explicación hecha por Jessica Barbosa en el Meetup de
Cloud Native MX de Octubre de 2018
• https://www.youtube.com/watch?v=3GdCkBNrHyI
20. iptables
• Benditas, iptables.
• Kubernetes usa iptables para controlar las
conexiones de red entre pods (y entre nodos),
manejando muchas de las reglas de red y
reenvío de puertos. De esta manera, los clientes
no necesitan hacer un seguimiento de las
direcciones IP para conectarse a los servicios
de Kubernetes. Además, la asignación de
puertos se simplifica enormemente (y se elimina
principalmente) ya que cada pod tiene su
propia dirección IP y su contenedor puede
escuchar en su puerto nativo.
24. • ¿Podemos limpiar las reglas de iptables? El Kube proxy las generará
nuevamente.
• No, la gente de seguridad no me lo permitirá.
• OK, mientras otra pregunta
• Si claro
• ¿Cuántas aplicaciones están corriendo?
• Solo una. Es un sitio web de Wordpress empaquetado como contenedor..
30. Contexto
• Meses atrás instale varios clusters con un cliente a “mano”, en dos centros
de datos.
• https://github.com/kelseyhightower/kubernetes-the-hard-way
• Ademas apoye en la implementación de una arquitectura de Microservicios.
• En producción operando y atendiendo a millones de ciudadanos, toda la
aplicación presentaba problemas graves de performance.
• El culpable. Yo. Quien más.
31. Desarrollo
• El primer día a primera hora. Junta. Casi 2 horas de regaños y de
predicciones del futuro (#eufenismo)
• Ya sabiendo un poco del problema….
32.
33. Datos antes que acciones
• Su cluster no tenia ningún tipo de monitoreo.
• Por meses habían intentado de todo.
• Cambios al código
• Desplegar todo de 0
• Reinstalaron cluster
• Recrearon VMs
38. Identificación del problema
• Tiempo de escritura de etcd lento.
• etcd elegia lider a cada rato.
• Cuando no hay líder electo, las escrituras se rechazan.
• Todas las operaciones del cluster, estaban siendo afectadas.
• Realice pruebas de “stress” al DD para descartar problemas con el cluster de
etcd
• Obtuve escrituras de 150 KB por segundo!!!! No era etcd, no era el cluster de
k8s.
41. “Solución”
• Escale el problema a infraestructura al día siguiente (una vez que me había asegurado
otra vez).
• Durante días no aceptaron mi “issue”.
• Debido a mi insistencia, logre que el operador de la infraestructura me mostrará el
dashboard del monitoreo de su Hypervisor con la solución de almacenamiento
(Hiperconvergente)
• En un glorioso diagrama de barras era evidente los altísimos tiempos de escritura de su
hardware.
• ¡¡¡Nadie lo había notado!!!!
• Infra llevo ese problema al proveedor. Mi trabajo termino por ese día… ¿O no?
50. Promesas
• Kubernetes te ayuda a moverte más rápido
• Kubernetes es rentable
• Kubernetes es agnóstico de la nube
• Los proveedores de la nube administran Kubernetes por nosotros
• ¡Ejecutar aplicaciones nunca fue tan sencillo!
52. Funcionalidades
• Controlar el consumo de recursos por aplicación o equipo
• Distribución uniforme de la carga de aplicaciones en la infraestructura
• Balanceo de carga automático en las diferentes instancias (réplicas) de una aplicación
• Monitorear el consumo de recursos y los límites de recursos para evitar automáticamente que las
aplicaciones consuman demasiados recursos y reinicio de aplicaciones
• Mover una instancia de aplicación de un host a otro si hay una escasez de recursos en un host, o
si el host muere
• Aprovechar automáticamente recursos adicionales disponibles cuando se agrega un nuevo host
al clúster
• Realizar fácilmente despliegues y rollbacks
53. Escalamiento
• Kubernetes no puede escalar si no puede gestionar bien los recursos.
• ¿Estás especificando adecuadamente las cuotas de recursos en tus
pods?