In questo tutorial impareremo come creare e gestire i pod Kubernetes. Innanzitutto, inizieremo con cos'è un Pod in Kubernetes e come funziona un Pod. Successivamente, daremo una breve occhiata ai tipi di Pod. E poi vedremo come creare un nuovo Pod e come visualizzare le informazioni del Pod dalla riga di comando. Infine, impareremo come eliminare il Pod quando non è più necessario.
Cos'è un Pod in Kubernetes?
In Kubernetes , i pod sono le più piccole unità di elaborazione distribuibili che puoi costruire e controllare. Un Pod è una raccolta di uno o più container con archiviazione condivisa e risorse di rete, nonché un insieme di regole per l'esecuzione dei container.
I contenuti di un Pod sono sempre collocati insieme, programmati ed eseguiti nello stesso ambiente. Un Pod rappresenta un "host logico" specifico dell'applicazione:include uno o più contenitori di applicazioni strettamente connessi.
Nella prospettiva Docker, un Pod è equivalente a un insieme di contenitori Docker con spazi dei nomi e volumi di filesystem comuni.
Tipi di pod Kubernetes
In un cluster Kubernetes esistono due tipi di Pod.
- POD contenitore singolo: Il caso d'uso di Kubernetes più frequente è l'approccio "un contenitore per pod"; in questo scenario, considera un Pod come un wrapper su un singolo contenitore; Kubernetes gestisce direttamente i Pod anziché i container.
- Pod di contenitori multipli: Un Pod può incapsulare un'applicazione composta da numerosi contenitori strettamente connessi che devono condividere risorse. Questi contenitori sono raggruppati insieme per formare un'unica unità di servizio e questi contenitori comunicheranno tra loro.
Come funziona il POD?
Ogni Pod è progettato per eseguire una singola istanza dell'applicazione. Puoi utilizzare diversi Pod, uno per ogni istanza, se hai bisogno di estendere la tua applicazione orizzontalmente. Questo è comunemente indicato come replica in Kubernetes . Una risorsa del carico di lavoro e il suo controller normalmente producono e gestiscono Pod replicati in un gruppo.
L'obiettivo finale di Kubernetes è distribuire l'applicazione sotto forma di contenitori in un insieme di macchine chiamato nodo di lavoro nell'ammasso di Kubernetes.
Kubernetes non avvia i contenitori direttamente nel nodo, ma i contenitori sono incapsulati come Pod, che è una singola istanza di un'applicazione.
In un cluster Kubernetes, un nodo è costituito da pod e un pod è costituito da contenitori. Ad esempio, hai una singola istanza di un'applicazione in esecuzione in un singolo contenitore incapsulato da un Pod.
Se il numero di utenti che accedono all'applicazione aumenta, è necessario aumentare la scalabilità dell'applicazione. In tal caso, potrebbe essere necessario avviare ulteriori istanze per condividere il carico.
Per aumentare la scalabilità dell'applicazione, è necessario avviare un nuovo Pod aggiuntivo nel nodo con la stessa applicazione. Se il carico aumenta ulteriormente e il nodo corrente non ha capacità, è necessario disporre di un nodo aggiuntivo per avviare i pod con lo stesso contenitore dell'applicazione.
Allo stesso modo, per ridimensionare, è necessario eliminare il Pod esistente.
Spero che tu abbia l'idea di base sui pod Kubernetes. Vediamo ora come creare e gestire i Pod in Kubernetes.
Prima di iniziare, assicurati di aver installato Kubernetes sul tuo sistema. I seguenti collegamenti contengono istruzioni su come configurare una distribuzione del cluster Kubernetes a nodo singolo e multinodo in Linux.
- Come installare Kubernetes utilizzando Minikube in CentOS Linux
- Installa il cluster Kubernetes utilizzando Kubeadm in RHEL, CentOS, AlmaLinux, Rocky Linux
Una volta installato Kubernetes, puoi iniziare a creare pod.
Di solito, non è necessario creare direttamente i pod, nemmeno i pod singleton. Invece, creali utilizzando risorse del carico di lavoro come Distribuzione o Lavoro . Una distribuzione fornisce aggiornamenti dichiarativi per Pod e ReplicaSet.
Crea una distribuzione
Crea una distribuzione di esempio utilizzando un'immagine esistente "echoserver" . È un semplice server HTTP e possiamo esporlo sulla porta 8080
usando --port
opzione.
Un'immagine contenitore è un file che racchiude un programma e tutte le sue dipendenze software in dati binari. Le immagini del contenitore sono pacchetti software eseguibili indipendenti che fanno presupposti estremamente specifici sul loro ambiente di esecuzione.
In questo articolo, esamineremo tutte le dimostrazioni in un cluster a nodo singolo .
Puoi conoscere i dettagli del nodo eseguendo il comando seguente come root
utente
# kubectl get nodes
Risultato di esempio:
NAME STATUS ROLES AGE VERSION ostechnix Ready Master 25h v1.22.3
Ora, distribuisci un'applicazione di esempio chiamata "hello-otechnix" usando il comando seguente. Puoi nominarlo a tuo piacimento.
# kubectl create deployment hello-ostechnix --image=k8s.gcr.io/echoserver:1.10
Risultato di esempio:
deployment.apps/hello-ostechnix created [[email protected] ~]#
La distribuzione è stata creata, verifica la distribuzione utilizzando il comando seguente.
# kubectl get deployments
Risultato di esempio:
NAME READY UP-TO-DATE AVAILABLE AGE hello-ostechnix 1/1 1 1 85s
Accesso alla distribuzione
Per accedere a questa distribuzione come servizio, è necessario esporla come servizio. Utilizzare il comando seguente per esporre la distribuzione sulla porta 8080
.
# kubectl expose deployment hello-ostechnix --type=NodePort --port=8080
Risultato di esempio:
service/hello-ostechnix exposed
Utilizzare il comando seguente per ottenere l'URL del servizio esposto.
# minikube service hello-ostechnix --url
Risultato di esempio:
http://192.168.181.131:30525
Copia l'URL e incollalo nel tuo browser, elencherà i dettagli dell'applicazione distribuita.
Assicurati che la porta 30525
è consentito nel tuo router o firewall. Se questa porta è bloccata, potresti non visualizzare le informazioni del Pod nel browser.
Elimina distribuzione
Innanzitutto, elimina il servizio "hello-otechnix" usando il comando:
# kubectl delete services hello-ostechnix
Risultato di esempio:
service "hello-ostechnix" deleted
Quindi, elimina la distribuzione "hello-otechnix":
# kubectl delete deployment hello-ostechnix
Risultato di esempio:
deployment.apps "hello-ostechnix" deleted
Una volta eliminata la distribuzione, il Pod associato all'applicazione verrà terminato. Ci vorranno alcuni secondi per completare la terminazione.
# kubectl get pods
Risultato di esempio:
NAME READY STATUS RESTARTS AGE hello-ostechnix-5d4cf4df75-jlwff 1/1 Terminating 0 57m
Dopo aver terminato la distribuzione, l'applicazione non sarà più accessibile.
# kubectl get pods
Risultato di esempio:
No resources found in default namespace.
Esegui Pod con immagini
Possiamo usare 'kubectl run
' comando per creare ed eseguire un'applicazione in un Pod.
$ kubectl run <POD name> --image=<image name>
Qui, il nome del Pod può essere qualsiasi cosa e il nome dell'immagine deve essere specifico che sarebbe disponibile in Docker Hub o in qualsiasi repository locale.
Creiamo un Pod con l'immagine Nginx.
# kubectl run ostechnix-nginx --image=nginx
Risultato di esempio:
pod/ostechnix-nginx created
È stato creato un Pod chiamato 'otechnix-nginx'. Puoi verificare lo stato del Pod tramite il comando seguente.
# kubectl get pods
Risultato di esempio:
NAME READY STATUS RESTARTS AGE ostechnix-nginx 1/1 Running 0 4m20s
Puoi ottenere informazioni aggiuntive come dove è in esecuzione il Pod e l'IP del Pod utilizzando 'wide
' opzione.
# kubectl get pods -o wide
Risultato di esempio:
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES ostechnix-nginx 1/1 Running 0 38m 172.17.0.6 ostechnix <none> <none>
Puoi ottenere informazioni complete sul POD utilizzando 'kubectl describe
comando '.
# kubectl describe pod ostechnix-nginx
Questo comando ti fornirà i dettagli completi del POD come i dettagli del contenitore e i suoi stati, i dettagli degli eventi che si sono verificati da quando il Pod è stato creato.
Name: ostechnix-nginx Namespace: default Priority: 0 Node: ostechnix/192.168.181.131 Start Time: Thu, 03 Feb 2022 01:40:48 -0800 Labels: run=ostechnix-nginx Annotations: <none> Status: Running IP: 172.17.0.6 IPs: IP: 172.17.0.6 Containers: ostechnix-nginx: Container ID: docker://29eeb0392247aef193d6dff0138f8ef132dfb6359d8e67c3a5e4a21d7e259989 Image: nginx Image ID: docker-pullable://[email protected]:2834dc507516af02784808c5f48b7cbe38b8ed5d0f4837f16e78d00deb7e7767 Port: <none> Host Port: <none> State: Running Started: Thu, 03 Feb 2022 01:40:54 -0800 Ready: True Restart Count: 0 Environment: <none> Mounts: /var/run/secrets/kubernetes.io/serviceaccount from kube-api-access-ggvk6 (ro) Conditions: Type Status Initialized True Ready True ContainersReady True PodScheduled True Volumes: kube-api-access-ggvk6: Type: Projected (a volume that contains injected data from multiple sources) TokenExpirationSeconds: 3607 ConfigMapName: kube-root-ca.crt ConfigMapOptional: <nil> DownwardAPI: true QoS Class: BestEffort Node-Selectors: <none> Tolerations: node.kubernetes.io/not-ready:NoExecute op=Exists for 300s node.kubernetes.io/unreachable:NoExecute op=Exists for 300s Events: Type Reason Age From Message ---- ------ ---- ---- ------- Normal Scheduled 7m26s default-scheduler Successfully assigned default/ostechnix-nginx to ostechnix Normal Pulling 7m24s kubelet Pulling image "nginx" Normal Pulled 7m20s kubelet Successfully pulled image "nginx" in 4.114836826s Normal Created 7m20s kubelet Created container ostechnix-nginx Normal Started 7m20s kubelet Started container ostechnix-nginx [[email protected] ~]#
Una volta terminato, puoi eliminare il Pod utilizzando 'kubectl delete
comando '.
# kubectl delete pod ostechnix-nginx
Risultato di esempio:
pod "ostechnix-nginx" deleted
Verifica se il Pod è stato eliminato elencando i Pod disponibili:
# kubectl get pods No resources found in default namespace.
Conclusione
In questo tutorial, abbiamo esaminato il concetto di Pod in Kubernetes, una semplice distribuzione di un'applicazione e come eseguire un Pod. Avremo maggiori dettagli sulla creazione di Pod con YAML
file di definizione nei nostri prossimi dettagli.