Orquestación de contenedores con Kubernetes SGNext

23
Orquestación de contenedores con Kubernetes Domingo Suarez Torres domix [email protected]

Transcript of Orquestación de contenedores con Kubernetes SGNext

Page 1: Orquestación de contenedores con Kubernetes SGNext

Orquestación de contenedores con Kubernetes

Domingo Suarez Torres

domix

[email protected]

Page 2: Orquestación de contenedores con Kubernetes SGNext

Historia

•Mi experiencia y mi necesidad

•¿Porque contenedores? ¿Porque Docker?

•¿Cloud?

•IaaS, PaaS, SaaS, FaaS

Page 3: Orquestación de contenedores con Kubernetes SGNext

La necesidad

•Experimentación

•Retroalimentación

•¿Innovación?

Page 4: Orquestación de contenedores con Kubernetes SGNext

Contenedores

• Virtualización muy ligera

• A nivel SO es un proceso

• Efímeros

• Desafortunadamente se ha convertido en moda

Page 5: Orquestación de contenedores con Kubernetes SGNext

Retos• Contenedores deben comunicarse

• Monitoreo

• Recursos (CPU, MEM)

• Liveness

• Readdiness

• Configuración

• Administración de secretos (passwords, llaves privadas)

• ¿autoscaling? up-scale, down-scale

Page 6: Orquestación de contenedores con Kubernetes SGNext

¿Como enfrento los retos?

Page 7: Orquestación de contenedores con Kubernetes SGNext

Kubernetes (k8s)

• Google

• ~15 años usando contenedores

• Creo Borg para administrar los contenedores

• A partir de la experiencia de Borg, nace k8s

• Open Source con más de 1250 contribuidores

Page 8: Orquestación de contenedores con Kubernetes SGNext

Características• Recursos de diversas maquinas (VMs, Bare-metal) como un cluster

• Control Plane (Nodos Master)

• controller-manager, scheduler, api-server

• Minion (Nodos worker)

• kubelet, kube-proxy

• Container Engine (Docker, rkt)

• DNS, Service Discovery, LoadBalancing

• Configuración, Secretos

• Federación

Page 9: Orquestación de contenedores con Kubernetes SGNext

Conceptos de k8s• Pod: Nombre generico para la unidad minima (no necesariamente) de

configuración de componentes que viven dentro de k8s

• Deployment: Tipo de pod que define la metadata de un grupo de contenedores. Asignación de recursos, volúmenes de File System

• Service: Tipo de pod para exponer y hacer disponible en el Service Discovery contenedores. Generalmente interno, se puede externo, pero no se recomienda.

• Ingress Controller: Tipo de pod que permite rutear trafico HTTP hacia el mundo exterior. Hostnames y URIs

Page 10: Orquestación de contenedores con Kubernetes SGNext

Caso de estudio

• Entidad federal de gobierno que administra las tributaciones en el Peru. Sunat

• Arquitectura de Microservicios con Java

• Centros de Datos propios en 2 ubicaciones geográficas diferentes

• Plataforma de recepción de declaraciones, pagos en linea con TC

Page 11: Orquestación de contenedores con Kubernetes SGNext

Uso de Kubernetes• Gestión de configuración de los contenedores, secretos.

• Services para balanceo de carga de las diversas replicas de los contenedores

• Administración de recursos (MEM, CPU)

• Políticas de autoscaling

• Probes

• Readiness: ¿El contenedor esta listo para recibir tráfico?

• Liveness: ¿El contenedor sigue vivo?

• Gestión de la configuración basada en Git, con plantillas

Page 12: Orquestación de contenedores con Kubernetes SGNext
Page 13: Orquestación de contenedores con Kubernetes SGNext

kind: Deployment metadata: name: container-name spec: replicas: 1 selector: matchLabels: name: container-name template: spec: imagePullSecrets: - name: registry containers: - image: registry.mycompany.com/app:0.0.1 name: container-name env: - name: DB_PASSWORD valueFrom: secretKeyRef: name: appsecrets key: DB_PASSWORD - name: REDIS_PASSWORD valueFrom: secretKeyRef: name: appsecrets key: REDIS_PASSWORD

Page 14: Orquestación de contenedores con Kubernetes SGNext

resources: requests: memory: "512Mi" cpu: "200m" limits: memory: "1024Mi" cpu: "300m" volumeMounts: - mountPath: /config name: config ports: - containerPort: 7137 protocol: TCP livenessProbe: httpGet: path: /healthcheck port: 17137 initialDelaySeconds: 50 periodSeconds: 50 readinessProbe: httpGet: path: /healthcheck port: 17137 initialDelaySeconds: 30 periodSeconds: 5 volumes: - name: config hostPath: # directory location on host path: /opt/app/microservices/config/

Page 15: Orquestación de contenedores con Kubernetes SGNext

apiVersion: autoscaling/v1 kind: HorizontalPodAutoscaler metadata: name: container-name spec: maxReplicas: 4 minReplicas: 1 targetCPUUtilizationPercentage: 75 scaleTargetRef: apiVersion: extensions/v1beta1 kind: Deployment name: container-name

Page 16: Orquestación de contenedores con Kubernetes SGNext

apiVersion: extensions/v1beta1 kind: Ingress metadata: name: container-name spec: rules: - host: api.mycompany.com http: paths: - path: / backend: serviceName: container-name servicePort: 7137

Page 17: Orquestación de contenedores con Kubernetes SGNext

Lecciones aprendidas•El consumo de recursos en una arquitectura de

microservicios es mayor.

•Monitoreo de la infraestructura es clave, sobre todo en bare-metal. CPU, FileSystem, Memoria, I/O, Networking.

•Automatización de aprovisionamiento de infraestructura (Ansible, Terraform)

•Los sysadmins tradicionales deben replantear su rol, esta cambiando todo. ¿DevOps?

Page 18: Orquestación de contenedores con Kubernetes SGNext

Siguientes pasos

• Usar Vault para administrar secrets, por ahora k8s almacena en base64 en plano en ETCD

• Terminar de integrar el pipeline de Bamboo para despliegue continuo

• Automatización de pruebas

• Promoción de binarios (bibliotecas, contenedores)

Page 19: Orquestación de contenedores con Kubernetes SGNext

Demo

Page 20: Orquestación de contenedores con Kubernetes SGNext

¿Quien apuesta por k8s?

Page 21: Orquestación de contenedores con Kubernetes SGNext
Page 22: Orquestación de contenedores con Kubernetes SGNext
Page 23: Orquestación de contenedores con Kubernetes SGNext

¿Preguntas?Domingo Suarez Torres

domix

[email protected]