Upgrade to Pro — share decks privately, control downloads, hide ads and more …

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

Pablo Fredrikson

October 07, 2020
Tweet

More Decks by Pablo Fredrikson

Other Decks in Technology

Transcript

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

    View full-size slide

  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

    View full-size slide

  3. #nerdearla
    Docker
    Aplicaciones en Contenedores
    @pablokbs
    contenedor
    imagen
    # Dockerfile
    FROM ubuntu
    RUN apt-get install
    apache2
    CMD [ “apache2” ]
    build run

    View full-size slide

  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

    View full-size slide

  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

    View full-size slide

  6. #nerdearla
    Docker en Producción
    ¿Qué pasa si tenemos muchas instancias?
    @pablokbs

    View full-size slide

  7. #nerdearla
    @pablokbs
    Mejor usemos Kubernetes

    View full-size slide

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

    View full-size slide

  9. #nerdearla
    Kubernetes
    Manejando instancias como ganado
    @pablokbs

    View full-size slide

  10. #nerdearla
    Kubernetes
    Manejando instancias como ganado
    @pablokbs

    View full-size slide

  11. #nerdearla
    Kubernetes
    Manejando instancias como ganado
    @pablokbs

    View full-size slide

  12. #nerdearla
    Kubernetes
    Manejando instancias como ganado
    @pablokbs

    View full-size slide

  13. #nerdearla
    Kubernetes
    Manejando instancias como ganado
    @pablokbs

    View full-size slide

  14. #nerdearla
    Kubernetes
    Manejando instancias como ganado
    @pablokbs

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

  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

    View full-size slide

  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

    View full-size slide

  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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

  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!

    View full-size slide

  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

    View full-size slide

  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

    View full-size slide

  28. #nerdearla
    Kubernetes
    Nodos dinámicos
    @pablokbs

    View full-size slide

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

    View full-size slide

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

    View full-size slide

  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

    View full-size slide

  32. #nerdearla
    ¿Preguntas?
    /PELADONERD
    @pablokbs
    slack.peladonerd.com

    View full-size slide