Ricerca nel sito web

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/

Articoli correlati