GNU/Linux >> Tutoriels Linux >  >> Cent OS

Helm vs Kustomize :comparaison directe

Présentation

Kubernetes offre nativement les outils de base nécessaires pour gérer le déploiement d'applications. Cependant, bien que l'application de manifestes YAML bruts soit un processus simple, le développement dans un environnement de microservice devient rapidement incontrôlable avec le nombre de déploiements nécessaires pour prendre en charge un système entier.

Cet article compare deux outils populaires qui visent à simplifier la gestion du déploiement d'applications :Helm et Kustomize.

Barre :Fonctionnalités clés

Helm est un gestionnaire de packages pour Kubernetes. Il aide à installer et à gérer les applications Kubernetes en utilisant des graphiques helm, des packages contenant des fichiers YAML modifiés à l'aide du langage de modèle Go et des fonctions de modèle de la bibliothèque Sprig.

En utilisant les modèles et les valeurs dynamiques, Helm offre la possibilité d'affiner une configuration tout au long du cycle de vie du développement logiciel.

Avec l'introduction de Helm 3, Helm a cessé de dépendre de Tiller pour la génération de fichiers de configuration dynamiques. Cela élimine l'un des principaux problèmes de sécurité de Helm 2 - les larges autorisations accordées par défaut à toute personne ayant accès à Tiller. Helm propose désormais des composants de gestion des accès privilégiés avec le contrôle d'accès basé sur les rôles (RBAC) et les définitions de ressources personnalisées (CRD).

Une autre propriété utile des modèles Helm est l'encapsulation. Les définitions YAML des objets Kubernetes, tels que Deployment, Service, ConfigMap ou un secret Kubernetes, peuvent être encapsulées dans un seul modèle. Cette propriété est utile pour la configuration au moment du déploiement.

Un tableau de barre simple se compose de :

  • Un Chart.yaml fichier qui déclare le graphique.
  • Un values.yaml fichier contenant les paramètres de graphique à utiliser avec les modèles.
  • Un répertoire de modèles contenant des fichiers de modèles pour créer le contenu du graphique.

Un fichier de modèle a la structure d'un fichier YAML, mais il contient également des variables de modèle qui sont remplacées lors du déploiement par les valeurs fournies dans le values.yaml fichier.

C'est ce que le contenu d'un deployment.yaml typique ressemble à :

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

Dans l'exemple ci-dessus, Helm examine le values.yaml fichier pour la valeur du test variable. Le values.yaml pertinent le fichier contient la définition de la variable :

test: default

Basé sur values.yaml définition, Helm construit le deployment.yaml suivant fichier :

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 offre la possibilité de remplacer les valeurs dans le values.yaml en utilisant le --set drapeau lors de l'émission de commandes de construction dans la CLI.

Il comprend également la helm lint commande qui examine un graphique à la recherche de problèmes, en vérifiant qu'il a été conçu conformément aux normes.

Personnalisation :fonctionnalités clés

Kustomize est un outil qui utilise des couches et des correctifs au lieu de modèles pour personnaliser les objets Kubernetes. Il introduit le kustomization.yaml fichier manifeste, dans lequel les utilisateurs stockent des configurations spécifiques au déploiement.

L'outil est intégré à kubectl depuis la version 1.14, ce qui signifie qu'il est désormais natif dans Kubernetes. Cependant, vous pouvez également l'installer indépendamment.

Avec Kustomize, les utilisateurs peuvent gérer n'importe quel nombre de configurations Kubernetes, chacune avec sa personnalisation distincte, en utilisant l'approche déclarative. Il permet aux développeurs de définir plusieurs versions d'une application et de les gérer dans des sous-répertoires. Le répertoire de base contient les configurations communes, tandis que les sous-répertoires contiennent des correctifs spécifiques à la version.

Chaque répertoire contient son kustomization.yaml fichier qui spécifie les modifications à apporter à la configuration et les ressources à utiliser. Par exemple, le fichier suivant kustomization.yaml le fichier ajoute une étiquette commune app:test à la fois deployment.yaml et service.yaml dans le répertoire de base :

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

Les modifications sont ensuite appliquées en tapant la commande suivante dans la ligne de commande :

kubectl apply -k base

La commande est différente si Kustomize est utilisé en tant qu'outil autonome :

kustomize build base | kubectl apply -f -

Helm et Kubernetes :avantages et inconvénients

Avantages

  • Helm offre de nombreuses fonctionnalités qui vont au-delà de la simple gestion de la configuration du déploiement d'applications, telles que l'empaquetage, les crochets et les restaurations.
  • Il simplifie l'installation de l'application en permettant aux utilisateurs de définir des valeurs par défaut qu'ils peuvent ensuite configurer avec les valeurs si nécessaire.
  • Helm est bien connu des développeurs, il compte de nombreux utilisateurs et une excellente assistance en ligne.
  • Les fonctions du modèle Helm permettent d'introduire des conditions et des boucles, de définir des assistants et d'accéder à la bibliothèque de fonctions Sprig.
  • Les applications les plus couramment utilisées ont leurs chartes Helm disponibles en ligne, ce qui permet de gagner du temps et d'augmenter la productivité.

Inconvénients

  • Helm ajoute plus de couches d'abstraction et a une courbe d'apprentissage abrupte.
  • Il limite la personnalisation des applications aux options de configuration préexistantes.
  • Les modèles sont sujets aux erreurs, notamment en termes d'alignement correct de YAML.
  • Helm n'est pas pris en charge de manière native dans Kubernetes, ce qui crée une dépendance externe.
  • C'est souvent impératif. Helm injecte des valeurs dans les modèles lors de l'exécution, donc si le modèle change, le système peut diverger de ce que l'utilisateur attend.
  • Les graphiques nécessitent toujours des personnalisations d'exécution, ce qui les rend difficiles à gérer lors de la mise en œuvre du pipeline CI/CD.
  • Les modèles moins lisibles entraînent inévitablement moins de personnalisation au fil du temps.
  • Il souffre de problèmes de sécurité liés au manque de visibilité et de transparence lors de l'installation des applications.

Kustomize et Kubernetes :avantages et inconvénients

Avantages

  • Kustomize est simple à utiliser.
  • Il est déclaratif, conforme à la philosophie Kubernetes.
  • Kustomize prend en charge un modèle de base hérité, ce qui le rend plus évolutif que Helm.
  • L'utilisation de la version native intégrée à kubectl élimine les dépendances externes.
  • Cela facilite l'utilisation d'applications prêtes à l'emploi.
  • Il utilise uniquement des fichiers YAML simples.

Inconvénients

  • Kustomize n'offre pas beaucoup de fonctionnalités.
  • Il n'est pas conçu pour suivre le principe DRY (Don't Repeat Yourself).
  • Les utilisateurs doivent déclarer manuellement les ressources et les correctifs dans kustomization.yaml , et le fichier doit être mis à jour manuellement chaque fois qu'un nouveau fichier est ajouté.
  • La version native intégrée à kubectl est bien plus ancienne que la version autonome actuelle.
  • L'assistance en ligne pour Kustomize est difficile à trouver.

Kustomize vs Helm :tableau de comparaison

Fonctionnalité Barre Personnalisation
Modèle Oui Non
Superpositions Non Oui
Emballage Oui Non
Hooks de validation Oui Non
Annulations Oui Non
Intégration K8s native Non Oui
Nature déclarative Souvent impératif Oui
Visibilité et transparence Faible Fort

Comment choisir ?

Pour décider d'opter pour Helm ou Kustomize, considérez ce qui suit :

  • Choisissez Kustomize si vous prévoyez d'écrire vous-même toutes les configurations et que vous comprenez bien le fonctionnement de YAML. Bien que Kustomize vous permette d'effectuer rapidement des personnalisations complexes, vous devez être en mesure de visualiser comment les correctifs et les calques s'emboîtent.
  • D'autre part, si vous souhaitez que vos développeurs puissent ajouter de nouvelles applications et de nouveaux services de manière simple et sûre, la création de chartes Helm est une meilleure solution.
  • Une autre raison de choisir Helm est la nécessité de réduire le temps que vous passez avec les fichiers YAML. Les modèles Helm ont des arguments qui permettent de comprendre plus facilement le fonctionnement des services sans approfondir trop YAML.

Étant donné que Helm et Kustomize offrent tous deux des avantages spécifiques à l'outil et se complètent bien, la meilleure chose à faire serait d'utiliser les deux outils côte à côte. Helm est particulièrement utile pour empaqueter, partager et installer des applications bien définies, tandis que Kustomize fonctionne mieux pour les modifications de dernière minute des applications Kubernetes existantes.


Cent OS
  1. PostgreSQL vs MySQL :une comparaison détaillée

  2. Comprendre YAML pour Ansible

  3. YAML pour les débutants

  4. Comparaison des serveurs multimédias

  5. Comparaison de dates dans Bash

Comment réparer helm n'a aucune version déployée Erreur

Comment utiliser la commande helm install

OLTP vs OLAP :une comparaison complète

API SOAP vs REST :comparaison directe

Comment déployer PostgreSQL sur Kubernetes

Comment installer Helm sur Linux