MAD · NOV 23-24 · 2018
Kubernetes para developers
Jaime Perera
@jaimeperera
MAD · NOV 23-24 · 2018
MAD · NOV 23-24 · 2018
1. “Yo soy desarrollador, a mi no me cuentes historias”
2. Developer container-aware en local
3. DevOps Role
4. Cloud native developer
5. Full cycle developer
Levels
LEVEL 1 - Developer modo
“Yo soy desarrollador, a mi no me
cuentes historias”
Sysadmin
Developer
LEVEL 2: Developer
contaINer-aware EN local
Infraestructura en local
● Instalación en local de piezas de infraestructura (bases de datos, …)
● Divergencia de versiones y/o configuración entre:
○ Lo que tiene cada miembro del equipo en local
○ Lo que tenemos en local frente a lo que hay en otros entornos
● Versiones y/o configuración diferente según el proyecto
Contenedores
● Envoltorios de un software en un sistema de archivos
● Contienen todo lo necesario para ejecutarlo
○ código
○ runtime
○ herramientas
○ librerías del sistema
● “Mini-server”
● El software se ejecuta igual, independientemente del entorno
● Docker es la tecnología más extendida
Contenedores Docker
Mis aplicaciones en local
● ¿Cómo se ejecuta mi aplicación?
● ¿Necesita alguna configuración, variable de entorno, …?
● ¿Tengo algún requerimiento de sistema de ficheros? (carpeta /data)
● ¿En qué puertos escucha mi aplicación?
Imágenes
Dockerfile
(Micro)servicios
Muchas piezas
Onboarding
● Open-source
● Automatización de
containers:
○ Gestión
○ Despliegue
○ Escalado
● Clúster de máquinas
¿Por qué K8s?
● Escalado
● Zero downtime
● Microservicios
● Instalaciones portables
● Monitorización salud del sistema
● Balanceo de carga
● Service discovery
Elementos kubernetes
● Nodes
● Pods
● Deployments
● Services
● Volumes
● Persistent Volumes
● Volume Claims
Nodos
Pods
Pods
Deployments
Services
K8s en local
● Instalación en Linux
● Minikube
● Docker for Mac / Docker for Windows
apiVersion: extensions/v1beta1
kind: Deployment
spec:
replicas: 1
template:
metadata:
labels:
app: my-redis
spec:
containers:
- name: my-redis
image: redis:3
env:
ports:
- containerPort: 6379
name: redis
protocol: TCP
Definición de elementos (modelo declarativo)
redis-deployment.yaml
kubectl
# Listar los pods desplegados
$ kubectl get pods
# Listar los servicios desplegados
$ kubectl get services
#Mostrar información detallada sobre el servico nginx-svc
$ kubectl describe services nginx-svc
# Eliminar el servicio nginx-svc
$ kubectl delete service nginx-svc
# Desplegar los artefactos descritos en redis-deployment.yaml
$ kubectl apply -f redis-deployment.yaml
# Eliminar los artefactos descritos en redis-deployment.yaml
$ kubectl delete -f redis-deployment.yaml
LEVEL 3 -DevOps
¡QUÉ RARO!
EN LOCAL FUNCIONA...
CI: Cambios respecto enfoque tradicional
● La manera de empaquetar cambia: contenedores
● La manera de distribuir cambia
● Hacer revert de los cambios es trivial con un buen tageo de imágenes
○ Cambios en el esquema que no se puedan deshacer automáticamente.
Docker registry / Docker hub
● Almacén para las imágenes
● Privados o públicos
● Por defecto https://hub.docker.com/
● Existe versión dockerizada del registro
● Comandos:
$ docker pull redis
$ docker push jaimeperera/demo-docker
LEVEL 4 - Cloud Native
Developer
Cloud Native Container Design (Red Hat)
1. Single Concern Principle
2. High Observability Principle
3. Life-cycle Conformance Principle
4. Image Immutability Principle
5. Process Disposability Principle
6. Self-Containment Principle
7. Runtime Confinement Principle
High Observability Principle
Cloud-native App: Logs externos y centralizados
Cloud-native App: Logs externos y centralizados
Cloud-native App: Health checks
Cloud-native App: Trazabilidad
Image Immutability Principle
Necesario tener el estado y la configuración externalizadas
Process Disposability Principle
“There are many reasons to replace a
container, such as failing a health check,
scaling down the application, migrating
the containers to a different host, platform
resource starvation, or another issue”
Necesario tener el estado y la configuración externalizadas
Cloud-native App: Configuración externalizada
Ejemplo: Config Maps
Cloud-native App: Configuración externalizada
Ejemplo: Consul
LevEL 5 - Full Cycle Developer
https://medium.com/netflix-techblog/full-cycle-developers-at-netflix-a08c31f83249
https://container-solutions.com/kubernetes-deployment-strategies/
Cambio de versión (rolling update)
Cambio de versión (1/2)
Cambio de versión (2/2)
Compatibilidad entre versiones
No-broken changes:
● Base de datos
● API
● Eventos emitidos
Cloud Kubernetes
Amazon Elastic Container Service for Kubernetes (EKS)
Totalmente estándar Despliegue sencillo
Prerrequisitos
● IAM role con los permisos necesarios para la creación de los recursos
○ AmazonEKSClusterPolicy
○ AmazonEKSServicePolicy
● VPC (La podemos crear con una plantilla de CloudFormation)
● Security group
● Desplegar en una zona que soporte EKS. EU (Ireland) la soporta
“Modern developers must be
fluent in a programming language
to implement the business
functionality, and equally fluent in
cloud native technologies to
address the non-functional
infrastructure level requirements”
Bilgin Ibryam
Continue?
● https://kubernetes.io/
● https://labs.play-with-k8s.com/
● The Kubernetes Book (@nigelpoulton)
● Service Mesh (Istio)
Kubernetes para developers
Kubernetes para developers

Kubernetes para developers