orquestación de contenedores con kubernetes sgnext
TRANSCRIPT
Orquestación de contenedores con Kubernetes
Domingo Suarez Torres
domix
Historia
•Mi experiencia y mi necesidad
•¿Porque contenedores? ¿Porque Docker?
•¿Cloud?
•IaaS, PaaS, SaaS, FaaS
La necesidad
•Experimentación
•Retroalimentación
•¿Innovación?
Contenedores
• Virtualización muy ligera
• A nivel SO es un proceso
• Efímeros
• Desafortunadamente se ha convertido en moda
Retos• Contenedores deben comunicarse
• Monitoreo
• Recursos (CPU, MEM)
• Liveness
• Readdiness
• Configuración
• Administración de secretos (passwords, llaves privadas)
• ¿autoscaling? up-scale, down-scale
¿Como enfrento los retos?
Kubernetes (k8s)
• ~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
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
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
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
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
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
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/
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
apiVersion: extensions/v1beta1 kind: Ingress metadata: name: container-name spec: rules: - host: api.mycompany.com http: paths: - path: / backend: serviceName: container-name servicePort: 7137
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?
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)
Demo
¿Quien apuesta por k8s?