GNU/Linux >> Linux Esercitazione >  >> Cent OS

Helm vs Kustomize:confronto testa a testa

Introduzione

Kubernetes offre in modo nativo gli strumenti di base necessari per gestire la distribuzione delle applicazioni. Tuttavia, sebbene l'applicazione di manifesti YAML grezzi sia un processo semplice, lo sviluppo in un ambiente di microservizi va rapidamente fuori controllo con il numero di implementazioni necessarie per supportare un intero sistema.

Questo articolo mette a confronto due strumenti popolari che mirano a semplificare la gestione della distribuzione delle applicazioni:Helm e Kustomize.

Elmo:caratteristiche principali

Helm è un gestore di pacchetti per Kubernetes. Assiste nell'installazione e nella gestione delle applicazioni Kubernetes utilizzando grafici timone, pacchetti contenenti file YAML modificati utilizzando il linguaggio modello Go e funzioni modello dalla libreria Sprig.

Utilizzando i modelli e i valori dinamici, Helm offre la possibilità di mettere a punto una configurazione durante tutto il ciclo di vita dello sviluppo del software.

Con l'introduzione di Helm 3, Helm ha smesso di dipendere da Tiller per la generazione di file di configurazione dinamica. Ciò elimina uno dei principali problemi di sicurezza di Helm 2:le ampie autorizzazioni concesse per impostazione predefinita a tutti coloro che hanno accesso a Tiller. Helm ora include componenti di gestione degli accessi privilegiati con controllo degli accessi in base al ruolo (RBAC) e definizioni delle risorse personalizzate (CRD).

Un'altra proprietà utile dei modelli di Helm è l'incapsulamento. Le definizioni YAML degli oggetti Kubernetes, come Deployment, Service, ConfigMap o Kubernetes Secret, possono essere incapsulate in un unico modello. Questa proprietà è utile per la configurazione in fase di distribuzione.

Una semplice carta del timone è composta da:

  • Un Chart.yaml file che dichiara il grafico.
  • Un values.yaml file che contiene i parametri del grafico da utilizzare con i modelli.
  • Una directory modello contenente file modello per la creazione del contenuto del grafico.

Un file modello ha la struttura di un file YAML, ma contiene anche variabili modello che vengono sostituite durante la distribuzione con i valori forniti in values.yaml file.

Questo è il contenuto di un tipico deployment.yaml assomiglia 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

Nell'esempio sopra, Helm esamina values.yaml file per il valore del test variabile. Il relativo values.yaml contiene la definizione della variabile:

test: default

Basato su values.yaml definizione, Helm compila il seguente deployment.yaml file:

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à di sovrascrivere i valori in values.yaml utilizzando il --set flag quando si emettono comandi di compilazione nella CLI.

Include anche il helm lint comando che esamina un grafico per problemi, verificando che sia stato progettato secondo gli standard.

Personalizza:caratteristiche principali

Kustomize è uno strumento che utilizza livelli e patch invece di modelli per personalizzare gli oggetti Kubernetes. Introduce il kustomization.yaml manifest, in cui gli utenti archiviano le configurazioni specifiche della distribuzione.

Lo strumento è integrato in kubectl a partire dalla versione 1.14, il che significa che ora è nativo in Kubernetes. Tuttavia, puoi anche installarlo in modo indipendente.

Con Kustomize gli utenti possono gestire un numero qualsiasi di configurazioni Kubernetes, ognuna con la propria personalizzazione distinta, utilizzando l'approccio dichiarativo. Consente agli sviluppatori di definire più versioni di un'applicazione e gestirle in sottodirectory. La directory di base contiene le configurazioni comuni, mentre le sottodirectory contengono le patch specifiche della versione.

Ogni directory contiene il suo kustomization.yaml file che specifica quali modifiche devono essere apportate alla configurazione e quali risorse devono essere utilizzate. Ad esempio, il seguente kustomization.yaml il file aggiunge un'etichetta comune app:test a entrambi deployment.yaml e service.yaml nella directory di base:

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

Le modifiche vengono quindi applicate digitando il seguente comando nella riga di comando:

kubectl apply -k base

Il comando è diverso se Kustomize viene utilizzato come strumento autonomo:

kustomize build base | kubectl apply -f -

Elmo e Kubernetes:pro e contro

Pro

  • Helm offre molte funzionalità che vanno oltre la semplice gestione della configurazione della distribuzione delle app, come pacchetti, hook e rollback.
  • Semplifica l'installazione dell'app consentendo agli utenti di impostare valori predefiniti che possono ulteriormente configurare con i valori, se necessario.
  • Helm è ben noto agli sviluppatori, ha molti utenti e un ottimo supporto online.
  • Le funzioni del modello Helm consentono di introdurre condizionali e loop, definire helper e accedere alla libreria delle funzioni Sprig.
  • Le applicazioni più comunemente utilizzate hanno i grafici Helm disponibili online, il che consente di risparmiare tempo e aumentare la produttività.

Contro

  • Helm aggiunge più livelli di astrazione e ha una curva di apprendimento ripida.
  • Limita la personalizzazione delle applicazioni alle opzioni di configurazione preesistenti.
  • I modelli sono soggetti a errori, soprattutto in termini di corretto allineamento di YAML.
  • Helm non è supportato in modo nativo in Kubernetes, il che crea una dipendenza esterna.
  • Spesso è imperativo. Helm inserisce valori nei modelli in fase di esecuzione, quindi se il modello cambia, il sistema potrebbe divergere da ciò che l'utente si aspetta.
  • I grafici richiedono ancora personalizzazioni di runtime, il che li rende difficili da gestire durante l'implementazione della pipeline CI/CD.
  • I modelli meno leggibili portano inevitabilmente a una minore personalizzazione nel tempo.
  • Soffre di problemi di sicurezza derivanti dalla mancanza di visibilità e trasparenza durante l'installazione delle app.

Personalizza e Kubernetes:pro e contro

Pro

  • Kustomize è semplice da usare.
  • È dichiarativo, in linea con la filosofia Kubernetes.
  • Kustomize supporta un modello a base ereditaria, che lo rende scalabile meglio di Helm.
  • L'utilizzo della versione nativa integrata in kubectl elimina le dipendenze esterne.
  • Semplifica l'utilizzo di app standard.
  • Utilizza solo semplici file YAML.

Contro

  • Kustomize non offre molte funzionalità.
  • Non è progettato per seguire il principio DRY (Don't Repeat Yourself).
  • Gli utenti devono dichiarare manualmente risorse e patch in kustomization.yaml e il file deve essere aggiornato manualmente ogni volta che viene aggiunto un nuovo file.
  • La versione nativa incorporata in kubectl è molto più vecchia dell'attuale versione standalone.
  • È difficile trovare supporto online per Kustomize.

Kustomize vs Helm:tabella di confronto

Funzione Timone Personalizza
Modellazione No
Sovrapposizioni No
Imballaggio No
Ganci di convalida No
Rollback No
Integrazione nativa di K8 No
Natura dichiarativa Per lo più imperativo
Visibilità e trasparenza Debole Forte

Come scegliere?

Per decidere se optare per Helm o Kustomize, considera quanto segue:

  • Scegli Kustomize se hai intenzione di scrivere tutte le configurazioni da solo e possiedi una buona comprensione di come funziona YAML. Sebbene Kustomize ti consenta di eseguire rapidamente personalizzazioni complicate, richiede che tu sia in grado di visualizzare come le patch e i livelli si adattano.
  • D'altra parte, se vuoi che i tuoi sviluppatori siano in grado di aggiungere nuove app e servizi in modo semplice e sicuro, la creazione di grafici Helm è una soluzione migliore.
  • Un altro motivo per scegliere Helm è la necessità di ridurre la quantità di tempo che dedichi ai file YAML. I modelli Helm hanno argomenti che semplificano la comprensione del funzionamento dei servizi senza approfondire YAML.

Dato che sia Helm che Kustomize offrono vantaggi specifici per gli strumenti e si completano a vicenda, la migliore linea d'azione sarebbe quella di utilizzare i due strumenti fianco a fianco. Helm è particolarmente utile per creare pacchetti, condividere e installare app ben definite, mentre Kustomize funziona meglio per le modifiche dell'ultimo minuto delle app Kubernetes esistenti.


Cent OS
  1. PostgreSQL vs MySQL:un confronto dettagliato

  2. Comprendere YAML per Ansible

  3. YAML per principianti

  4. Confronto tra server multimediali

  5. Confronto di date in Bash

Come risolvere l'helm non ha rilasci distribuiti Errore

Come utilizzare il comando di installazione del timone

OLTP vs OLAP:un confronto completo

API SOAP vs REST:confronto testa a testa

Come distribuire PostgreSQL su Kubernetes

Come installare Helm su Linux