SlideShare una empresa de Scribd logo
Kubernetes en Restorando
Migrando los primeros servicios
¿Quiénes somos?
Rodrigo Campos
rata
Juan Barreneche
jbarreneche
@jbarreneche
Agenda
● Kubernetes Intro
● Primeros pasos con Kubernetes en Restorando
○ Cosas que nos fueron útiles
○ Cosas que no, pero encontramos otra forma de hacerlas
○ Cosas que nos faltan resolver
Kubernetes features
● Automatic binpacking
● Horizontal scaling
● Automated rollouts and rollbacks
● Storage orchestration
● Self-healing
● Service discovery and load balancing
● Secret and configuration management
● Batch execution
Node
Kubelet
Pod Pod Pod
Container Container Container
Node
Kubelet
Pod Pod Pod
Container Container Container
Kubernetes basic architecture
Node
Kubelet
Pod Pod Pod
Container Container Container
Kubernetes
Master
¿Qué son los pods?
● Conjunto de 1 o más containers
● Estos containers SIEMPRE se colocan en un mismo nodo
○ Modela grupo de apps que se corren en un host
● Comparten IP, namespace de red y storage
● Ejemplos
○ File puller + web server: comparten volumen para servir los archivos, reusables por
separado
○ App + interfaz con “el mundo exterior”
○ En Restorando: nginx, heka y app
Deployments
● Especifica el “template” de los pods
● Desired state: típicamente se especifica en un yaml/json
● Especificamos y nos asegura (entre otras cosas):
○ Que siempre haya la cantidad de “réplicas” que especificamos
■ Si un nodo muere, container crashea, etc.
○ Que los pods estén “vivos” y no reciban tráfico hasta estar listos
■ Hay chequeos especiales para esto que veremos más adelante
○ Límites y garantías de recursos (CPU, mem)
○ Deploys sin downtime (si queremos)
- name: nginx
image: <registry>/nginx:v1.0
readinessProbe:
initialDelaySeconds: 5
httpGet:
path: /health
port: 80
livenessProbe:
initialDelaySeconds: 5
httpGet:
path: /health
port: 80
lifecycle:
preStop:
exec:
command: ["nginx", "-s", "quit"]
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: wido-web
spec:
replicas: 1
template:
metadata:
labels:
project: wido
role: web
containers:
- name: app
image: <registry>/wido:1.0
Ejemplo de deployment
Hacer un deploy
● Se baja un pod viejo
● Se levanta un pod nuevo
● No se sigue hasta que está listo para recibir tráfico. Cuando está listo, se
repite hasta N
● El nodo lo elige k8s automáticamente, se pueden poner restricciones
○ O hasta crear nuestro propio scheduler y usarlo en su lugar!
¿Y lo de configuration management?
● Otro yaml!
● El objeto se llama “configMap”
● Se puede montar en un path del fs o usarse como variable de entorno
● Hace posible tener una imagen de nginx y correrla con distintas
configuraciones
○ En vez de N imágenes
Nuestra experiencia con K8s
¿Por qué el cambio?
● El principal objetivo hoy es que los equipos sean más independientes
○ No haya cuello de botella en “operaciones”
○ No coordinar para upgradear la versión de ruby con otros equipos
● Que tengan el control de “todo el stack” minimizando riesgos
○ Configuraciones de nginx, etc.
● Que sea igual de fácil que hoy deployear
¿Qué tenemos hoy en k8s?
● Servicios web con HTTP/HTTPS en producción
● Los desarrolladores pueden cambiar la config de todo el stack sin miedo
○ Nginx, heka, etc.
● Monitoreo
● Interfaz web para que hagan deploy
● Builds de imágenes automáticos una vez que se mergea un cambio
○ Auto-deploy on green posible, nadie se anima a usarlo
● La infraestructura manejada con terraform
● K8s crea los ELB de AWS
● Pero todavía no permite configurar el cert SSL
● Solución:
○ Exponer servicio internamente (dentro de K8s)
○ Manejar el ELB por fuera de K8s
Exponer los servicios con ELB y HTTPS
Cambios de config sin miedo
● Es muy fácil tener un “syntax error” al cambiar configuración
● Para evitar downtime por errores simples de config:
○ Configuraciones de nginx, heka, etc. con configmaps
○ Cambio de configuración = nuevo configmap + deploy
○ Si hay error, en un pod no se sigue con el deploy!
● La configuración de la app, por ahora, no usa configmaps
○ Facilita la migración y es simple volver en caso de emergencias
○ Y porque todavía no lo hicimos super feliz
○ Kubernetes hoy no da nada mágico para crearlos/actualizarlos en un deployment
Monitoreo
● Kubernetes viene con grafana+influxdb
● Nosotros usabamos signalfx
○ También hicieron un plugin para kubernetes con cAdvisor!
● Creamos un dashboard custom para ver la capacidad libre
○ Estandarizamos el tamaño de los pods
○ Podemos ver el número de pods disponibles
● Creamos/actualizamos dashboard customs para cada proyecto
Interfaz web para deploy
● Dashboard “built-in” no maneja deployments hoy
○ Los va a manejar para v1.3 (beta que sale este viernes ya los maneja!)
● Nosotros usabamos samson (gihub.com/zendesk/samson)
● Agregaron un plugin para kubernetes y seguimos con la misma interfaz!
○ Ellos también están migrando todo a kubernetes
○ Les mandamos algunos parches (plugin ECR) y la estamos usando
● DEMO!
Docker meetup :: Kubernetes en Restorando
Lo que falta/Lo que viene
● Canary deployments
○ Trivial con otro deployment con distintos labels!
● Hacer el cluster multi-zone
○ Kubernetes ya lo soporta!
● Agregar jobs a samson (pronto)
● Automatizar upgrade de nodos (pronto)
● Migrar el gran “monolito”
● Desarrollo local integrado con service-discovery, etc.
¿Preguntas?
¡Gracias!
Nos encantaría compartir experiencias con kubernetes:
Rodrigo Campos: rodrigo.campos@restorando.com, rodrigo@sdfg.com.ar
Juan Barreneche: jbarreneche@restorando.com
Links interesantes
● Borg, Omega, and Kubernetes: Lessons learned from three container-
management systems over a decade
○ http://queue.acm.org/detail.cfm?id=2898444
● Curso online
○ https://www.udacity.com/course/scalable-microservices-with-kubernetes--ud615
● KubeCon EU 2016
○ https://www.youtube.com/watch?v=Wyl4O3CHzV0
● Query Kubernetes API objects using SQL
○ https://github.com/brendandburns/ksql

Más contenido relacionado

PDF
Kubernetes: Caso de uso real con mememtum y Taniwa
PPTX
Docker como la máxima expresión de Devops - WISIT 2015
PPTX
Introducción a Docker
PDF
nerdear.la 2016 - Docker workshop
PDF
Docker: la revolución en virtualización
PPTX
Presentación Docker
ODP
Solapas principales Ver(solapa activa) Editar Gestionar present...
PDF
Kubernetes technical overview and our experience at Restorando :: Buenos Aire...
Kubernetes: Caso de uso real con mememtum y Taniwa
Docker como la máxima expresión de Devops - WISIT 2015
Introducción a Docker
nerdear.la 2016 - Docker workshop
Docker: la revolución en virtualización
Presentación Docker
Solapas principales Ver(solapa activa) Editar Gestionar present...
Kubernetes technical overview and our experience at Restorando :: Buenos Aire...

La actualidad más candente (20)

PDF
DevOps+[Chef/Docker]
PDF
Introducción a Docker
PDF
Fury - Docker Meetup
PDF
Divide y vencerás con docker y core os
PDF
Seminario CLEFormacion-docker
PDF
Introducción a Docker
PDF
BEEVA | Introducción a Docker
PPTX
Usando docker
PDF
Vagrant y Docker - Guía práctica de uso
PPTX
Presentación Docker
PDF
Docker - Sysmana 2014
PDF
introducción a Docker
PDF
Docker desde cero
PDF
Conceptos avanzados en docker
PDF
Docker orientado al desarrollo de aplicaciones con NodeJS
PDF
Docker introducción - Flisol 2015 Huancayo
PDF
Presentación nubes de contenedores con docker swarm
PDF
Docker y PostgreSQL
PDF
FROM lost to the docker
PDF
Fury DevopsConf 2015
DevOps+[Chef/Docker]
Introducción a Docker
Fury - Docker Meetup
Divide y vencerás con docker y core os
Seminario CLEFormacion-docker
Introducción a Docker
BEEVA | Introducción a Docker
Usando docker
Vagrant y Docker - Guía práctica de uso
Presentación Docker
Docker - Sysmana 2014
introducción a Docker
Docker desde cero
Conceptos avanzados en docker
Docker orientado al desarrollo de aplicaciones con NodeJS
Docker introducción - Flisol 2015 Huancayo
Presentación nubes de contenedores con docker swarm
Docker y PostgreSQL
FROM lost to the docker
Fury DevopsConf 2015
Publicidad

Destacado (17)

PDF
An Introduction to Kubernetes
PPT
Vagrant ansible pesadilla en la consultoria
PDF
Evolution of Linux Containerization
PDF
Introduction to Kubernetes
PDF
Seminario: Docker y su Ecosistema
PDF
Kubernetes - #dockerconlima
PPTX
Immutable infrastructure with Docker and EC2
PDF
Scaling Docker with Kubernetes
PDF
Kubernetes Basics
PDF
Kubernetes Architecture and Introduction – Paris Kubernetes Meetup
PPTX
Introduction to Kubernetes
PDF
A Gentle Introduction To Docker And All Things Containers
PDF
Basic docker for developer
PDF
Docker by Example - Basics
PPTX
Docker introduction
PPTX
Webinar : Docker in Production
PDF
Docker 101: Introduction to Docker
An Introduction to Kubernetes
Vagrant ansible pesadilla en la consultoria
Evolution of Linux Containerization
Introduction to Kubernetes
Seminario: Docker y su Ecosistema
Kubernetes - #dockerconlima
Immutable infrastructure with Docker and EC2
Scaling Docker with Kubernetes
Kubernetes Basics
Kubernetes Architecture and Introduction – Paris Kubernetes Meetup
Introduction to Kubernetes
A Gentle Introduction To Docker And All Things Containers
Basic docker for developer
Docker by Example - Basics
Docker introduction
Webinar : Docker in Production
Docker 101: Introduction to Docker
Publicidad

Similar a Docker meetup :: Kubernetes en Restorando (20)

PDF
202204-Modernizando aplicaciones legacy
PDF
Orquestadores en cloud providers para Ingeniería de Datos
PPTX
Kubernetes workshop
PDF
Automatización de tareas con Gulp
PDF
Serverless: La evolucion de la arquitectura a la nube
PDF
Terraform Ansible v3.0
PDF
Los mejores trucos y prácticas para configurar drupal
PDF
Introducción al Cloud Computing
PDF
Dev Tools para Kubernetes - Codemotion 2019
PDF
Earthly, Dockerfile con esteroides
PDF
Docker y Kubernetes, en busca de la alta disponibilidad
PDF
Hadoop en accion
PDF
BBVA Arquitectura - Demo DevOps
ODP
Servidor de mapas en HA con Jboss, Geoserver y PostGIS.
ODP
Servidores de mapas en alta disponibilidad
PDF
Kubernetes para developers
PDF
Entonamiento y perfilado de Drupal
PDF
Ansible + AWS: Cómo administrar tu infraestructura de AWS con Ansible
202204-Modernizando aplicaciones legacy
Orquestadores en cloud providers para Ingeniería de Datos
Kubernetes workshop
Automatización de tareas con Gulp
Serverless: La evolucion de la arquitectura a la nube
Terraform Ansible v3.0
Los mejores trucos y prácticas para configurar drupal
Introducción al Cloud Computing
Dev Tools para Kubernetes - Codemotion 2019
Earthly, Dockerfile con esteroides
Docker y Kubernetes, en busca de la alta disponibilidad
Hadoop en accion
BBVA Arquitectura - Demo DevOps
Servidor de mapas en HA con Jboss, Geoserver y PostGIS.
Servidores de mapas en alta disponibilidad
Kubernetes para developers
Entonamiento y perfilado de Drupal
Ansible + AWS: Cómo administrar tu infraestructura de AWS con Ansible

Último (20)

PPTX
MODULO 2. METODOLOGIAS PARA ANALISIS DE RIESGOS 2da Parte.pptx
PDF
Sugerencias Didacticas 2023_Diseño de Estructuras Metalicas_digital.pdf
PPTX
GEOLOGIA, principios , fundamentos y conceptos
PDF
presentacion sobre los polimeros, como se conforman
PDF
Guia_para_la_elaboracion_de_un_plan_de_contingencia.pdf
PPTX
Presentacion_Palcoma_Alta energia solar eolica
PDF
Sustitucion_del_maiz_por_harina_integral_de_zapall.pdf
PDF
Marco Legal de la Gestión Tecnológica en Venezuela - Enderson Mendez
PDF
Marcos legales de la gestion tecnologica en venezuela yefferson reyes.pdf
PPTX
ISOTOPOS.pptx.universida.introduccion al tema
PDF
Comité de Seguridad y Salud en el Trabajo.pdf
PPT
PRIMEROS AUXILIOS EN EL SECTOR EMPRESARIAL
PDF
CI digitales -1. Introduccion 2024-25.pdf
PPTX
Software para la educación instituciones superiores
PDF
FIJA NUEVO TEXTO DE LA ORDENANZA GENERAL DE LA LEY GENERAL DE URBANISMO Y CON...
PDF
fulguracion-medicina-legal-418035-downloable-2634665.pdf lesiones por descarg...
PDF
COMPARACION DE LA NUEVA LEY DE CONTRATAIONES DEL ESTADO 30269.pdf
PDF
SUBDIVISIÓN URBANA PUEDE ENFRENTAR SERVIDUMBRE DE PASO.pdf
PDF
Módulo-de Alcance-proyectos - Definición.pdf
PDF
TESTAMENTO DE DESCRIPTIVA ..............
MODULO 2. METODOLOGIAS PARA ANALISIS DE RIESGOS 2da Parte.pptx
Sugerencias Didacticas 2023_Diseño de Estructuras Metalicas_digital.pdf
GEOLOGIA, principios , fundamentos y conceptos
presentacion sobre los polimeros, como se conforman
Guia_para_la_elaboracion_de_un_plan_de_contingencia.pdf
Presentacion_Palcoma_Alta energia solar eolica
Sustitucion_del_maiz_por_harina_integral_de_zapall.pdf
Marco Legal de la Gestión Tecnológica en Venezuela - Enderson Mendez
Marcos legales de la gestion tecnologica en venezuela yefferson reyes.pdf
ISOTOPOS.pptx.universida.introduccion al tema
Comité de Seguridad y Salud en el Trabajo.pdf
PRIMEROS AUXILIOS EN EL SECTOR EMPRESARIAL
CI digitales -1. Introduccion 2024-25.pdf
Software para la educación instituciones superiores
FIJA NUEVO TEXTO DE LA ORDENANZA GENERAL DE LA LEY GENERAL DE URBANISMO Y CON...
fulguracion-medicina-legal-418035-downloable-2634665.pdf lesiones por descarg...
COMPARACION DE LA NUEVA LEY DE CONTRATAIONES DEL ESTADO 30269.pdf
SUBDIVISIÓN URBANA PUEDE ENFRENTAR SERVIDUMBRE DE PASO.pdf
Módulo-de Alcance-proyectos - Definición.pdf
TESTAMENTO DE DESCRIPTIVA ..............

Docker meetup :: Kubernetes en Restorando

  • 1. Kubernetes en Restorando Migrando los primeros servicios
  • 2. ¿Quiénes somos? Rodrigo Campos rata Juan Barreneche jbarreneche @jbarreneche
  • 3. Agenda ● Kubernetes Intro ● Primeros pasos con Kubernetes en Restorando ○ Cosas que nos fueron útiles ○ Cosas que no, pero encontramos otra forma de hacerlas ○ Cosas que nos faltan resolver
  • 4. Kubernetes features ● Automatic binpacking ● Horizontal scaling ● Automated rollouts and rollbacks ● Storage orchestration ● Self-healing ● Service discovery and load balancing ● Secret and configuration management ● Batch execution
  • 5. Node Kubelet Pod Pod Pod Container Container Container Node Kubelet Pod Pod Pod Container Container Container Kubernetes basic architecture Node Kubelet Pod Pod Pod Container Container Container Kubernetes Master
  • 6. ¿Qué son los pods? ● Conjunto de 1 o más containers ● Estos containers SIEMPRE se colocan en un mismo nodo ○ Modela grupo de apps que se corren en un host ● Comparten IP, namespace de red y storage ● Ejemplos ○ File puller + web server: comparten volumen para servir los archivos, reusables por separado ○ App + interfaz con “el mundo exterior” ○ En Restorando: nginx, heka y app
  • 7. Deployments ● Especifica el “template” de los pods ● Desired state: típicamente se especifica en un yaml/json ● Especificamos y nos asegura (entre otras cosas): ○ Que siempre haya la cantidad de “réplicas” que especificamos ■ Si un nodo muere, container crashea, etc. ○ Que los pods estén “vivos” y no reciban tráfico hasta estar listos ■ Hay chequeos especiales para esto que veremos más adelante ○ Límites y garantías de recursos (CPU, mem) ○ Deploys sin downtime (si queremos)
  • 8. - name: nginx image: <registry>/nginx:v1.0 readinessProbe: initialDelaySeconds: 5 httpGet: path: /health port: 80 livenessProbe: initialDelaySeconds: 5 httpGet: path: /health port: 80 lifecycle: preStop: exec: command: ["nginx", "-s", "quit"] apiVersion: extensions/v1beta1 kind: Deployment metadata: name: wido-web spec: replicas: 1 template: metadata: labels: project: wido role: web containers: - name: app image: <registry>/wido:1.0 Ejemplo de deployment
  • 9. Hacer un deploy ● Se baja un pod viejo ● Se levanta un pod nuevo ● No se sigue hasta que está listo para recibir tráfico. Cuando está listo, se repite hasta N ● El nodo lo elige k8s automáticamente, se pueden poner restricciones ○ O hasta crear nuestro propio scheduler y usarlo en su lugar!
  • 10. ¿Y lo de configuration management? ● Otro yaml! ● El objeto se llama “configMap” ● Se puede montar en un path del fs o usarse como variable de entorno ● Hace posible tener una imagen de nginx y correrla con distintas configuraciones ○ En vez de N imágenes
  • 12. ¿Por qué el cambio? ● El principal objetivo hoy es que los equipos sean más independientes ○ No haya cuello de botella en “operaciones” ○ No coordinar para upgradear la versión de ruby con otros equipos ● Que tengan el control de “todo el stack” minimizando riesgos ○ Configuraciones de nginx, etc. ● Que sea igual de fácil que hoy deployear
  • 13. ¿Qué tenemos hoy en k8s? ● Servicios web con HTTP/HTTPS en producción ● Los desarrolladores pueden cambiar la config de todo el stack sin miedo ○ Nginx, heka, etc. ● Monitoreo ● Interfaz web para que hagan deploy ● Builds de imágenes automáticos una vez que se mergea un cambio ○ Auto-deploy on green posible, nadie se anima a usarlo ● La infraestructura manejada con terraform
  • 14. ● K8s crea los ELB de AWS ● Pero todavía no permite configurar el cert SSL ● Solución: ○ Exponer servicio internamente (dentro de K8s) ○ Manejar el ELB por fuera de K8s Exponer los servicios con ELB y HTTPS
  • 15. Cambios de config sin miedo ● Es muy fácil tener un “syntax error” al cambiar configuración ● Para evitar downtime por errores simples de config: ○ Configuraciones de nginx, heka, etc. con configmaps ○ Cambio de configuración = nuevo configmap + deploy ○ Si hay error, en un pod no se sigue con el deploy! ● La configuración de la app, por ahora, no usa configmaps ○ Facilita la migración y es simple volver en caso de emergencias ○ Y porque todavía no lo hicimos super feliz ○ Kubernetes hoy no da nada mágico para crearlos/actualizarlos en un deployment
  • 16. Monitoreo ● Kubernetes viene con grafana+influxdb ● Nosotros usabamos signalfx ○ También hicieron un plugin para kubernetes con cAdvisor! ● Creamos un dashboard custom para ver la capacidad libre ○ Estandarizamos el tamaño de los pods ○ Podemos ver el número de pods disponibles ● Creamos/actualizamos dashboard customs para cada proyecto
  • 17. Interfaz web para deploy ● Dashboard “built-in” no maneja deployments hoy ○ Los va a manejar para v1.3 (beta que sale este viernes ya los maneja!) ● Nosotros usabamos samson (gihub.com/zendesk/samson) ● Agregaron un plugin para kubernetes y seguimos con la misma interfaz! ○ Ellos también están migrando todo a kubernetes ○ Les mandamos algunos parches (plugin ECR) y la estamos usando ● DEMO!
  • 19. Lo que falta/Lo que viene ● Canary deployments ○ Trivial con otro deployment con distintos labels! ● Hacer el cluster multi-zone ○ Kubernetes ya lo soporta! ● Agregar jobs a samson (pronto) ● Automatizar upgrade de nodos (pronto) ● Migrar el gran “monolito” ● Desarrollo local integrado con service-discovery, etc.
  • 20. ¿Preguntas? ¡Gracias! Nos encantaría compartir experiencias con kubernetes: Rodrigo Campos: rodrigo.campos@restorando.com, rodrigo@sdfg.com.ar Juan Barreneche: jbarreneche@restorando.com
  • 21. Links interesantes ● Borg, Omega, and Kubernetes: Lessons learned from three container- management systems over a decade ○ http://queue.acm.org/detail.cfm?id=2898444 ● Curso online ○ https://www.udacity.com/course/scalable-microservices-with-kubernetes--ud615 ● KubeCon EU 2016 ○ https://www.youtube.com/watch?v=Wyl4O3CHzV0 ● Query Kubernetes API objects using SQL ○ https://github.com/brendandburns/ksql

Notas del editor

  • #5: Kubernetes está hecho con microservicios, todas las partes son reemplazables e integrables con otros Automatic Horizonatal Scaling
  • #6: Master con etcd. Nodos iguales con “kubelet” y pods
  • #7: Pensar en pod como mínima unidad para escalar Los puertos con otros pods no conflictuan porque cada uno tiene su IP! Sidecar: extend and enhance the "main" container (primer ejemplo) Ambassador containers: container que splits read/writes y se conecta a redis Adapter containers: interfaz con el mundo exterior
  • #8: Desired state, describe lo que queremos, no cómo hacerlo
  • #9: El readiness y liveness acá es igual, podrían ser distintos (probar que estén todas las dependencias up, por ejemplo) Acá son un httpget, pueden ser ejecutar un comando en el container, conectarse por TCP nomás. Muy flexible y configurable Todo tiene labels pero muchos los saqué por espacio
  • #10: Con esto vimos: Automatic binpacking Y los puertos no conflictuan! Horizontal scaling (hay automatico tambien!) Automated rollouts and rollbacks Self-healing
  • #11: Secret management se maneja muy parecido
  • #13: Mencionar que usabamos chef para el provisioning y que los devs no podían hacer cambios.
  • #21: Hagan el curso de udacity!