GNU/Linux >> Linux Esercitazione >  >> Linux

Ansible vs Kubernetes:capire le differenze

Introduzione

Man mano che le applicazioni Web diventano più grandi e complesse, cresce la necessità di sviluppo software automatizzato, fornitura dell'infrastruttura e manutenzione.

Dagli strumenti che aiutano con attività ripetitive (come la distribuzione e l'aggiornamento di app su server nativi cloud) a soluzioni complete di orchestrazione di container, l'automazione nello sviluppo del software è un campo diversificato e in rapida evoluzione.

Questo articolo presenta i vantaggi e gli svantaggi di due popolari strumenti di automazione:Ansible e Kubernetes. Inoltre, include casi d'uso per ciascuna piattaforma e suggerisce come utilizzarli insieme.

Ansible vs Kubernetes:Definizioni

Sia Ansible che Kubernetes sono strumenti di automazione, ma hanno scopi diversi nel ciclo di vita dello sviluppo del software.

Abile

Ansible è un motore di automazione che automatizza la distribuzione delle applicazioni, il provisioning del cloud e l'orchestrazione all'interno di un servizio. Inoltre, aiuta con la gestione della configurazione. È un sistema dichiarativo che utilizza Ansible Playbook basati su YAML che utilizzano un linguaggio semplice per descrivere i lavori di automazione.

Strumenti simili ad Ansible sono Jenkins, Puppet, Terraform Chef, Rudder, ecc.

Kubernetes

Kubernetes è una piattaforma di orchestrazione per automatizzare la distribuzione, la gestione e il ridimensionamento delle app containerizzate. La sua funzione principale è la gestione dei cluster. Controlla anche la pianificazione, l'esecuzione e la gestione delle immagini Docker sul server. È compatibile con molti strumenti contenitore e fornisce un'interfaccia API unificata in grado di gestire sistemi complessi distribuiti su più server e piattaforme.

Per esplorare strumenti simili a Kubernetes, consulta il nostro articolo sui migliori strumenti di orchestrazione dei contenitori.

Come funzionano

Abile

Ansible funziona eseguendo il push dei moduli Ansible (script autonomi contenuti nei playbook di Ansible) ai nodi. I moduli sono progettati per descrivere lo stato desiderato dell'intero sistema, inclusa l'infrastruttura sottostante. Vengono eseguiti su SSH e rimossi una volta che il sistema raggiunge lo stato desiderato.

Ansible non richiede server, database o demoni. Utilizza un unico "nodo di controllo" per gestire e monitorare i server remoti. I moduli possono trovarsi su qualsiasi server del sistema. Un semplice file INI viene utilizzato per elencare le macchine gestite in gruppi. Di seguito è riportato un esempio del contenuto di uno di questi file:

[webservers]
www1.test.com
www2.test.com

[dbservers]
db0.test.com
db1.test.com
db2.test.com

Con Ansible, è possibile aggiungere e rimuovere macchine dai sistemi di bilanciamento del carico e dalle finestre di monitoraggio, creare file di configurazione dinamicamente e centralizzare la gestione e la distribuzione della configurazione.

Kubernetes

Kubernetes funziona ricevendo l'input dell'utente tramite file manifest. Questi file contengono la descrizione generale dello stato desiderato del cluster. Gli utenti interagiscono con Kubernetes tramite kubectl, l'interfaccia della riga di comando predefinita. A sua volta, kubectl trasmette le istruzioni al server dell'API Kubernetes.

Lo scopo del server API è gestire automaticamente i container seguendo la dichiarazione fornita nel file manifest. Garantisce che lo stato corrente del cluster e lo stato desiderato siano sempre gli stessi.

I cluster Kubernetes sono costituiti dai seguenti componenti:

  • baccelli - Gruppi di contenitori sullo stesso nodo configurati per lavorare insieme. I pod sono l'unità di distribuzione più piccola in Kubernetes.
  • Etichette - Coppie chiave/valore assegnate agli oggetti per l'identificazione.
  • Servizi - Gruppi di pod che operano con lo stesso nome e svolgono la stessa funzione. I servizi possono essere utilizzati come bilanciatori di carico, controllando la distribuzione del traffico.
  • Replica controller - Framework per garantire che il numero corretto di repliche di pod sia pianificato e in esecuzione in qualsiasi momento.

Ansible:pro e contro

Pro

  • Semplice - Ansible è facile da configurare e imparare in quanto presenta una documentazione completa e ben organizzata. È anche semplice risolvere gli errori in Ansible perché esegue le attività in sequenza e si interrompe quando si verifica un errore.
  • Senza agenti - Tutte le comunicazioni relative alla gestione dei nodi in Ansible vengono eseguite tramite SSH o il modulo Paramiko (un'implementazione di SSH2). In pratica, ciò significa che Ansible non richiede agenti server remoti, il che migliora le prestazioni e la sicurezza dello strumento.
  • Basato su YAML - I playbook Ansible sono essenzialmente file YAML, facili da leggere e ben noti agli sviluppatori.
  • Capaci ed efficienti - Lo strumento è in grado di gestire flussi di lavoro complessi.
  • Flessibile - Molti moduli utili consentono una facile personalizzazione di Ansible.
  • Progettato in Python - Le librerie Python fanno parte della maggior parte delle distribuzioni Linux. Pertanto, gli sviluppatori spesso si sentono a casa quando ci lavorano.
  • Gratuito - Ansible è una soluzione open source offerta gratuitamente.

Contro

  • GUI sottosviluppata - Ansible è stato creato come strumento da riga di comando. I successivi tentativi di implementare una GUI (come AWX e successivamente Ansible Tower) non sono riusciti a trasferire tutte le funzionalità della CLI. La GUI può anche perdere la sincronizzazione con la CLI, causando query incoerenti.
  • Apolidi - A differenza di Terraform o Puppet, Ansible è un sistema senza stato e non tiene traccia delle dipendenze. Ciò potrebbe rappresentare un problema in scenari in cui l'ambiente cambia.
  • Supporto di Windows scarso - Ansible per Windows è in lavorazione. Attualmente puoi eseguire Ansible su Windows, ma le macchine Linux sono ancora necessarie per controllare gli host Windows.
  • Mancanza di supporto da parte della comunità - Ansible è relativamente nuovo sul mercato e ha una comunità di utenti più piccola rispetto ai suoi concorrenti.

Kubernetes:pro e contro

Pro

  • Altamente scalabile ed efficiente - La capacità di adattarsi alle circostanze è ciò che rende Kubernetes uno strumento estremamente rispettoso delle risorse. Consente il ridimensionamento orizzontale aggiungendo o rimuovendo contenitori per supportare carichi di lavoro aumentati o ridotti.
  • Abilita la comunicazione del contenitore - La piattaforma fornisce un framework per la comunicazione dei container e garantisce che siano sempre sincronizzati correttamente.
  • Elimina i blocchi dell'infrastruttura - Con Kubernetes, le organizzazioni non devono preoccuparsi delle conseguenze dell'utilizzo di più ambienti di produzione e sviluppo. Ciò è particolarmente utile in scenari ibridi e multi-cloud.
  • Configurazione dichiarativa - Consente agli utenti di dichiarare uno stato desiderato del sistema e quindi si assicura che tale stato venga mantenuto. Rispetto alla configurazione imperativa, questo approccio è molto meno soggetto a errori.
  • Immutabile - Con l'opzione di annullare le modifiche, creare e distribuire nuove immagini di container è facile e sicuro.
  • Autoguarigione - Kubernetes automatizza il processo di monitoraggio delle repliche e ne introduce di nuove in caso di errore.
  • Gratuito - È un progetto open source, disponibile gratuitamente.

Contro

  • Ripida curva di apprendimento - Kubernetes è un sistema complesso che utilizza molte nuove tecnologie.
  • Complessità - Sebbene le applicazioni con numerosi utenti distribuiti traggano sicuramente vantaggio da Kubernetes, l'utilizzo dello strumento per implementazioni più semplici può ridurre la produttività.
  • La transizione a Kubernetes può essere difficile - Presentarlo alla tua organizzazione richiede personale addestrato e adeguamento del flusso di lavoro.

Come scegliere

Data la differenza nelle loro funzioni, non è necessario scegliere tra i due strumenti. Affidarsi a uno strumento di automazione può essere controproducente in un ambiente di sviluppo software. È necessario stabilire una strategia di automazione più ampia prima che l'automazione venga introdotta in un'organizzazione.

Kubernetes non è progettato per gestire l'intero ciclo di vita di un'applicazione. Ansible è una buona scelta per la gestione di server e applicazioni all'interno di Kubernetes, nonché per integrazioni esterne.

Utilizzati insieme, Kubernetes e Ansible si completano a vicenda in un ciclo di vita di sviluppo software come soluzione altamente conveniente. Mentre Kubernetes si occupa dell'integrità e della gestione dei container, Ansible distribuisce le modifiche agli host, configura i sistemi, effettua il provisioning dell'infrastruttura e organizza aggiornamenti continui e distribuzioni continue.

Infine, Ansible è un'ottima soluzione per l'automazione degli aggiornamenti e di altre procedure di manutenzione di Kubernetes stesso grazie alla sua natura facile da usare e alla sua semplice configurazione.


Linux
  1. Comprendere YAML per Ansible

  2. PlayOnLinux vs Wine:le differenze

  3. Comprendere l'output della "politica apt-cache"?

  4. Fedora vs Ubuntu:quali sono le differenze principali?

  5. Qual è lo scopo di un '-' finale in un'applicazione Kubernetes -f -

Ansible Guide:Il comando ad hoc

Presentazione del nuovo Ansible Automation Hub

Comprendere il comando uname in Linux

Comprendere il ciclo for negli script della shell

Comprendere il comando dell'ora in Linux

useradd vs. adduser:quali sono le differenze?