Prerequisiti
La prima cosa di cui avrai bisogno sarà l'accesso a un cluster Kubernetes. Puoi crearne uno utilizzando Minikube o utilizzare Docker per Windows o Docker per Mac, entrambi ora dotati di una distribuzione Kubernetes a nodo singolo che puoi abilitare nelle impostazioni di Docker.
Dovresti anche avere una conoscenza a priori di Kubernetes. Ecco un ottimo punto di partenza.
Creazione di pod
In genere, creiamo pod utilizzando un file yaml che specifica quale immagine del contenitore utilizzare, quali porte esporre, ecc. Ecco un semplice file per creare un pod nginx.
apiVersione: v1tipo: Pod
metadati:
nome: nginx-1
etichetta:
app: server web
specifica:
contenitori:
- nome: nginx
immagine: nginx:1.7.9
porti:
- containerPorta: 80
Salvalo sotto il nome nginx-pod.igname in una directory, quindi dall'interno della stessa directory eseguire il comando:
$ kubectl create -f ./nginx-pod.igname## Verifica che il pod sia stato creato eseguendo:
$ kubectl ottieni pod
Noterai che un singolo pod chiamato "inginx-1" è attivo e funzionante. Ma non puoi scalare questo singolo pod. In esecuzione kubectl create di nuovo ti darà un errore dal nome nginx-1 non può essere riutilizzato di nuovo.
Kubernetes ha dato la possibilità di creare pod ad astrazioni più elevate come implementazioni e ReplicaSets. Che creano pod da un determinato modello di pod specificando quali immagini utilizzare, quali porte esporre in ciascuno dei nuovi pod, ecc., ma niente di troppo specifico su un singolo pod. ReplicaSet (e anche le distribuzioni) quindi procedono alla creazione di nuovi pod, assegnando a ciascun nuovo pod un nome univoco e un'etichetta non univoca che aiuta il ReplicaSet a tenere traccia dei pod creati da un determinato modello.
ReplicaSet garantisce che in un dato istante un certo numero di pod di una determinata etichetta sia sempre attivo e funzionante. Se, ad esempio, un nodo si interrompe, è compito di ReplicaSet creare più pod su altri nodi per compensare la perdita. Per scrivere un file yaml replicaset, seguiremmo lo schema simile alla scrittura di un pod. Avrà una versione API (app/v1), un tipo (ReplicaSet) e un nome nei metadati. Il replicaset stesso può avere etichette su di esso, ma per ora manterremo le cose semplici e gli daremo solo un nome univoco mio-replicaset.
Abbiamo quindi bisogno di passare da metadati sezione alla carne della materia specifica. Qui forniamo il numero di repliche che vogliamo nella sezione repliche. Quindi diamo a questo ReplicaSet a selettore che sarebbe usato per abbinare un'etichetta, diciamo, app a un valore, diciamo, server web, tra i pod attualmente in esecuzione. Se ci sono meno di questi pod, creerà pod in base al modello fornito e aggiungerà la stessa etichetta a questi nuovi pod. Se ci sono più pod del necessario, ne elimina alcuni.
Specificare un modello che fungerebbe da base per la creazione di nuovi pod è il passaggio più complicato. Questo modello non avrà un nome, poiché replicaset creerà un nuovo nome per ogni nuovo pod creato. L'avrà etichette, tuttavia, e puoi notare che la stessa etichetta app=server web che il modello ha è selezionato tramite il selettore parametro nella specifica del set di repliche.
apiVersion: apps/v1tipo: ReplicaSet
metadati:
nome: mio-replicaset
specifica:
repliche: 3
selettore:
corrispondenzaEtichette:
app: server web
modello:
metadati:
etichette:
app: server web
specifica:
contenitori:
- nome: nginx
immagine: nginx:1.7.9
porti:
- containerPorta: 80
Salva questo file come nginx-replicaset.yaml e creare il replicaset utilizzando il comando:
$ kubectl create -f nginx-replicaset.ignamePerché in precedenza abbiamo creato un pod con la stessa etichetta app=server web, il set di repliche creerebbe solo altri due pod. Puoi elencare tutti i pod usando il comando:
$ kubectl ottieni podNOME PRONTO STATUS RIPARTI ETÀ
my-replicaset-nmvt9 1/1 Corsa 0 9s
my-replicaset-xf9mx 1/1 Corsa 0 9s
nginx-1 1/1 Corsa 0 28s
A ciascuno dei pod sarà associato un nome univoco. Come se il primo pod che abbiamo creato avesse un nome nginx-1. Puoi provare a eliminare questo usando il comando:
$ kubectl elimina pod nginx-1$ kubectl ottieni pod
NOME PRONTO STATUS RIAVVIA ETÀ
my-replicaset-nmvt9 1/1 Corsa 0 1 m
my-replicaset-pkn4q 1/1 Corsa 0 22s
my-replicaset-xf9mx 1/1 Corsa 0 1 m
Noterai che quasi istantaneamente il controller ReplicaSet ha creato un nuovo pod per sostituire quello che abbiamo eliminato. Assicurando così che il numero di pod in esecuzione, con etichetta app=server web è sempre 3, come specificato nel nostro manifest di replicaset, sopra.
Ottieni molto controllo grazie a etichette e selettori. Puoi distribuire ulteriormente i pod su più nodi utilizzando nodeSelectors, che vengono utilizzati per allocare un certo numero di pod su determinati nodi.
Ciò che i repliche non consentono sono gli aggiornamenti. Se una versione più recente della tua app, ad esempio, nginx:1.8 arriva, dovrai eliminare questo replicaset e crearne uno nuovo con quell'immagine menzionata nel manifest yaml del replicaset. È qui che torna utile il concetto di distribuzione. Include l'idea dei set di repliche e si estende fornendo supporto aggiuntivo per l'aggiornamento delle tue app. Ora che sei a tuo agio con i set di repliche, potrebbe essere una buona idea esaminare le distribuzioni di Kubernetes.
Riferimenti
- Creazione di pod
- Creazione di set di repliche