Cómo ahorrar millones de dólares con Kubernetes en Producción

Cómo ahorrar millones de dólares con Kubernetes en Producción

Charla que di en Nerdearla 2020 sobre mi experiencia usando Kubernetes para administrar 3500 instancias en AWS y todas las estrategias que usamos para usar los recursos de forma eficiente

04280fd182525cdaee76572782ec34c0?s=128

Pablo Fredrikson

October 07, 2020
Tweet

Transcript

  1. Cómo ahorramos MILLONES de dólares con Kubernetes Pablo Fredrikson -

    @pablokbs
  2. #nerdearla Pablo Fredrikson Staff SRE @ Split.io Usando Docker, Kubernetes

    y AWS @pablokbs 3 años con Kubernetes en Producción Corriendo ~3500 instancias en AWS 14 años con Linux Mi primera distro fue OpenSUSE
  3. #nerdearla Docker Aplicaciones en Contenedores @pablokbs contenedor imagen # Dockerfile

    FROM ubuntu RUN apt-get install apache2 CMD [ “apache2” ] build run
  4. #nerdearla Docker en Producción Cómo usar Docker en el mundo

    real @pablokbs $ docker run -d pablokbs/miapp-a $ docker run -d pablokbs/miapp-b $ docker run -d pablokbs/miapp-c
  5. #nerdearla Docker en Producción Cómo usar Docker en el mundo

    real @pablokbs # docker-compose.yaml services: miapp-a: image: pablokbs/miapp-a environment: - MYSQL_USER: root - MYSQL_PASS: n3rd miapp-b: image: pablokbs/miapp-b miapp-c: image: pablokbs/miapp-c
  6. #nerdearla Docker en Producción ¿Qué pasa si tenemos muchas instancias?

    @pablokbs
  7. #nerdearla @pablokbs Mejor usemos Kubernetes

  8. #nerdearla Kubernetes Pods: Set de contenedores @pablokbs

  9. #nerdearla Kubernetes Manejando instancias como ganado @pablokbs

  10. #nerdearla Kubernetes Manejando instancias como ganado @pablokbs

  11. #nerdearla Kubernetes Manejando instancias como ganado @pablokbs

  12. #nerdearla Kubernetes Manejando instancias como ganado @pablokbs

  13. #nerdearla Kubernetes Manejando instancias como ganado @pablokbs

  14. #nerdearla Kubernetes Manejando instancias como ganado @pablokbs

  15. #nerdearla Kubernetes Escalamiento de Pods / Horizontal Pod Autoscaler @pablokbs

  16. #nerdearla Kubernetes Escalamiento de Pods / Horizontal Pod Autoscaler +pods

    @pablokbs
  17. #nerdearla Kubernetes Escalamiento de Instancias / Cluster Autoscaler @pablokbs cluster-autoscaler

  18. #nerdearla Kubernetes Escalamiento de Instancias / Cluster Autoscaler +instancias @pablokbs

  19. #nerdearla Kubernetes ¿Cuántos pods podemos correr en una instancia? memRequest:

    128MB memLimit: 512MB cpuRequest: 100m cpuLimit: 750m memRequest: 512MB memLimit: 1024MB Total Memory: 2048MB memRequest: 1024MB memLimit: 2048MB memRequest: 256MB memLimit: 512MB 256MB @pablokbs
  20. #nerdearla Kubernetes ¿Cuántos pods podemos correr en una instancia? memRequest:

    128MB memLimit: 512MB cpuRequest: 100m cpuLimit: 750m memRequest: 512MB memLimit: 1024MB Total Memory: 2048MB memRequest: 1024MB memLimit: 2048MB memRequest: 256MB memLimit: 512MB 256MB memRequest: 128MB memLimit: 512MB cpuRequest: 100m cpuLimit: 750m @pablokbs
  21. #nerdearla Kubernetes Siendo eficiente al asignar recursos memRequest: 483MB memLimit:

    1024MB Total Memory: 2048MB memRequest: 790MB memLimit: 2048MB memRequest: 201MB memLimit: 512MB 243MB memRequest: 126MB memLimit: 512MB memRequest: 128MB memLimit: 512MB cpuRequest: 100m cpuLimit: 750m memRequest: 128MB memLimit: 512MB cpuRequest: 100m cpuLimit: 750m @pablokbs
  22. #nerdearla Kubernetes Instancias = Ganado / Spot!? @pablokbs

  23. #nerdearla Kubernetes Instancias = Ganado / Spot?! @pablokbs

  24. #nerdearla Kubernetes Instancias = Ganado / Spot! @pablokbs

  25. #nerdearla Kubernetes Instancias Spot (AWS) @pablokbs • Instancias que varían

    de precio basado en la demanda • Aproximadamente 50% del precio de las On-Demand • Cuando el precio sube del valor que pagaste, la instancia se destruye (con un aviso de 2 minutos) • Co-co-co-combo con Kubernetes!
  26. #nerdearla Kubernetes Instancias Spot (AWS) @pablokbs • 70% de nuestras

    instancias en producción son Spot (las otras son RI) • Creamos un servicio que sube el bid para no perder las Instancias Spot* (después lo reemplazamos con una configuración de ASG) • Con aws-node-termination-handler podemos drenar la instancia antes de que muera • Hay tipos de instancias que son más estables que otras
  27. #nerdearla • Horizontal Pod Autoscaler: Escalando pods horizontalmente, basado en

    diferentes reglas: ◦ Uso de Memoria / CPU: Más tráfico = Más uso de recursos ◦ Metricas de Pods: Requests/segundo ◦ Métricas externas: RabbitMQ • Vertical Autoscaler: Escalando pods verticalmente, basado en uso de recursos (cpu/memoria) • Cluster Autoscaler: Escalando instancias horizontalmente, basado en eventos de Kubernetes • Instancias Spot: Usando instancias más baratas que son descartables @pablokbs Kubernetes Nodos dinámicos
  28. #nerdearla Kubernetes Nodos dinámicos @pablokbs

  29. #nerdearla ¿Cuánto ahorramos? USD 3,4M @pablokbs

  30. ¿Kubernetes es la solución mágica para todos?

  31. #nerdearla Docker Docker-compose Kubernetes • 1-2 nodos • Poco tiempo

    • No sabés usar compose • 1-5 nodos • Poco tiempo para aprender k8s • Sin pronóstico de crecimiento • +3 nodos • Pronóstico de crecimiento • Entornos dinámicos • Aprender! Cuándo usar Docker vs Compose vs k8s @pablokbs
  32. #nerdearla ¿Preguntas? /PELADONERD @pablokbs slack.peladonerd.com