Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Orquestación de contenedores con Kubernetes SGNext

Orquestación de contenedores con Kubernetes SGNext

Esta sesión comparte desde un punto de vista técnico las experiencias y aprendizajes obtenidos al orquestar contenedores usando la tecnología Kubernetes en SUNAT, la dependencia de gobierno federal en Perú encargada de la administración tributaria.

Domingo Suarez Torres

June 22, 2017
Tweet

More Decks by Domingo Suarez Torres

Other Decks in Technology

Transcript

  1. Contenedores • Virtualización muy ligera • A nivel SO es

    un proceso • Efímeros • Desafortunadamente se ha convertido en moda
  2. Retos • Contenedores deben comunicarse • Monitoreo • Recursos (CPU,

    MEM) • Liveness • Readdiness • Configuración • Administración de secretos (passwords, llaves privadas) • ¿autoscaling? up-scale, down-scale
  3. 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
  4. 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
  5. 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
  6. 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
  7. 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
  8. 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
  9. 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/
  10. 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
  11. apiVersion: extensions/v1beta1 kind: Ingress metadata: name: container-name spec: rules: -

    host: api.mycompany.com http: paths: - path: / backend: serviceName: container-name servicePort: 7137
  12. 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?
  13. 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)