Crea e gestisci pod Kubernetes in Linux
Crea, visualizza ed elimina pod in Kubernetes
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 Kubernetes. E poi vedremo come creare un nuovo Pod e come visualizzare le informazioni del Pod da riga di comando. Infine, impareremo come eliminare il Pod quando non sarà più necessario.
Cos'è un pod in Kubernetes?
In Kubernetes, i pod sono le più piccole unità di elaborazione distribuibili che puoi creare e controllare. Un pod è una raccolta di uno o più contenitori con spazio di archiviazione e risorse di rete condivise, nonché un insieme di regole su come eseguire i contenitori.
I contenuti di un pod vengono sempre posizionati insieme, pianificati 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 equivale a un insieme di contenitori Docker con spazi dei nomi e volumi del file system comuni.
Tipi di pod Kubernetes
In un cluster Kubernetes esistono due tipi di pod.
- POD a contenitore singolo: il caso d'uso 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 contenitori.
- POD a 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 più Pod, uno per ogni istanza, se hai bisogno di estendere la tua applicazione in orizzontale. Questa viene comunemente definita replica in Kubernetes. Una risorsa del carico di lavoro e il relativo controller normalmente producono e gestiscono pod replicati in un gruppo.
Lo scopo finale di Kubernetes è distribuire l'applicazione sotto forma di contenitori in un insieme di macchine chiamato nodo di lavoro nel cluster Kubernetes.
Kubernetes non avvia i contenitori direttamente nel nodo, piuttosto i contenitori vengono incapsulati come Pod, che è una singola istanza di un'applicazione.
Cluster Kubernetes
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 ampliare l'applicazione. In tal caso, potrebbe essere necessario avviare istanze aggiuntive per condividere il carico.
Per aumentare le dimensioni dell'applicazione, è necessario avviare nuovi pod aggiuntivi 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 avuto un'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 di 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.
In genere, non è necessario creare direttamente i pod, nemmeno i pod singleton. Creali invece utilizzando risorse del carico di lavoro come Deployment o Job. 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
utilizzando l'opzione --port
.
Un'immagine contenitore è un file che racchiude un programma e tutte le sue dipendenze software in dati binari. Le immagini contenitore sono pacchetti software eseguibili indipendenti che fanno presupposti estremamente specifici sul proprio 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 utente root
kubectl get nodes
Esempio di output:
NAME STATUS ROLES AGE VERSION
ostechnix Ready Master 25h v1.22.3
Ottieni i dettagli del nodo
Ora distribuisci un'applicazione di esempio chiamata "hello-ostechnix" utilizzando il comando seguente. Puoi nominarlo secondo la tua comodità.
kubectl create deployment hello-ostechnix --image=k8s.gcr.io/echoserver:1.10
Esempio di output:
deployment.apps/hello-ostechnix created
[root@ostechnix ~]#
La distribuzione è stata creata, verifica la distribuzione utilizzando il comando seguente.
kubectl get deployments
Esempio di output:
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. Utilizza il comando seguente per esporre la distribuzione sulla porta 8080
.
kubectl expose deployment hello-ostechnix --type=NodePort --port=8080
Esempio di output:
service/hello-ostechnix exposed
Utilizza il comando seguente per ottenere l'URL del servizio esposto.
minikube service hello-ostechnix --url
Esempio di output:
http://192.168.181.131:30525
URL del servizio
Copia l'URL e incollalo nel tuo browser, elencherà i dettagli dell'applicazione distribuita.
Visualizza i dettagli dell'applicazione distribuita nel browser
Assicurati che la porta 30525
sia consentita nel router o nel firewall. Se questa porta è bloccata, potresti non visualizzare le informazioni del Pod nel browser.
Elimina distribuzione
Innanzitutto, elimina il servizio "hello-ostechnix" utilizzando il comando:
kubectl delete services hello-ostechnix
Esempio di output:
service "hello-ostechnix" deleted
Successivamente, elimina la distribuzione "hello-ostechnix":
kubectl delete deployment hello-ostechnix
Esempio di output:
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
Esempio di output:
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
Output di esempio:
No resources found in default namespace.
Esegui pod con immagini
Possiamo utilizzare il comando 'kubectl run
' per creare ed eseguire un'applicazione in un pod.
kubectl run <POD name> --image=<image name>
In questo caso, il nome del pod può essere qualsiasi cosa e il nome dell'immagine deve essere specifico e sarà disponibile in Docker Hub o in qualsiasi repository locale.
Creiamo un Pod con l'immagine Nginx.
kubectl run ostechnix-nginx --image=nginx
Esempio di output:
pod/ostechnix-nginx created
È stato creato un pod denominato "ostechnix-nginx". Puoi verificare lo stato del Pod con il comando seguente.
kubectl get pods
Esempio di output:
NAME READY STATUS RESTARTS AGE
ostechnix-nginx 1/1 Running 0 4m20s
Puoi ottenere informazioni aggiuntive, ad esempio dove è in esecuzione il pod e il suo IP, utilizzando l'opzione 'wide
'.
kubectl get pods -o wide
Esempio di output:
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 il comando 'kubectl description
'.
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 dalla creazione del Pod.
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://nginx@sha256: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
[root@ostechnix ~]#
Visualizza le informazioni complete di un pod
Al termine, puoi eliminare il pod utilizzando il comando "kubectl delete
".
kubectl delete pod ostechnix-nginx
Esempio di output:
pod "ostechnix-nginx" deleted
Verifica se il Pod è stato eliminato elencando i Pod disponibili:
kubectl get pods
No resources found in default namespace.
Elimina un pod
Conclusione
In questo tutorial, abbiamo esaminato il concetto di Pod in Kubernetes, una semplice distribuzione dell'applicazione e come eseguire un Pod. Avremo maggiori dettagli sulla creazione del pod con il file di definizione YAML
nei prossimi dettagli.
Risorsa:
- https://kubernetes.io/docs/concepts/workloads/pods/