GNU/Linux >> Tutoriales Linux >  >> Cent OS

Helm vs Kustomize:comparación cara a cara

Introducción

Kubernetes ofrece de forma nativa las herramientas principales necesarias para administrar la implementación de aplicaciones. Sin embargo, aunque la aplicación de manifiestos YAML sin procesar es un proceso sencillo, el desarrollo en un entorno de microservicios rápidamente se sale de control con la cantidad de implementaciones necesarias para admitir un sistema completo.

Este artículo compara dos herramientas populares que tienen como objetivo simplificar la administración de la implementación de aplicaciones:Helm y Kustomize.

Helm:características clave

Helm es un administrador de paquetes para Kubernetes. Ayuda a instalar y administrar aplicaciones de Kubernetes mediante el uso de gráficos de timón, paquetes que contienen archivos YAML modificados con el lenguaje de plantilla Go y funciones de plantilla de la biblioteca Sprig.

Al emplear las plantillas y los valores dinámicos, Helm ofrece la capacidad de ajustar una configuración a lo largo del ciclo de vida del desarrollo de software.

Con la introducción de Helm 3, Helm dejó de depender de Tiller para la generación dinámica de archivos de configuración. Esto elimina una de las principales preocupaciones de seguridad de Helm 2:los amplios permisos otorgados de forma predeterminada para todos los que tienen acceso a Tiller. Helm ahora cuenta con componentes de administración de acceso privilegiado con control de acceso basado en roles (RBAC) y definiciones de recursos personalizadas (CRD).

Otra propiedad útil de las plantillas de Helm es la encapsulación. Las definiciones YAML de los objetos de Kubernetes, como Implementación, Servicio, ConfigMap o un secreto de Kubernetes, se pueden encapsular en una sola plantilla. Esta propiedad es útil para la configuración en tiempo de implementación.

Un gráfico de timón simple consta de:

  • Un Gráfico.yaml archivo que declara el gráfico.
  • Un valores.yaml archivo que contiene parámetros de gráfico para usar con plantillas.
  • Un directorio de plantillas que contiene archivos de plantillas para crear el contenido del gráfico.

Un archivo de plantilla tiene la estructura de un archivo YAML, pero también contiene variables de plantilla que se reemplazan en la implementación con los valores proporcionados en values.yaml archivo.

Este es el contenido de un deployment.yaml típico parecerse a:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: {{ .Values.test }}
  labels:
    app: {{ .Values.test }}
spec:
  selector:
    matchLabels:
      app: {{ .Values.test }}
  template:
    metadata:
      labels:
        app: {{ .Values.test }}
        tier: web
    spec:
      containers:
      - name: {{ .Values.test }}
        image: {{ .Values.test }}     
        ports:
        - containerPort: 8080

En el ejemplo anterior, Helm busca en values.yaml archivo para el valor de la test variable. Los valores.yaml relevantes El archivo contiene la definición de la variable:

test: default

Basado en values.yaml definición, Helm crea el siguiente deployment.yaml archivo:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: default
  labels:
    app: default
spec:
  selector:
    matchLabels:
      app: default
  template:
    metadata:
      labels:
        app: default
        tier: web
    spec:
      containers:
      - name: default
        image: default     
        ports:
        - containerPort: 8080

Helm presenta la capacidad de anular los valores en values.yaml usando el --set indicador al emitir comandos de compilación en la CLI.

También incluye el helm lint comando que examina un gráfico en busca de problemas y verifica que se haya diseñado de acuerdo con los estándares.

Personalizar:funciones clave

Kustomize es una herramienta que utiliza capas y parches en lugar de plantillas para personalizar los objetos de Kubernetes. Presenta el kustomization.yaml archivo de manifiesto, en el que los usuarios almacenan configuraciones específicas de implementación.

La herramienta está integrada en kubectl a partir de la versión 1.14, lo que significa que ahora es nativa en Kubernetes. Sin embargo, también puede instalarlo de forma independiente.

Con Kustomize, los usuarios pueden administrar cualquier cantidad de configuraciones de Kubernetes, cada una con su personalización distinta, utilizando el enfoque declarativo. Permite a los desarrolladores definir múltiples versiones de una aplicación y administrarlas en subdirectorios. El directorio base contiene las configuraciones comunes, mientras que los subdirectorios contienen parches específicos de la versión.

Cada directorio contiene su kustomization.yaml archivo que especifica qué cambios deben realizarse en la configuración y qué recursos deben utilizarse. Por ejemplo, el siguiente kustomization.yaml archivo agrega una etiqueta común app:test a ambos deployment.yaml y servicio.yaml en el directorio base:

commonLabels:  
  app: my-wordpress
resources:
- deployment.yaml
- service.yaml

Luego, los cambios se aplican escribiendo el siguiente comando en la línea de comando:

kubectl apply -k base

El comando es diferente si Kustomize se usa como una herramienta independiente:

kustomize build base | kubectl apply -f -

Helm y Kubernetes:pros y contras

Ventajas

  • Helm ofrece muchas funciones que van más allá de la simple administración de configuración de implementación de aplicaciones, como empaquetado, enlaces y reversiones.
  • Simplifica la instalación de la aplicación al permitir que los usuarios establezcan valores predeterminados que pueden configurar aún más con los valores si es necesario.
  • Helm es bien conocido por los desarrolladores, tiene muchos usuarios y un excelente soporte en línea.
  • Las funciones de plantilla de Helm permiten introducir condicionales y bucles, definir ayudantes y acceder a la biblioteca de funciones de Sprig.
  • Las aplicaciones más utilizadas tienen sus gráficos de Helm disponibles en línea, lo que ahorra tiempo y aumenta la productividad.

Contras

  • Helm agrega más capas de abstracción y tiene una curva de aprendizaje pronunciada.
  • Limita la personalización de aplicaciones a opciones de configuración preexistentes.
  • Las plantillas son propensas a errores, especialmente en términos de alineación adecuada de YAML.
  • Helm no es compatible de forma nativa en Kubernetes, lo que crea una dependencia externa.
  • A menudo es imperativo. Helm inyecta valores en las plantillas en tiempo de ejecución, por lo que si la plantilla cambia, el sistema puede diferir de lo que espera el usuario.
  • Los gráficos aún requieren personalizaciones en tiempo de ejecución, lo que dificulta su administración al implementar la canalización de CI/CD.
  • Las plantillas menos legibles conducen inevitablemente a una menor capacidad de personalización con el tiempo.
  • Sufre de problemas de seguridad derivados de la falta de visibilidad y transparencia durante la instalación de las aplicaciones.

Personalizar y Kubernetes:pros y contras

Ventajas

  • Personalizar es fácil de usar.
  • Es declarativo, alineado con la filosofía de Kubernetes.
  • Kustomize admite un modelo de base heredada, lo que lo hace escalar mejor que Helm.
  • Usar la versión nativa integrada en kubectl elimina las dependencias externas.
  • Facilita el uso de aplicaciones estándar.
  • Utiliza solo archivos YAML sin formato.

Contras

  • Personalizar no ofrece muchas funciones.
  • No está diseñado para seguir el principio DRY (Don't Repeat Yourself).
  • Los usuarios deben declarar manualmente los recursos y parches en kustomization.yaml y el archivo debe actualizarse manualmente cada vez que se agrega un nuevo archivo.
  • La versión nativa integrada en kubectl es mucho más antigua que la versión independiente actual.
  • Es difícil encontrar soporte en línea para Kustomize.

Kustomize vs Helm:tabla comparativa

¿Cómo elegir?

Para decidir si optar por Helm o Kustomize, considere lo siguiente:

  • Elija Personalizar si planea escribir todas las configuraciones por su cuenta y posee una buena comprensión de cómo funciona YAML. Si bien Kustomize le permite realizar personalizaciones complicadas rápidamente, requiere que pueda visualizar cómo encajan los parches y las capas.
  • Por otro lado, si desea que sus desarrolladores puedan agregar nuevas aplicaciones y servicios de una manera fácil y segura, la creación de gráficos de Helm es una mejor solución.
  • Otra razón para elegir Helm es la necesidad de reducir la cantidad de tiempo que pasa con los archivos YAML. Las plantillas de Helm tienen argumentos que facilitan la comprensión de cómo funcionan los servicios sin profundizar demasiado en YAML.

Dado que tanto Helm como Kustomize ofrecen beneficios específicos de la herramienta y se complementan bien, el mejor curso de acción sería usar las dos herramientas juntas. Helm es particularmente útil para empaquetar, compartir e instalar aplicaciones que están bien definidas, mientras que Kustomize funciona mejor para las modificaciones de última hora de las aplicaciones de Kubernetes existentes.


Cent OS
  1. PostgreSQL Vs MySQL:una comparación detallada

  2. Comprender YAML para Ansible

  3. YAML para principiantes

  4. Comparación de servidores multimedia

  5. Comparación de fechas en Bash

Cómo arreglar el timón no tiene un error de lanzamiento implementado

Cómo usar el comando helm install

OLTP frente a OLAP:una comparación exhaustiva

API SOAP vs REST:comparación directa

Cómo implementar PostgreSQL en Kubernetes

Cómo instalar Helm en Linux

    Característica Helm Personalizar
    Plantillas No
    Superposiciones No
    Embalaje No
    ganchos de validación No
    Restauraciones No
    Integración nativa de K8s No
    Naturaleza declarativa Principalmente imperativo
    Visibilidad y transparencia Débil Fuerte