SlideShare una empresa de Scribd logo
Extendiendo Kubernetes:
diseño de un operador
Madrid | 30 Noviembre - 1 Diciembre, 2018
Julio Chana
Julio Chana
Graduado en Ingeniería Informática por
la Universidad Politécnica de Madrid
SRE en Spotahome
Twitter / @jchanam
GitHub / @jchanam
_Sobre mí
¿Por qué extender
Kubernetes?
_¿Por qué extender Kubernetes?
¿Qué permite Kubernetes?
• Hacer despliegues simples de
microservicios
• Crear balanceadores
• Guardar secretos
• Etc
_¿Por qué extender Kubernetes?
¿Qué necesitamos?
• Desplegar software complejo
○ Varias piezas
○ Control individual
○ Orden específico
• Control del ciclo de vida
○ Recuperación de errores
○ Cambios de estado
○ etc
_¿Por qué extender Kubernetes? /2
Ejemplo - Redis Failover
Master
Slave
Slave
Sentinel
Sentinel
Sentinel
Redis
+info:
redis.io/topics/sentinel
_¿Por qué extender Kubernetes? /3
Opción 1: Init-containers + mucha imaginación, pero...
• Scripts para comprobar prerrequisitos
○ Complejidad
○ Difícil testeo
○ No es resiliente
○ etc
• No permite controlar varias
piezas de forma simultánea
Opción 2: Charts de Helm, pero…
• No permite requisitos previos
• No comprueba estado actual de forma constante
• Especifica los componentes que quiero, del modo que
quiero, pero no cómo llegar a ello
_¿Por qué extender Kubernetes? /3
+info:
helm.sh
Solución:
Crear nuestros propios controladores para implementar la
lógica operacional de la aplicación.
Beneficios:
• Gestión específica
• Orden necesario
• Control completo
• Mantenimiento contínuo
• Estado fiable
_¿Por qué extender Kubernetes? /4
Cómo extender
Kubernetes
_Cómo extender Kubernetes
Pod
C
ReplicaSet
Pod’
C
Deployment
ReplicaSet’
Pod
C
Pod’
C
Recurso mínimo: Pod
↳ ReplicaSet: gestiona ciclo de vida de Pods
↳ Deployment: gestiona versiones de ReplicaSets
Igual que Kubernetes, crearemos nuestros recursos y
trabajaremos sobre ellos:
_Cómo extender Kubernetes /2
CRD Controller Operator+ =
1. Definición
2. Lógica
3. Éxito
_Cómo extender Kubernetes /3
Crear CRD (Custom Resource Definition) == Extender API
Kubernetes APIs
Pod
Statefulset
Service
Role
RoleBinding PersistentVolume
Deployment
PodDisruptionBudget
Job
DaemonSet
Secret API Extensions
+
MyCustomResource_A
MyCustomResource_B
...
MyCustomResource_Z
Son como el resto de recursos:
• Usan recursos existentes
• Configurados de forma específica
• Con estado propio
_Cómo extender Kubernetes /4
CRD: Definición de los
objetos que va a gestionar
el controlador
Mínimo dos componentes:
• TypeMeta
• Kind
• APIVersion
• ObjectMeta
• Name
• Namespace
• Labels
• Annotations
• etc
_Cómo extender Kubernetes /4
Spec: información propia
que necesitaremos.
Estructura libre.
Status: información del
estado de nuestros
objetos.
_Cómo extender Kubernetes /5
Una vez se tenga definido el CRD, Kubernetes ofrece un
autogenerador de código, que creará las interfaces que nos
permitirán interactuar con nuestros recursos.
Con esto tendremos una API similar a la de cualquier otro
recurso de Kubernetes.
_Cómo extender Kubernetes /6
CRD Controller Operator+ =
ListerWatcher Handler+
ListerWatcher:
・ ‘Lister’: permite listar los recursos existentes
・ ‘Watcher’: escucha eventos de cambio de estado
Handler: recibirá 3 tipos de llamadas:
・ ‘Add’: define el estado esperado del recurso
・ ‘Update’: define que un recurso se ha modificado
・ ‘Delete’: define que el recurso debe dejar de existir
_Cómo extender Kubernetes /7
Gestión de los eventos:
1. Simplificación -> Add == Update
a. Siempre recibimos el estado deseado (level trigger)
b. Menos lógica
c. Sólo un flujo de trabajo
2. ‘Reconcilitation loop’
a. Un evento de ‘add’ por cada recurso cada N segundos
b. Resiliencia frente a fallos
3. Borrado por el Garbage Collector de Kubernetes
+info:
github.com/spotahome/kooper
Ejemplo:
Redis Operator
_Ejemplo: Redis Operator
Pasos que lleva a cabo el controlador:
1. Registrar CRD
2. Quedarse a la espera de recibir los posibles eventos
a. Cuando llega un evento ‘Add’
i. “Ensure”: asegurarse de que todos los recursos
existen (y si no, crearlos)
ii. “CheckAndHeal”: Comprobar que cada recurso está en
el estado esperado
b. Cuando llega un evento “Delete”
i. En principio no es necesaria intervención
_Ejemplo: Redis Operator /2
Ensure
Inicio de los recursos por defecto. Cada
recurso no conoce del resto
1. Redis -> Nodos Máster
2. Sentinel -> Monitorizándose a sí
mismos
Master
Master
Master
Sentinel
Sentinel
Sentinel
Redis
_Ejemplo: Redis Operator /2
Check and Heal
1. Comprobar el número de nodos actuando
como máster.
Master
Master
Master
Sentinel
Sentinel
Sentinel
Redis
_Ejemplo: Redis Operator /2
Check and Heal
1. Comprobar el número de nodos actuando
como máster. Si > 1:
a. Elegir un máster Master
Master
Master
Sentinel
Sentinel
Sentinel
Redis
_Ejemplo: Redis Operator /2
Check and Heal
1. Comprobar el número de nodos actuando
como máster. Si > 1:
a. Elegir un máster
b. Configurar el resto de nodos como
esclavos de éste
Master
Slave
Slave
Sentinel
Sentinel
Sentinel
Redis
_Ejemplo: Redis Operator /2
Check and Heal
1. Comprobar el número de nodos actuando
como máster. Si > 1:
a. Elegir un máster
b. Configurar el resto de nodos como
esclavos de éste
2. Comprobar que todos los esclavos
tengan el mismo máster
Master
Slave
Slave
Sentinel
Sentinel
Sentinel
Redis
_Ejemplo: Redis Operator /2
Check and Heal
1. Comprobar el número de nodos actuando
como máster. Si > 1:
a. Elegir un máster
b. Configurar el resto de nodos como
esclavos de éste
2. Comprobar que todos los esclavos
tengan el mismo máster. Si no:
a. Configurar los nodos con el máster
correcto
Master
Slave
Slave
Sentinel
Sentinel
Sentinel
Redis
_Ejemplo: Redis Operator /2
Check and Heal
1. Comprobar el número de nodos actuando
como máster. Si > 1:
a. Elegir un máster
b. Configurar el resto de nodos como
esclavos de éste
2. Comprobar que todos los esclavos
tengan el mismo máster. Si no:
a. Configurar los nodos con el
máster correcto
3. Comprobar que todos los Sentinel
monitorizan al Redis máster
Master
Slave
Slave
Sentinel
Sentinel
Sentinel
Redis
_Ejemplo: Redis Operator /2
Check and Heal
1. Comprobar el número de nodos actuando
como máster. Si > 1:
a. Elegir un máster
b. Configurar el resto de nodos como
esclavos de éste
2. Comprobar que todos los esclavos
tengan el mismo máster. Si no:
a. Configurar los nodos con el máster
correcto
3. Comprobar que todos los Sentinel
monitorizan al Redis máster.Si no:
a. Configurar todos los Sentinel para
monitorizar este máster
Master
Slave
Slave
Sentinel
Sentinel
Sentinel
Redis
_Ejemplo: Redis Operator /2
Check and Heal
1. Comprobar el número de nodos actuando
como máster. Si > 1:
a. Elegir un máster
b. Configurar el resto de nodos como
esclavos de éste
2. Comprobar que todos los esclavos
tengan el mismo máster. Si no:
a. Configurar los nodos con el máster
correcto
3. Comprobar que todos los Sentinel
monitorizan al Redis máster.Si no:
a. Configurar todos los Sentinel para
monitorizar este máster
Master
Slave
Slave
Sentinel
Sentinel
Sentinel
Redis
_Ejemplo: Redis Operator /2
Check and Heal
1. Comprobar el número de nodos actuando
como máster. Si > 1:
a. Elegir un máster
b. Configurar el resto de nodos como
esclavos de éste
2. Comprobar que todos los esclavos
tengan el mismo máster. Si no:
a. Configurar los nodos con el máster
correcto
3. Comprobar que todos los Sentinel
monitorizan al Redis máster.Si no:
a. Configurar todos los Sentinel para
monitorizar este máster
Master
Slave
Slave
Sentinel
Sentinel
Sentinel
Redis
ESTADO ESPERADO
_Ejemplo: Redis Operator /3
Pasos que lleva a cabo el controlador tras un ‘Delete’:
● En el caso de los elementos creados dentro de Kubernetes, el
borrado lo gestiona el garbage collector mediante el “Owner
Reference”
○ Define qué recursos dependen de él
○ Borra en cascada (de mayor a menor)
● Si hay elementos externos, sí que deberemos hacer limpieza
desde el controlador.
Otros ejemplos
_Otros ejemplos
Cert Manager: https://github.com/jetstack/cert-manager
_Otros ejemplos
Cert Manager: https://github.com/jetstack/cert-manager
_Otros ejemplos
Cert Manager: https://github.com/jetstack/cert-manager
_Otros ejemplos /2
Prometheus Operator:
https://github.com/coreos/prometheus-operator
Service Level Operator:
https://github.com/spotahome/service-level-operator
Jaeger Operator:
https://github.com/jaegertracing/jaeger-operator
Kooper
_Kooper
Kooper es una librería que nos abstrae de los componentes de
Kubernetes, facilitándonos crear los operadores:
・ Registra los CRD que definamos
・ Crea el controlador:
・ Lee los eventos de Kubernetes
・ Envía a nuestro handler los eventos con toda la
información necesaria
・ Hace reintentos
・ Proporciona métricas
+info:
github.com/spotahome/kooper
Resumen
_Resumen
Operador: Custom Resource Definition (CRD) + Controlador
CRD: Especificación de nuestro recurso. Puede contener todo lo
que sea necesario para nuestra aplicación
Controlador: Gestiona los recursos de Kubernetes necesarios y
comprueba que están funcionando del modo esperado
Consistencia eventual:
● Enfocar el diseño al estado deseado
● Recibiremos eventos sobre recursos nuevos y existentes
● El proceso debe ser idempotente
● Cada pieza debe ser capaz de arrancarse en un estado estable
_Resumen /2
Más información:
・ https://product.spotahome.com
Repositorios Open Source:
・ github.com/spotahome/kooper
・ github.com/spotahome/redis-operator
・ github.com/spotahome/service-level-operator
¡Gracias!

Más contenido relacionado

PDF
SCJP, Clase 9: Threads
PDF
Usando Twisted para hacer aplicaciones de escritorio no bloqueantes
PDF
SCJP, Clase 10: Strings, I/O
PDF
Clase9 threads
PDF
Programación Reactiva en Android
PPTX
Chap 15fpin
PDF
Administración de memoria en java
PPTX
Chap 15bpin
SCJP, Clase 9: Threads
Usando Twisted para hacer aplicaciones de escritorio no bloqueantes
SCJP, Clase 10: Strings, I/O
Clase9 threads
Programación Reactiva en Android
Chap 15fpin
Administración de memoria en java
Chap 15bpin

La actualidad más candente (7)

PPTX
Chap 15gpin
PPTX
Chap 15epin
PPTX
Chap 15dpin
PDF
PPTX
Chap 15cpin
PPTX
Equipo de Marketing de Paradigma Digital
PPTX
Chap 15apin
Chap 15gpin
Chap 15epin
Chap 15dpin
Chap 15cpin
Equipo de Marketing de Paradigma Digital
Chap 15apin
Publicidad

Similar a Julio Chana | Extendiendo kubernetes | Codemotion Madrid 2018 (20)

PDF
Docker y Kubernetes, en busca de la alta disponibilidad
PDF
Meetup TestingUy 2018 - Aprendiendo a Testear un Framework desde cero
PDF
The Dark Art of Container Monitoring - Spanish
PDF
Terraspace, the definitive terraform framework
PPTX
Systemd en Centos 7
PPTX
PDF
Cluster MySQL en Windows
PDF
Cloud Native Mexico - Introducción a Kubernetes
PDF
Cómo explotar EternalBlue en Windows Server 2012 R2
ODT
niveles de ejecución arranque y parada de los servicios
PDF
37 supervisión del sistema
PDF
Observa tus flotas de Kubernetes como un/a especialista con Grafana
PPTX
Meetup de kubernetes, conceptos básicos.
PDF
Meetup AWS User Group chile - Diciembre 2018
PDF
Hablemos de Systemd
ODP
Presentacion instaladores os debian centos
PPTX
[Shared] ML Bootcamp - GDG Barcelona - Semana 4.pptx
PDF
Personalización Data Collectors
PDF
Control digital
PDF
Niveles de ejecución arranque y parada de los servicios
Docker y Kubernetes, en busca de la alta disponibilidad
Meetup TestingUy 2018 - Aprendiendo a Testear un Framework desde cero
The Dark Art of Container Monitoring - Spanish
Terraspace, the definitive terraform framework
Systemd en Centos 7
Cluster MySQL en Windows
Cloud Native Mexico - Introducción a Kubernetes
Cómo explotar EternalBlue en Windows Server 2012 R2
niveles de ejecución arranque y parada de los servicios
37 supervisión del sistema
Observa tus flotas de Kubernetes como un/a especialista con Grafana
Meetup de kubernetes, conceptos básicos.
Meetup AWS User Group chile - Diciembre 2018
Hablemos de Systemd
Presentacion instaladores os debian centos
[Shared] ML Bootcamp - GDG Barcelona - Semana 4.pptx
Personalización Data Collectors
Control digital
Niveles de ejecución arranque y parada de los servicios
Publicidad

Más de Codemotion (20)

PDF
Fuzz-testing: A hacker's approach to making your code more secure | Pascal Ze...
PDF
Pompili - From hero to_zero: The FatalNoise neverending story
PPTX
Pastore - Commodore 65 - La storia
PPTX
Pennisi - Essere Richard Altwasser
PPTX
Michel Schudel - Let's build a blockchain... in 40 minutes! - Codemotion Amst...
PPTX
Richard Süselbeck - Building your own ride share app - Codemotion Amsterdam 2019
PPTX
Eward Driehuis - What we learned from 20.000 attacks - Codemotion Amsterdam 2019
PPTX
Francesco Baldassarri - Deliver Data at Scale - Codemotion Amsterdam 2019 -
PDF
Martin Förtsch, Thomas Endres - Stereoscopic Style Transfer AI - Codemotion A...
PDF
Melanie Rieback, Klaus Kursawe - Blockchain Security: Melting the "Silver Bul...
PDF
Angelo van der Sijpt - How well do you know your network stack? - Codemotion ...
PDF
Lars Wolff - Performance Testing for DevOps in the Cloud - Codemotion Amsterd...
PDF
Sascha Wolter - Conversational AI Demystified - Codemotion Amsterdam 2019
PDF
Michele Tonutti - Scaling is caring - Codemotion Amsterdam 2019
PPTX
Pat Hermens - From 100 to 1,000+ deployments a day - Codemotion Amsterdam 2019
PPTX
James Birnie - Using Many Worlds of Compute Power with Quantum - Codemotion A...
PDF
Don Goodman-Wilson - Chinese food, motor scooters, and open source developmen...
PDF
Pieter Omvlee - The story behind Sketch - Codemotion Amsterdam 2019
PDF
Dave Farley - Taking Back “Software Engineering” - Codemotion Amsterdam 2019
PDF
Joshua Hoffman - Should the CTO be Coding? - Codemotion Amsterdam 2019
Fuzz-testing: A hacker's approach to making your code more secure | Pascal Ze...
Pompili - From hero to_zero: The FatalNoise neverending story
Pastore - Commodore 65 - La storia
Pennisi - Essere Richard Altwasser
Michel Schudel - Let's build a blockchain... in 40 minutes! - Codemotion Amst...
Richard Süselbeck - Building your own ride share app - Codemotion Amsterdam 2019
Eward Driehuis - What we learned from 20.000 attacks - Codemotion Amsterdam 2019
Francesco Baldassarri - Deliver Data at Scale - Codemotion Amsterdam 2019 -
Martin Förtsch, Thomas Endres - Stereoscopic Style Transfer AI - Codemotion A...
Melanie Rieback, Klaus Kursawe - Blockchain Security: Melting the "Silver Bul...
Angelo van der Sijpt - How well do you know your network stack? - Codemotion ...
Lars Wolff - Performance Testing for DevOps in the Cloud - Codemotion Amsterd...
Sascha Wolter - Conversational AI Demystified - Codemotion Amsterdam 2019
Michele Tonutti - Scaling is caring - Codemotion Amsterdam 2019
Pat Hermens - From 100 to 1,000+ deployments a day - Codemotion Amsterdam 2019
James Birnie - Using Many Worlds of Compute Power with Quantum - Codemotion A...
Don Goodman-Wilson - Chinese food, motor scooters, and open source developmen...
Pieter Omvlee - The story behind Sketch - Codemotion Amsterdam 2019
Dave Farley - Taking Back “Software Engineering” - Codemotion Amsterdam 2019
Joshua Hoffman - Should the CTO be Coding? - Codemotion Amsterdam 2019

Último (20)

PDF
Instrucciones simples, respuestas poderosas. La fórmula del prompt perfecto.
PPTX
Power Point Nicolás Carrasco (disertación Roblox).pptx
PDF
Diapositiva proyecto de vida, materia catedra
PDF
Calidad desde el Docente y la mejora continua .pdf
PPTX
RAP02 - TECNICO SISTEMAS TELEINFORMATICOS.pptx
PPT
introduccion a las_web en el 2025_mejoras.ppt
PPTX
IA de Cine - Como MuleSoft y los Agentes estan redefiniendo la realidad
PPTX
sa-cs-82-powerpoint-hardware-y-software_ver_4.pptx
PDF
MÓDULO DE CALOR DE GRADO DE MEDIO DE FORMACIÓN PROFESIONAL
PDF
programa-de-estudios-2011-guc3ada-para-el-maestro-secundarias-tecnicas-tecnol...
PPTX
historia_web de la creacion de un navegador_presentacion.pptx
PDF
Maste clas de estructura metálica y arquitectura
PPTX
REDES INFORMATICAS REDES INFORMATICAS.pptx
PDF
Estrategia de apoyo tecnología grado 9-3
PPTX
Presentación PASANTIAS AuditorioOO..pptx
PPTX
Propuesta BKP servidores con Acronis1.pptx
PPTX
Presentación de Redes de Datos modelo osi
PDF
5.1 Pinch y Bijker en libro Actos, actores y artefactos de Bunch Thomas (coor...
PPTX
Sesion 1 de microsoft power point - Clase 1
PDF
Influencia-del-uso-de-redes-sociales.pdf
Instrucciones simples, respuestas poderosas. La fórmula del prompt perfecto.
Power Point Nicolás Carrasco (disertación Roblox).pptx
Diapositiva proyecto de vida, materia catedra
Calidad desde el Docente y la mejora continua .pdf
RAP02 - TECNICO SISTEMAS TELEINFORMATICOS.pptx
introduccion a las_web en el 2025_mejoras.ppt
IA de Cine - Como MuleSoft y los Agentes estan redefiniendo la realidad
sa-cs-82-powerpoint-hardware-y-software_ver_4.pptx
MÓDULO DE CALOR DE GRADO DE MEDIO DE FORMACIÓN PROFESIONAL
programa-de-estudios-2011-guc3ada-para-el-maestro-secundarias-tecnicas-tecnol...
historia_web de la creacion de un navegador_presentacion.pptx
Maste clas de estructura metálica y arquitectura
REDES INFORMATICAS REDES INFORMATICAS.pptx
Estrategia de apoyo tecnología grado 9-3
Presentación PASANTIAS AuditorioOO..pptx
Propuesta BKP servidores con Acronis1.pptx
Presentación de Redes de Datos modelo osi
5.1 Pinch y Bijker en libro Actos, actores y artefactos de Bunch Thomas (coor...
Sesion 1 de microsoft power point - Clase 1
Influencia-del-uso-de-redes-sociales.pdf

Julio Chana | Extendiendo kubernetes | Codemotion Madrid 2018

  • 1. Extendiendo Kubernetes: diseño de un operador Madrid | 30 Noviembre - 1 Diciembre, 2018 Julio Chana
  • 2. Julio Chana Graduado en Ingeniería Informática por la Universidad Politécnica de Madrid SRE en Spotahome Twitter / @jchanam GitHub / @jchanam _Sobre mí
  • 4. _¿Por qué extender Kubernetes? ¿Qué permite Kubernetes? • Hacer despliegues simples de microservicios • Crear balanceadores • Guardar secretos • Etc
  • 5. _¿Por qué extender Kubernetes? ¿Qué necesitamos? • Desplegar software complejo ○ Varias piezas ○ Control individual ○ Orden específico • Control del ciclo de vida ○ Recuperación de errores ○ Cambios de estado ○ etc
  • 6. _¿Por qué extender Kubernetes? /2 Ejemplo - Redis Failover Master Slave Slave Sentinel Sentinel Sentinel Redis +info: redis.io/topics/sentinel
  • 7. _¿Por qué extender Kubernetes? /3 Opción 1: Init-containers + mucha imaginación, pero... • Scripts para comprobar prerrequisitos ○ Complejidad ○ Difícil testeo ○ No es resiliente ○ etc • No permite controlar varias piezas de forma simultánea
  • 8. Opción 2: Charts de Helm, pero… • No permite requisitos previos • No comprueba estado actual de forma constante • Especifica los componentes que quiero, del modo que quiero, pero no cómo llegar a ello _¿Por qué extender Kubernetes? /3 +info: helm.sh
  • 9. Solución: Crear nuestros propios controladores para implementar la lógica operacional de la aplicación. Beneficios: • Gestión específica • Orden necesario • Control completo • Mantenimiento contínuo • Estado fiable _¿Por qué extender Kubernetes? /4
  • 11. _Cómo extender Kubernetes Pod C ReplicaSet Pod’ C Deployment ReplicaSet’ Pod C Pod’ C Recurso mínimo: Pod ↳ ReplicaSet: gestiona ciclo de vida de Pods ↳ Deployment: gestiona versiones de ReplicaSets
  • 12. Igual que Kubernetes, crearemos nuestros recursos y trabajaremos sobre ellos: _Cómo extender Kubernetes /2 CRD Controller Operator+ = 1. Definición 2. Lógica 3. Éxito
  • 13. _Cómo extender Kubernetes /3 Crear CRD (Custom Resource Definition) == Extender API Kubernetes APIs Pod Statefulset Service Role RoleBinding PersistentVolume Deployment PodDisruptionBudget Job DaemonSet Secret API Extensions + MyCustomResource_A MyCustomResource_B ... MyCustomResource_Z Son como el resto de recursos: • Usan recursos existentes • Configurados de forma específica • Con estado propio
  • 14. _Cómo extender Kubernetes /4 CRD: Definición de los objetos que va a gestionar el controlador Mínimo dos componentes: • TypeMeta • Kind • APIVersion • ObjectMeta • Name • Namespace • Labels • Annotations • etc
  • 15. _Cómo extender Kubernetes /4 Spec: información propia que necesitaremos. Estructura libre. Status: información del estado de nuestros objetos.
  • 16. _Cómo extender Kubernetes /5 Una vez se tenga definido el CRD, Kubernetes ofrece un autogenerador de código, que creará las interfaces que nos permitirán interactuar con nuestros recursos. Con esto tendremos una API similar a la de cualquier otro recurso de Kubernetes.
  • 17. _Cómo extender Kubernetes /6 CRD Controller Operator+ = ListerWatcher Handler+ ListerWatcher: ・ ‘Lister’: permite listar los recursos existentes ・ ‘Watcher’: escucha eventos de cambio de estado Handler: recibirá 3 tipos de llamadas: ・ ‘Add’: define el estado esperado del recurso ・ ‘Update’: define que un recurso se ha modificado ・ ‘Delete’: define que el recurso debe dejar de existir
  • 18. _Cómo extender Kubernetes /7 Gestión de los eventos: 1. Simplificación -> Add == Update a. Siempre recibimos el estado deseado (level trigger) b. Menos lógica c. Sólo un flujo de trabajo 2. ‘Reconcilitation loop’ a. Un evento de ‘add’ por cada recurso cada N segundos b. Resiliencia frente a fallos 3. Borrado por el Garbage Collector de Kubernetes +info: github.com/spotahome/kooper
  • 20. _Ejemplo: Redis Operator Pasos que lleva a cabo el controlador: 1. Registrar CRD 2. Quedarse a la espera de recibir los posibles eventos a. Cuando llega un evento ‘Add’ i. “Ensure”: asegurarse de que todos los recursos existen (y si no, crearlos) ii. “CheckAndHeal”: Comprobar que cada recurso está en el estado esperado b. Cuando llega un evento “Delete” i. En principio no es necesaria intervención
  • 21. _Ejemplo: Redis Operator /2 Ensure Inicio de los recursos por defecto. Cada recurso no conoce del resto 1. Redis -> Nodos Máster 2. Sentinel -> Monitorizándose a sí mismos Master Master Master Sentinel Sentinel Sentinel Redis
  • 22. _Ejemplo: Redis Operator /2 Check and Heal 1. Comprobar el número de nodos actuando como máster. Master Master Master Sentinel Sentinel Sentinel Redis
  • 23. _Ejemplo: Redis Operator /2 Check and Heal 1. Comprobar el número de nodos actuando como máster. Si > 1: a. Elegir un máster Master Master Master Sentinel Sentinel Sentinel Redis
  • 24. _Ejemplo: Redis Operator /2 Check and Heal 1. Comprobar el número de nodos actuando como máster. Si > 1: a. Elegir un máster b. Configurar el resto de nodos como esclavos de éste Master Slave Slave Sentinel Sentinel Sentinel Redis
  • 25. _Ejemplo: Redis Operator /2 Check and Heal 1. Comprobar el número de nodos actuando como máster. Si > 1: a. Elegir un máster b. Configurar el resto de nodos como esclavos de éste 2. Comprobar que todos los esclavos tengan el mismo máster Master Slave Slave Sentinel Sentinel Sentinel Redis
  • 26. _Ejemplo: Redis Operator /2 Check and Heal 1. Comprobar el número de nodos actuando como máster. Si > 1: a. Elegir un máster b. Configurar el resto de nodos como esclavos de éste 2. Comprobar que todos los esclavos tengan el mismo máster. Si no: a. Configurar los nodos con el máster correcto Master Slave Slave Sentinel Sentinel Sentinel Redis
  • 27. _Ejemplo: Redis Operator /2 Check and Heal 1. Comprobar el número de nodos actuando como máster. Si > 1: a. Elegir un máster b. Configurar el resto de nodos como esclavos de éste 2. Comprobar que todos los esclavos tengan el mismo máster. Si no: a. Configurar los nodos con el máster correcto 3. Comprobar que todos los Sentinel monitorizan al Redis máster Master Slave Slave Sentinel Sentinel Sentinel Redis
  • 28. _Ejemplo: Redis Operator /2 Check and Heal 1. Comprobar el número de nodos actuando como máster. Si > 1: a. Elegir un máster b. Configurar el resto de nodos como esclavos de éste 2. Comprobar que todos los esclavos tengan el mismo máster. Si no: a. Configurar los nodos con el máster correcto 3. Comprobar que todos los Sentinel monitorizan al Redis máster.Si no: a. Configurar todos los Sentinel para monitorizar este máster Master Slave Slave Sentinel Sentinel Sentinel Redis
  • 29. _Ejemplo: Redis Operator /2 Check and Heal 1. Comprobar el número de nodos actuando como máster. Si > 1: a. Elegir un máster b. Configurar el resto de nodos como esclavos de éste 2. Comprobar que todos los esclavos tengan el mismo máster. Si no: a. Configurar los nodos con el máster correcto 3. Comprobar que todos los Sentinel monitorizan al Redis máster.Si no: a. Configurar todos los Sentinel para monitorizar este máster Master Slave Slave Sentinel Sentinel Sentinel Redis
  • 30. _Ejemplo: Redis Operator /2 Check and Heal 1. Comprobar el número de nodos actuando como máster. Si > 1: a. Elegir un máster b. Configurar el resto de nodos como esclavos de éste 2. Comprobar que todos los esclavos tengan el mismo máster. Si no: a. Configurar los nodos con el máster correcto 3. Comprobar que todos los Sentinel monitorizan al Redis máster.Si no: a. Configurar todos los Sentinel para monitorizar este máster Master Slave Slave Sentinel Sentinel Sentinel Redis ESTADO ESPERADO
  • 31. _Ejemplo: Redis Operator /3 Pasos que lleva a cabo el controlador tras un ‘Delete’: ● En el caso de los elementos creados dentro de Kubernetes, el borrado lo gestiona el garbage collector mediante el “Owner Reference” ○ Define qué recursos dependen de él ○ Borra en cascada (de mayor a menor) ● Si hay elementos externos, sí que deberemos hacer limpieza desde el controlador.
  • 33. _Otros ejemplos Cert Manager: https://github.com/jetstack/cert-manager
  • 34. _Otros ejemplos Cert Manager: https://github.com/jetstack/cert-manager
  • 35. _Otros ejemplos Cert Manager: https://github.com/jetstack/cert-manager
  • 36. _Otros ejemplos /2 Prometheus Operator: https://github.com/coreos/prometheus-operator Service Level Operator: https://github.com/spotahome/service-level-operator Jaeger Operator: https://github.com/jaegertracing/jaeger-operator
  • 38. _Kooper Kooper es una librería que nos abstrae de los componentes de Kubernetes, facilitándonos crear los operadores: ・ Registra los CRD que definamos ・ Crea el controlador: ・ Lee los eventos de Kubernetes ・ Envía a nuestro handler los eventos con toda la información necesaria ・ Hace reintentos ・ Proporciona métricas +info: github.com/spotahome/kooper
  • 40. _Resumen Operador: Custom Resource Definition (CRD) + Controlador CRD: Especificación de nuestro recurso. Puede contener todo lo que sea necesario para nuestra aplicación Controlador: Gestiona los recursos de Kubernetes necesarios y comprueba que están funcionando del modo esperado
  • 41. Consistencia eventual: ● Enfocar el diseño al estado deseado ● Recibiremos eventos sobre recursos nuevos y existentes ● El proceso debe ser idempotente ● Cada pieza debe ser capaz de arrancarse en un estado estable _Resumen /2
  • 42. Más información: ・ https://product.spotahome.com Repositorios Open Source: ・ github.com/spotahome/kooper ・ github.com/spotahome/redis-operator ・ github.com/spotahome/service-level-operator ¡Gracias!