Docker meetup :: Kubernetes en Restorando

21
Kubernetes en Restorando Migrando los primeros servicios

Transcript of Docker meetup :: Kubernetes en Restorando

Page 1: Docker meetup :: Kubernetes en Restorando

Kubernetes en RestorandoMigrando los primeros servicios

Page 2: Docker meetup :: Kubernetes en Restorando

¿Quiénes somos?

Rodrigo Campos

rata

Juan Barreneche

jbarreneche

@jbarreneche

Page 3: Docker meetup :: Kubernetes en Restorando

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

Page 4: Docker meetup :: Kubernetes en Restorando

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

Page 5: Docker meetup :: Kubernetes en Restorando

NodeKubelet

Pod Pod Pod

Container Container Container

NodeKubelet

Pod Pod Pod

Container Container Container

Kubernetes basic architecture

NodeKubelet

Pod Pod Pod

Container Container Container

Kubernetes Master

Page 6: Docker meetup :: Kubernetes en Restorando

¿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

Page 7: Docker meetup :: Kubernetes en Restorando

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)

Page 8: Docker meetup :: Kubernetes en Restorando

- 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/v1beta1kind: Deploymentmetadata: name: wido-webspec: replicas: 1 template: metadata: labels: project: wido role: web containers: - name: app image: <registry>/wido:1.0

Ejemplo de deployment

Page 9: Docker meetup :: Kubernetes en Restorando

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!

Page 10: Docker meetup :: Kubernetes en Restorando

¿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

Page 11: Docker meetup :: Kubernetes en Restorando

Nuestra experiencia con K8s

Page 12: Docker meetup :: Kubernetes en Restorando

¿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

Page 13: Docker meetup :: Kubernetes en Restorando

¿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

Page 14: Docker meetup :: Kubernetes en Restorando

● 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

Page 15: Docker meetup :: Kubernetes en Restorando

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

Page 16: Docker meetup :: Kubernetes en Restorando

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

Page 17: Docker meetup :: Kubernetes en Restorando

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!

Page 18: Docker meetup :: Kubernetes en Restorando
Page 19: 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.

Page 20: Docker meetup :: Kubernetes en Restorando

¿Preguntas?

¡Gracias!Nos encantaría compartir experiencias con kubernetes:

Rodrigo Campos: [email protected], [email protected]

Juan Barreneche: [email protected]

Page 21: Docker meetup :: Kubernetes en Restorando

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