Skip to content

Tema:

Despliegue de aplicaciones utilizando helm

Desarrollo del tema.

Introducción a Helm

¿Qué es Helm?

Helm es un gestor de paquetes para Kubernetes, similar a apt o yum, pero orientado a aplicaciones en Kubernetes.
Permite empaquetar, versionar, instalar y actualizar aplicaciones de manera sencilla, evitando mantener múltiples manifiestos YAML repetidos.

En resumen: Helm simplifica el despliegue y la gestión de aplicaciones en Kubernetes.


Conceptos principales

Chart

  • Es el paquete básico de Helm.
  • Contiene todos los recursos para desplegar una aplicación (Deployments, Services, ConfigMaps, etc.).
  • Estructura típica de un chart:

Release

  • Una instancia de un chart ejecutándose en un cluster.
  • Ejemplo: un chart de mysql puede desplegar:
  • mysql-dev en el namespace dev.
  • mysql-prod en el namespace prod.

Repository

  • Lugar donde se almacenan y comparten charts.
  • Existen repositorios públicos (ArtifactHub, Bitnami) o privados (por ejemplo Harbor

Ventajas frente a YAML tradicional

YAML tradicional (kubectl apply) Helm (helm install)
Archivos repetidos por entorno Un chart parametrizable
Difícil de mantener/versionar Versionamiento y releases
Sin rollback nativo Rollback integrado
Cada equipo escribe sus manifiestos Charts reutilizables y compartidos

Laboratorio: Despliegue de manifiestos YAML

Descripción

La presente guía aborda la creacion de aplicaciones de kubernetes mediante plantillas de helm.

Objetivos

  • Realizar la configuración de recursos de kubernetes por medio de una plantilla de helm
  • Desplegar los recursos a través de comandos

Antes de comenzar

  • Contar con el acceso al ambiente del laboratorio

Conexion a ambiente de kubernetes

  1. Ingresar al servidor de laboratorio con la llave proporcionada.

    export LAB=X
    ssh student@lab-${LAB}-aio 
    

  2. Cambiar al usuario root

    sudo -i
    

  3. Proporcione accesos administrativos al cluster de Kubernetes

    export KUBECONFIG=/etc/rancher/rke2/rke2.yaml
    
    export PATH=$PATH:/var/lib/rancher/rke2/bin
    

Inicio de laboratorio

  1. Crear un nuevo namespace llamado myapp

    kubectl create ns myapp
    

  2. Crear una nueva carpeta llamada helm y acceder a ella.

    mkdir helm ; cd helm
    

  3. Dentro de esta carpeta vamos a crear una nueva plantilla de helm.

    helm create myapp
    

  4. Se creara una carpeta nueva llamda myapp que contiene todo lo necesario para poder desplegar nuestro aplicativo usando helm.

  5. Vamos a editar el archivo llamado values.yaml dentro de la carpeta de myapp, primeramente vamos a editar la parte de image de la siguiente manera.

    image:
      repository: harbor.34-83-59-151.nip.io/api-test/api-test
      # This sets the pull policy for images.
      pullPolicy: IfNotPresent
      # Overrides the image tag whose default is the chart appVersion.
      tag: "1.0"
    
    Recordar cambiar la direccion de harbor por la que tiene en su ambiente.

  6. Luego vamos a agregar la parte de imagePullSecrets

    imagePullSecrets:
      - name: regcred
    

  7. Luego la parte de Service.

    service:
      type: ClusterIP
      port: 8080
    

  8. Finalmente el Ingress

    ingress:
      enabled: true
      className: ""
      annotations: {}
        # kubernetes.io/ingress.class: nginx
        # kubernetes.io/tls-acme: "true"
      hosts:
        - host: myapp.34-83-59-151.nip.io
          paths:
            - path: /
              pathType: ImplementationSpecific
    
    De igual manera recuerde cambiar el host por el wildcard de su ambiente.

  9. Vamos a validar como quedan los manifiestos de kubernetes.

    helm template myapp ./myapp
    

  10. Finalmente instalamos nuestro aplicativo con el siguiente comando.

    helm install myapp ./myapp -n myapp
    

  11. Verificamos

    kubectl get pods -n myapp
    kubectl get svc -n myapp
    

  12. Finalmente vamos a actualizar la imagen de nuestro aplicativo con el siguiente comando.

    helm upgrade myapp ./myapp --set image.tag=1.1 -n myapp