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

Cómo ahorrar millones de dólares con Kubernetes...

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. #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
  2. #nerdearla Docker Aplicaciones en Contenedores @pablokbs contenedor imagen # Dockerfile

    FROM ubuntu RUN apt-get install apache2 CMD [ “apache2” ] build run
  3. #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
  4. #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
  5. #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
  6. #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
  7. #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
  8. #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!
  9. #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
  10. #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
  11. #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