Diese Präsentation wurde erfolgreich gemeldet.
Wir verwenden Ihre LinkedIn Profilangaben und Informationen zu Ihren Aktivitäten, um Anzeigen zu personalisieren und Ihnen relevantere Inhalte anzuzeigen. Sie können Ihre Anzeigeneinstellungen jederzeit ändern.

Java Dev Day 2019 No kuberneteen por convivir

Kubernetes es una plataforma demasiado popular en este momento, todo mundo la usa o quiere usarla, pero es muy importante conocer las consideraciones y malos usos en los que algunos equipos caen al ejecutar aplicaciones Java.

  • Als Erste(r) kommentieren

Java Dev Day 2019 No kuberneteen por convivir

  1. 1. No Kuberneteen por convivir O de cuando es más importante el hype
  2. 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. 3. 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.
  4. 4. Componentes • Control Plane (master) • etcd • API server • Controller Manager • Scheduler • Nodos (Worker node) • Kubelet • Kube proxy • Network overlay • Container Engine
  5. 5. 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
  6. 6. 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!
  7. 7. ¿Será cierto?
  8. 8. Viajemos a la realidad
  9. 9. 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.
  10. 10. • ¿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…..
  11. 11. 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.
  12. 12. 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
  13. 13. https://github.com/etcd-io/etcd/blob/master/Documentation/v2/admin_guide.md https://github.com/etcd-io/etcd/blob/master/Documentation/v2/admin_guide.md
  14. 14. https://github.com/bmizerany/etcd-team/blob/master/Documentation/optimal-cluster-size.md
  15. 15. 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
  16. 16. Ya chole Domingo… Dinos el problema real del cliente.
  17. 17. 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.
  18. 18. https://docs.oracle.com/cd/E52668_01/E88884/html/kube_admin_config_iptables.html
  19. 19. BPF y Kubernetes • Kubernetes reemplazará muy pronto iptables por BPF • https://lwn.net/Articles/747551/ • https://cilium.io/blog/2018/04/17/why-is-the-kernel-community-replacing-iptables/
  20. 20. Cerrando el caso del cliente
  21. 21. • ¿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..
  22. 22. Directed by ROBERT B. WEIDE
  23. 23. ¡No Kuberneteen por convivir!
  24. 24. ¿Otra historia?
  25. 25. Ni modo, ahi les va. Tengo tiempo.
  26. 26. 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.
  27. 27. 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….
  28. 28. 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
  29. 29. Prometheus! #ftw
  30. 30. 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.
  31. 31. ¿Solución?
  32. 32. “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?
  33. 33. ¡No Kuberneteen por convivir!
  34. 34. Última experiencia…
  35. 35. Aplicaciones Java… Como containers…
  36. 36. ¿Alguien dijo sizing?
  37. 37. ¿Cuantos recursos necesita tu “microservicio” Java?
  38. 38. Si, ese “microservicio” que usa Base de datos compartida y que el Jar es de 150 MB.
  39. 39. Hagamos un ejemplo
  40. 40. Ahora, ¿recuerdan las promesas de Kubernetes?
  41. 41. 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!
  42. 42. ¿Cómo?
  43. 43. 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
  44. 44. Escalamiento • Kubernetes no puede escalar si no puede gestionar bien los recursos. • ¿Estás especificando adecuadamente las cuotas de recursos en tus pods?
  45. 45. ¡No Kuberneteen por convivir!
  46. 46. Kubernetes es una herramienta increíble
  47. 47. No la subutilizen
  48. 48. Gracias

×