Gestión de Kubernetes Apps con HELM
+
Por: Mario Inga
@mario21ic
Who am I?
● Mario Inga Cahuana
● DevOps Engineer en BlazingSQL
● Software Developer
● Miembro de comunidades:
○ DevOps Perú
○ Cloud Native Peru
○ Docker Lima
● Security fan
● Metal m/
● twitter: @mario21ic
Tecnologías
● Docker
● Kubernetes
Docker
Kubernetes
Clustering
Container Orchestration
Scaling Pods
Declarative
Kubernetes Resources
Los problemas
- Manejo de diferentes versiones (tags, componentes, config, etc)
- Outputs (url de mi service, instrucciones)
- Condicionales?
- Distribución de mi recetario con varios parámetros.
- Instalar una solución más de una vez (namespace?)
- Instalar dicha solución con algunos cambios como: services,
pods, volumes, configmap, secrets, etc.
Spoiler: Kubernetes manifest no es dinámico!
Alternativas
- Repositorio de codigo: github, gitlab, bitbucket, etc
- Un buen Readme.md
- La vieja confiable “bash script”
- Le paso parametros
- Hacemos el clásico “sed”
- Realiza el “kubectl apply *.yml“
- Poner un sleep.
- Obtener la Url de un Service
- Imprimir la Url e indicaciones.
Helm
● El manejador de paquetes (charts) para Kubernetes.
● Es la mejor forma para encontrar, compartir
y usar aplicaciones hechas para Kubernetes.
● Opensource https://github.com/helm/helm
● Web Oficial https://helm.sh/
● Actualmente en “v3”
(No Tiller)
Helm
1. Manejo de la complejidad
2. Actualizaciones fáciles (helm upgrade)
3. Simple forma de compartir recetarios (Charts)
4. Rollbacks
5. Chart Testing
Chart
Helm es una herramienta para manejar Charts.
Charts son paquetes pre configurados de
recursos de Kubernetes.
En resumen:
Un Chart es un grupo de Kubernetes manifests.
Repository
Un lugar centralizado donde se pueden almacenarse Charts y compartir.
Nota: también puedes crearte tu propio Helm Repository
Mas informacion https://helm.sh/docs/topics/chart_repository/
CLI:
$ helm repo list
$ helm repo add stable https://kubernetes-charts.storage.googleapis.com
$ helm repo update
Helm Hub
Es el Repositorio público de Helm
https://hub.helm.sh/
CLI:
$ helm search hub redis
Releases
Es la manera de manejar las instalaciones de Charts obtenidos
mediante Repositorios en Kubernetes.
CLI:
$ helm install <nombre_release> <ubicacion del chart>
$ helm install <nombre_release> --set replicatCount=1 <ubicacion del chart>
$ helm status <nombre_release>
$ helm list
$ helm upgrade <nombre_release> <ubicacion del chart>
$ helm uninstall <nombre_release>
Helm Flow
$ helm client mychart/Chart.yaml Releases
$ helm list
K8s cluster
$ kubectl
get nodes
Bla bla bla...
Talk is cheap. Show me the
code!
Linus Torvalds
Demo time!
1. Navegar en el Hub de Helm e instalar un Wordpress.
2. Clonar y analizar el App https://github.com/mario21ic/devops-peru-meetup-mayo-2020
3. Generar un Release con nombre “demo1”, obtener k8s manifest y probar.
4. Generar otro Release con nombre “demo2”, 3 réplicas y Service de tipo “Load Balancer” finalmente
probar que sean independientes.
5. Actualizar el Release con una nueva versión del docker image.
6. Desinstalar el Release.
Demo App
1. Es una web hecha en Python
2. Obtiene e imprime la variable de entorno “MY_KEY” obtenido desde un Configmap.
3. Se conecta a Redis mediante el endpoint almacenado en un Configmap.
4. Hace get de un Key de Redis y aplica +1, luego lo imprime.
5. Imprime el Hostname del container.
6. Imprime la Versión actual del Docker Image
Helm graduation - 30 Abril
https://www.cncf.io/announcement/2020/04/30/cloud-native-computing-foundation-announces-helm-graduation/
Dudas o consultas?
Mario Inga
@mario21ic
“Gestión de Kubernetes Apps con HELM”
+

Manejo de packages en Kubernetes con Helm

  • 1.
    Gestión de KubernetesApps con HELM + Por: Mario Inga @mario21ic
  • 2.
    Who am I? ●Mario Inga Cahuana ● DevOps Engineer en BlazingSQL ● Software Developer ● Miembro de comunidades: ○ DevOps Perú ○ Cloud Native Peru ○ Docker Lima ● Security fan ● Metal m/ ● twitter: @mario21ic
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
    Los problemas - Manejode diferentes versiones (tags, componentes, config, etc) - Outputs (url de mi service, instrucciones) - Condicionales? - Distribución de mi recetario con varios parámetros. - Instalar una solución más de una vez (namespace?) - Instalar dicha solución con algunos cambios como: services, pods, volumes, configmap, secrets, etc. Spoiler: Kubernetes manifest no es dinámico!
  • 8.
    Alternativas - Repositorio decodigo: github, gitlab, bitbucket, etc - Un buen Readme.md - La vieja confiable “bash script” - Le paso parametros - Hacemos el clásico “sed” - Realiza el “kubectl apply *.yml“ - Poner un sleep. - Obtener la Url de un Service - Imprimir la Url e indicaciones.
  • 9.
    Helm ● El manejadorde paquetes (charts) para Kubernetes. ● Es la mejor forma para encontrar, compartir y usar aplicaciones hechas para Kubernetes. ● Opensource https://github.com/helm/helm ● Web Oficial https://helm.sh/ ● Actualmente en “v3” (No Tiller)
  • 10.
    Helm 1. Manejo dela complejidad 2. Actualizaciones fáciles (helm upgrade) 3. Simple forma de compartir recetarios (Charts) 4. Rollbacks 5. Chart Testing
  • 11.
    Chart Helm es unaherramienta para manejar Charts. Charts son paquetes pre configurados de recursos de Kubernetes. En resumen: Un Chart es un grupo de Kubernetes manifests.
  • 12.
    Repository Un lugar centralizadodonde se pueden almacenarse Charts y compartir. Nota: también puedes crearte tu propio Helm Repository Mas informacion https://helm.sh/docs/topics/chart_repository/ CLI: $ helm repo list $ helm repo add stable https://kubernetes-charts.storage.googleapis.com $ helm repo update
  • 13.
    Helm Hub Es elRepositorio público de Helm https://hub.helm.sh/ CLI: $ helm search hub redis
  • 14.
    Releases Es la manerade manejar las instalaciones de Charts obtenidos mediante Repositorios en Kubernetes. CLI: $ helm install <nombre_release> <ubicacion del chart> $ helm install <nombre_release> --set replicatCount=1 <ubicacion del chart> $ helm status <nombre_release> $ helm list $ helm upgrade <nombre_release> <ubicacion del chart> $ helm uninstall <nombre_release>
  • 15.
    Helm Flow $ helmclient mychart/Chart.yaml Releases $ helm list K8s cluster $ kubectl get nodes
  • 16.
    Bla bla bla... Talkis cheap. Show me the code! Linus Torvalds
  • 17.
    Demo time! 1. Navegaren el Hub de Helm e instalar un Wordpress. 2. Clonar y analizar el App https://github.com/mario21ic/devops-peru-meetup-mayo-2020 3. Generar un Release con nombre “demo1”, obtener k8s manifest y probar. 4. Generar otro Release con nombre “demo2”, 3 réplicas y Service de tipo “Load Balancer” finalmente probar que sean independientes. 5. Actualizar el Release con una nueva versión del docker image. 6. Desinstalar el Release.
  • 18.
    Demo App 1. Esuna web hecha en Python 2. Obtiene e imprime la variable de entorno “MY_KEY” obtenido desde un Configmap. 3. Se conecta a Redis mediante el endpoint almacenado en un Configmap. 4. Hace get de un Key de Redis y aplica +1, luego lo imprime. 5. Imprime el Hostname del container. 6. Imprime la Versión actual del Docker Image
  • 20.
    Helm graduation -30 Abril https://www.cncf.io/announcement/2020/04/30/cloud-native-computing-foundation-announces-helm-graduation/
  • 21.
    Dudas o consultas? MarioInga @mario21ic “Gestión de Kubernetes Apps con HELM” +