Diagrama Helm para despliegue en Kubernetes

Disponible desde versión 4.2.0 de Onesait Platform

Introducción

El Center propone el despliegue de nuestras aplicaciones en Kubernetes y para elloi integra un diagrama qu e permite crear de forma sencilla diagramas Chart Helm.

Además, el objetivo del Center es automatizar los despliegues para poder instalar nuestra aplicación/producto en unos segundos sin apenas intervención manual. Esto es fundamental, máxime cuando se trata de una aplicación modularizada en diferentes microservicios, cuyo número de desplegables puede llegar fácilmente a varias decenas, junto con diferentes mapas de configuración, secretos, volúmenes de persistencia, reglas de routeado desde el exterior…

Tecnología: Helm

A la hora de desplegar una aplicación completa en Kubernetes, Helm es la tecnología predominante.

Con Helm, podemos aplantillar nuestra aplicación/producto en un Chart Helm mediante un conjunto de ficheros YAML. Cada fichero se corresponde con el descriptor de un elemento de nuestra aplicación en kubernetes. Por ejemplo: se tendrá un Deployment o Statefulset por cada módulo o microservicio, un Config-Map por cada configuración, un Secret por cada conjunto de propiedades ocultas… Ademas, es posible utilizar una notación para externalizar variables, de manera que un mismo Chart se pueda instalar en diferentes entornos adaptándose a las particularidades de cada uno, sin tener que hacer cambios en el Chart, simplemente configurando las variables para cada entorno.

A pesar de sus ventajas, desarrollar un Chart Helm puede ser una tarea tediosa, que requiere un conocimiento avanzado de modelado de objetos kubernetes, ya que cada elemento de la aplicación tiene que ser modelado con su correspondiente descriptor en YAML. Por ejemplo, el siguiente código se corresponde con el descriptor kubernetes de un único deployment sencillo:

apiVersion: apps/v1 kind: Deployment metadata: name: api-manager namespace: iot4cities spec: selector: matchLabels: workload.user.cattle.io/workloadselector: {{ .Values.iot4citiesk8s.apimanager.selector }} progressDeadlineSeconds: 600 replicas: 1 strategy: rollingUpdate: maxSurge: 25% maxUnavailable: 25% type: RollingUpdate template: metadata: labels: workload.user.cattle.io/workloadselector: {{ .Values.iot4citiesk8s.apimanager.selector }} spec: {{- if .Values.global.setNodesOnDeployments }} affinity: nodeAffinity: requiredDuringSchedulingIgnoredDuringExecution: nodeSelectorTerms: - matchExpressions: - key: {{ .Values.global.nodeKey }} operator: In values: {{- range .Values.global.workerNodes }} - {{ .node }} {{- end }} {{ end }} containers: - name: api-manager image: {{ .Values.iot4citiesk8s.apimanager.image.serverRepository }}:{{.Values.iot4citiesk8s.apimanager.image.serverTag }} resources: limits: cpu: {{ .Values.iot4citiesk8s.apimanager.limits.cpu }} memory: {{ .Values.iot4citiesk8s.apimanager.limits.memory }} requests: cpu: 1m memory: 1Mi imagePullPolicy: {{ .Values.iot4citiesk8s.apimanager.image.pullpolicy }} volumeMounts: - name: pvc-properties mountPath: {{ .Values.iot4citiesk8s.apimanager.storage.pvcproperties.mountPath }} imagePullSecrets: - name: {{ .Values.iot4citiesk8s.apimanager.imageCredentials.name }} restartPolicy: Always terminationGracePeriodSeconds: 30 volumes: - name: pvc-properties persistentVolumeClaim: claimName: {{ .Values.iot4citiesk8s.apimanager.storage.pvcproperties.pvcName }}

Diagramas Helm en Center

Onesait Platform Center, como herramienta aceleradora para el soporte al desarrollo de aplicaciones ofrece una herramienta gráfica para facilitar esta tarea mediante el modelado del Chart Helm en un Diagrama.

Para ello, en la sección de Diagramas de un proyecto, es posible crear uno o varios Diagramas Helm para el proyecto:

El editor de Charts Helm, consiste en un panel de elementos a la izquierda, que representan los objetos Kubernetes disponibles para modelar el diagrama, un Grid donde arrastrar dichos elementos y establecer relaciones entre ellos, y un panel de propiedades, donde es posible configurar las propiedades de cada elemento:

 

Como se puede observar, es posible modelar:

  • Deployments y Statefulsets con su correspondiente Servicio asociado.

  • Jobs para ejecugtar tareas dentro del cluster.

  • Config-Maps y Secrets, asociables a Deployments, Statefulsets y Jobs para que puedan utilizar los valores o como variables de entorno o como ficheros en el filesystem del contenedor.

  • Persistent Volume Claims, asociables a Deployments, Statefulset y Jobs para almacenamiento persistente mapeado en el filesystem del contenedor.

  • Persitent Volumes, asociables a Persistent Volume Claims, para que en el caso de soportarlo el entorno de destino, crear el almacenamiento Persistente de manera declarativa.

  • Ingress, para exponer servicios del cluster al exterior, típicamente los endpoints de la aplicación.

  • Credenciales de registro (global al chart) para durante la instalación poder descargar imágenes de contenedores de registros securizados.

  • Storage-class, para poder utilizar servicios de almacenamiento específicos del entorno de destino.

     

Una vez modelado el Chart de forma gráfica, es posible convertirlo en su equivalente ficheros Helm y descriptores YAML en el Gitlab asociado al proyecto o descargarlo al equipo local:

 

De este modo, desde la consola centralizada del Center, es posible aplantillar de nuestra aplicación/producto para su despliegue en Kubernetes, disponer de diferentes versiones de Hharts y probar diferentes configuraciones de despliegue, sin necesidad de tener un conocimiento profundo en la tecnologia de aplantillamiento, y facilitando la curva de aprendizaje ya que el usuario partirá de una versión generada del Chart Helm, desplegable y que podrá editar y re-desplegar e ir refinando según sus necesidades.