Se ha denunciado esta presentación.
Utilizamos tu perfil de LinkedIn y tus datos de actividad para personalizar los anuncios y mostrarte publicidad más relevante. Puedes cambiar tus preferencias de publicidad en cualquier momento.

Kubernetes para developers

63 visualizaciones

Publicado el

El despliegue de aplicaciones dentro de contenedores en producción cada vez está más extendido y, de todas las opciones de orquestación, Kubernetes (K8s) es la que, indiscutiblemente, está ganando la batalla.

Pero, si soy developer, ¿esto me importa? No debemos ver los contenedores y la orquestación de estos como algo “de sistemas”. Hay distintas razones por las que (nos) conviene saber de qué va esto.

La primera razón, y posiblemente la más importante, es que el uso de contenedores nos facilita la vida durante el desarrollo y nos ayuda a mantener nuestro entorno de trabajo limpio sin tener que lidiar con la instalación de diferentes versiones del mismo software, por ejemplo. Si nuestra “aplicación” consta de diferentes servicios, tener una manera de describirlos todos y sus dependencias simplifica enormemente el arranque y parada de estos servicios, pudiendolo hacer en bloque.

También hay que tener en cuenta que para que las aplicaciones puedan aprovechar todas las ventajas que Docker y Kubernetes ofrecen deben cumplir ciertas condiciones. Como developers, debemos tenerlo en cuenta a la hora de pensar la arquitectura y diseño de estas: cómo se les provee la configuración, cómo se deben comportar ante el escalado y la convivencia de versiones,...

Sabemos que los distintos entornos, (local, test, staging, preproducción, producción, …) deben tener la misma configuración o podemos encontrarnos con sorpresas desagradables a la hora de desplegar. Esto, que históricamente ha sido una utopía, con los contenedores es posible. En esta charla veremos cómo podemos arrancar en local un entorno lo más similar a producción, arrancando Kubernetes en local.

En nuestro sistema de CI, además de por homogeneización de entornos, también podemos sacar partido de tener nuestra aplicaciones “contenerizadas”. Veremos cómo integrar cualquier sistema de CI con Kubernetes para conseguir un Continuous Deployment real. A partir de aquí, dar el salto a Continuous Delivery es prácticamente trivial con K8s!

Por si estas razones no fueran suficientes, conocer los conceptos y el entorno en los que nuestras aplicaciones se despliegan nos ayudará a comunicarnos con DevOps y atajar juntos los problemas que puedan surgir. Durante la charla veremos los conceptos básicos de K8s y cómo podemos desplegarlo en AWS con Elastic Container Service for Kubernetes (EKS) para hacer pruebas o, quién sabe, poder estar más cerca de ser un Full Cycle Developer.

Publicado en: Software
  • Sé el primero en comentar

  • Sé el primero en recomendar esto

Kubernetes para developers

  1. 1. MAD · NOV 23-24 · 2018 Kubernetes para developers Jaime Perera @jaimeperera MAD · NOV 23-24 · 2018
  2. 2. MAD · NOV 23-24 · 2018
  3. 3. 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
  4. 4. LEVEL 1 - Developer modo “Yo soy desarrollador, a mi no me cuentes historias”
  5. 5. Sysadmin Developer
  6. 6. LEVEL 2: Developer contaINer-aware EN local
  7. 7. 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
  8. 8. 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
  9. 9. Contenedores Docker
  10. 10. 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?
  11. 11. Imágenes
  12. 12. Dockerfile
  13. 13. (Micro)servicios Muchas piezas
  14. 14. Onboarding
  15. 15. ● Open-source ● Automatización de containers: ○ Gestión ○ Despliegue ○ Escalado ● Clúster de máquinas
  16. 16. ¿Por qué K8s? ● Escalado ● Zero downtime ● Microservicios ● Instalaciones portables ● Monitorización salud del sistema ● Balanceo de carga ● Service discovery
  17. 17. Elementos kubernetes ● Nodes ● Pods ● Deployments ● Services ● Volumes ● Persistent Volumes ● Volume Claims
  18. 18. Nodos
  19. 19. Pods
  20. 20. Pods
  21. 21. Deployments
  22. 22. Services
  23. 23. K8s en local ● Instalación en Linux ● Minikube ● Docker for Mac / Docker for Windows
  24. 24. 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
  25. 25. 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
  26. 26. LEVEL 3 -DevOps
  27. 27. ¡QUÉ RARO! EN LOCAL FUNCIONA...
  28. 28. 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.
  29. 29. 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
  30. 30. LEVEL 4 - Cloud Native Developer
  31. 31. 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
  32. 32. High Observability Principle
  33. 33. Cloud-native App: Logs externos y centralizados
  34. 34. Cloud-native App: Logs externos y centralizados
  35. 35. Cloud-native App: Health checks
  36. 36. Cloud-native App: Trazabilidad
  37. 37. Image Immutability Principle Necesario tener el estado y la configuración externalizadas
  38. 38. 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
  39. 39. Cloud-native App: Configuración externalizada Ejemplo: Config Maps
  40. 40. Cloud-native App: Configuración externalizada Ejemplo: Consul
  41. 41. LevEL 5 - Full Cycle Developer
  42. 42. https://medium.com/netflix-techblog/full-cycle-developers-at-netflix-a08c31f83249
  43. 43. https://container-solutions.com/kubernetes-deployment-strategies/
  44. 44. Cambio de versión (rolling update)
  45. 45. Cambio de versión (1/2)
  46. 46. Cambio de versión (2/2)
  47. 47. Compatibilidad entre versiones No-broken changes: ● Base de datos ● API ● Eventos emitidos
  48. 48. Cloud Kubernetes
  49. 49. Amazon Elastic Container Service for Kubernetes (EKS) Totalmente estándar Despliegue sencillo
  50. 50. 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
  51. 51. “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
  52. 52. Continue? ● https://kubernetes.io/ ● https://labs.play-with-k8s.com/ ● The Kubernetes Book (@nigelpoulton) ● Service Mesh (Istio)

×