GNU/Linux >> Linux Esercitazione >  >> Panels >> Docker

Come ridimensionare i container Docker tra i server utilizzando Kubernetes

Docker è una piattaforma di containerizzazione orientata agli sviluppatori che consente di creare pacchetti di applicazioni come container standalone. Verranno eseguiti ovunque sia disponibile un runtime di container compatibile.

La popolarità di Docker lo ha reso quasi sinonimo di container, ma non è la tecnologia perfetta per tutti i casi d'uso. L'utilizzo di Docker così com'è presenta sfide nella produzione poiché la sua CLI è attrezzata solo per gestire singoli container.

Kubernetes è una piattaforma di orchestrazione che gestisce stack di container e li ridimensiona su più server. Puoi distribuire su una flotta di macchine fisiche, migliorando la ridondanza e la resilienza del tuo servizio. Ecco come puoi avviare il tuo cluster per ridimensionare i tuoi container "Docker".

Nozioni di base su Kubernetes

Riconoscere alcuni termini chiave di Kubernetes ti aiuterà a capire le differenze rispetto a Docker. Il dizionario Kubernetes descrive dozzine di risorse che puoi aggiungere al tuo cluster. Solo i componenti che controllano la pianificazione del contenitore sono rilevanti per questo articolo.

Ad alto livello, un'installazione Kubernetes è un cluster di "nodi". I nodi sono macchine fisiche indipendenti che ospitano i carichi di lavoro. Un singolo nodo "master" è responsabile del coordinamento ("orchestrazione") delle operazioni del cluster "programmando" i nuovi container nel nodo di lavoro più appropriato.

Ecco alcuni termini critici:

  • Maestro – Il nodo master gestisce il cluster. Questa è la macchina su cui installi Kubernetes. Esegue il piano di controllo e delega l'hosting di app containerizzate ai nodi di lavoro.
  • Piano di controllo – Il piano di controllo è il componente software del nodo master. Incorpora diversi servizi, tra cui un server API, un archivio di configurazione e uno scheduler di container.
  • Nodo – Un nodo è una macchina che ospita i tuoi container. Ogni lavoratore esegue un componente Kubernetes chiamato Kubelet. Questo rimane in contatto con il piano di controllo, ricevendo istruzioni di programmazione su cui agisce per fornire nuovi container.
  • Gallo – Un Pod è l'unità di calcolo più piccola in un cluster Kubernetes, che rappresenta un gruppo di istanze di container. L'astrazione Pod ti consente di interagire con più contenitori in esecuzione in modo aggregato.
  • Set di repliche – I set di repliche sono responsabili del ridimensionamento dei pod per garantire che sia disponibile un numero specificato di repliche. Se richiedi tre repliche di un Pod, il set di repliche garantirà il rispetto del vincolo di disponibilità. I pod vengono sostituiti automaticamente se si guastano, consentendoti di automatizzare la replica dei container tra i server.

La creazione di un cluster scalabile richiede un nodo master, almeno due nodi di lavoro e una distribuzione che fornisca più repliche. Kubernetes sarà in grado di programmare i tuoi Pod su tutti i nodi disponibili, offrendoti resilienza nel caso in cui uno subisca un'interruzione.

Creazione del tuo cluster

Kubernetes è disponibile come offerta gestita dalla maggior parte dei principali provider di servizi cloud. Questi forniscono un modo con un clic per creare il tuo piano di controllo e aggiungere un numero variabile di nodi di lavoro.

Puoi eseguire un cluster sul tuo hardware utilizzando una distribuzione Kubernetes autonoma come MicroK8s. Avrai bisogno di almeno due macchine fisiche o virtuali isolate se desideri avere il supporto per la pianificazione ridondante.

Installa MicroK8 su entrambe le macchine. Designa un nodo come master e usa il add-node comando per avviare il processo di registrazione del nodo:

microk8s add-node

Questo emetterà un microk8s join comando. Passa al tuo nodo secondario ed esegui il comando. Si unirà al primo cluster come nuovo lavoratore. Ora entrambe le macchine sono pronte per ospitare i tuoi carichi di lavoro containerizzati.

Definizione di una distribuzione con ridimensionamento orizzontale

Un'applicazione che viene eseguita su più server è descritta come "scalata orizzontalmente". Si sta diffondendo in diversi ambienti distinti. Il ridimensionamento verticale di un sistema implica l'aggiunta di risorse a un ambiente esistente.

Il modo più semplice per definire un carico di lavoro Kubernetes è con una distribuzione. Questo tipo di risorsa crea pod da un'immagine del contenitore e imposta percorsi di rete pubblici tramite un servizio. Per impostazione predefinita, le distribuzioni sono una singola istanza Pod, ma possono essere configurate con più repliche.

Ecco un semplice manifesto di distribuzione:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx
spec:
  replicas: 3
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:latest
        ports:
        - containerPort: 80

Applica il manifest al tuo cluster utilizzando Kubectl:

microk8s kubectl apply -f ./manifest.yaml

Kubernetes creerà tre Pod, ognuno dei quali ospiterà un server web NGINX creato da nginx:latest Immagine. La porta 80 è esposta come porta container per abilitare il traffico in entrata.

I pod verranno distribuiti automaticamente tra i nodi del tuo cluster. Un nodo sarà idoneo a ospitare un Pod se può fornire risorse sufficienti.

È possibile aggiornare il numero di repliche in qualsiasi momento. Modifica le replicas campo nel tuo manifest e riapplicalo al tuo cluster. Lo scheduler di Kubernetes interverrà per fornire nuovi Pod o terminare quelli vecchi come richiesto. Se ridimensioni replicas fino a 0, puoi portare la tua applicazione offline senza eliminare effettivamente la distribuzione o le risorse associate.

Aggiunta di nodi dinamica

L'aggiornamento del conteggio delle repliche ti consente di utilizzare le risorse esistenti all'interno del tuo cluster. Alla fine, potresti esaurire del tutto la capacità del tuo nodo combinato, impedendo la pianificazione di nuovi Pod. Kubernetes offre una funzione di ridimensionamento automatico del cluster in grado di creare e distruggere nodi , modificando di fatto il numero di Pod che possono essere programmati.

L'impostazione della scalabilità automatica è relativamente complicata. Il processo esatto dipende dall'ambiente di hosting del tuo cluster. Richiede l'integrazione con un Cluster Autoscaler in grado di collegarsi al tuo host per rilevare i cambiamenti nella domanda. La documentazione ufficiale è disponibile per Google Cloud; le soluzioni sono disponibili anche da Amazon EKS e Microsoft AKS.

Il ridimensionamento automatico funziona mantenendo un controllo costante per i pod che non possono essere programmati a causa della capacità del cluster insufficiente. Valuta inoltre se i Pod programmati con successo potrebbero effettivamente essere collocati con un numero di nodi ridotto. L'auto-scaler utilizza quindi l'API del tuo provider di servizi cloud per aggiungere e rimuovere istanze di calcolo, regolando dinamicamente le risorse del tuo cluster. Ciò potrebbe influire sulla tua fattura poiché la creazione di una nuova istanza è solitamente un'operazione a pagamento.

Riepilogo

Kubernetes semplifica la distribuzione di istanze di container su più server. Registra le tue macchine come nodi o utilizza un cluster cloud gestito, quindi crea le distribuzioni con le replicas campo impostato. Puoi ridimensionare il tuo carico di lavoro aggiornando il conteggio delle repliche richieste.

Quando sono previste forti variazioni della domanda, utilizzare la scalabilità automatica per espandere dinamicamente la capacità. Questa funzione ti consente di creare nuovi nodi al volo, aggiungendo risorse extra in modo da poter continuare ad aumentare il numero di repliche.

Quando si ridimensionano i Pod, è necessario ricordare che è necessaria anche una qualche forma di distribuzione del traffico in entrata. Se stai esponendo la porta 80, Kubernetes deve essere in grado di mappare le richieste alla porta 80 su qualsiasi dei nodi. Funziona automaticamente con distribuzioni e servizi. Kubernetes crea un Load Balancer che monitora continuamente i Pod per capire dove può essere diretto il traffico.


Docker
  1. Come installare WordPress utilizzando Docker

  2. Come usare Docker Compose

  3. Come collegare i contenitori Docker

  4. Come passare le variabili d'ambiente ai container Docker

  5. Come elencare i contenitori Docker

Come ridurre le dimensioni dell'immagine Docker nei contenitori Docker

Come eseguire i contenitori Docker

Come rimuovere i contenitori Docker

Come fermare i container Docker

Come rinominare o rinominare i contenitori Docker

Come configurare gli spazi dei nomi di rete nei contenitori Docker