8 trucchi e suggerimenti per Kubernetes

Programmatore che lavora a casa nel suo ufficio

In questo articolo esploreremo alcuni consigli e trucchi che renderanno più facile lavorare con Kubernetes.

La maggior parte dei suggerimenti forniti di seguito utilizzano kubectl, un potente strumento da riga di comando che consente di eseguire comandi sui cluster Kubernetes.

Le ultime notizie nel campo della tecnologia, supportate dalle analisi degli esperti

Resta al passo con le tendenze più importanti e interessanti del settore relative ad AI, automazione, dati e altro con la newsletter Think. Leggi l'Informativa sulla privacy IBM.

Grazie per aver effettuato l'iscrizione!

L'abbonamento sarà fornito in lingua inglese. Troverai un link per annullare l'iscrizione in tutte le newsletter. Puoi gestire i tuoi abbonamenti o annullarli qui. Per ulteriori informazioni, consulta l'Informativa sulla privacy IBM.

Informazioni di base su Kubernetes

1. Impostare i namespace predefiniti

Puoi suddividere un cluster Kubernetes in più ambienti usando namespace (ad esempio, Dev1, Dev2, QA1, QA2, ecc.), e ogni ambiente può essere gestito da un utente diverso. Uno degli inconvenienti della scrittura dei comandi di kubectl è che ogni volta che si scrive un comando, devi avere l'opzione --namespace alla fine. Le persone spesso se ne dimenticano e finiscono per creare oggetti (pod, servizi, distribuzioni) nel namespace sbagliato. 

Con questo trucco, puoi impostare la preferenza di namespace prima di eseguire i comandi kubectl. Esegui il seguente comando prima di eseguire i comandi kubectl. In questo modo, il namespace verrà salvato per tutti i successivi comandi kubectl per il contesto corrente:

kubectl config set-context $(kubectl config current-context) --namespace=mynamespace

Alcuni dei comandi più comuni e utili con namespace sono elencati di seguito:

  • kubectl get namespaces
  • kubectl create namespace mynamespace
  • kubectl get pods --all-namespaces (Elenca tutti i pod con stato da tutti i namespace.)
  • kubectl get po -o wide -o <namspace1> -n <namespace2> -n <namespace3> (Questo comando identificherà i pod in ogni namespace)
  • kubectl describe namespace <namespace>
  • kubectl config view --minify | grep namespace (Questo comando garantirà che tu imposti correttamente il namespace per il contesto attuale.) 
IBM Cloud

Red Hat OpenShift AI on IBM Cloud: implementa workload di AI

Usa le funzionalità AI con Red Hat OpenShift on IBM Cloud. Questo video spiega come creare, implementare e gestire i workload di AI in modo efficiente con una piattaforma di operazioni di apprendimento automatico scalabile.

2. Alias utili per risparmiare tempo

I comandi di Kubernetes possono essere piuttosto lunghi, quindi la creazione di alcuni alias per l'esecuzione di kubectl è molto utile. Non dovrai più ripetere il comando completo più e più volte, rendendoti la vita molto più facile quando vuoi eseguire più comandi Kubernetes in una sola sessione.

Di seguito abbiamo elencato gli alias di alcuni comandi utilizzati di frequente. Esegui questi test prima di eseguire i comandi kubectl per risparmiare tempo. Esempio: basta digitare K invece di digitare kubectl:

  • alias k='kubectl'
  • alias kc='k config view --minify | grep name'
  • alias kdp='kubectl describe pod'
  • alias krh='kubectl run --help | more'
  • alias ugh='kubectl get --help | more'
  • alias c='clear'
  • alias kd='kubectl describe pod'
  • alias ke='kubectl explain'
  • alias kf='kubectl create -f'
  • alias kg='kubectl get pods --show-labels'
  • alias kr='kubectl replace -f'
  • alias kh='kubectl --help | more'
  • alias krh='kubectl run --help | more'
  • alias ks='kubectl get namespaces'
  • alias l='ls -lrt'
  • alias ll='vi ls -rt | tail -1'
  • alias kga='k get pod --all-namespaces'
  • alias kgaa='kubectl get all --show-labels'

 

3. Modifica di YAML con vi

Sono disponibili molti editor diversi per scrivere file YAML, ma ci sono molte occasioni in cui potrebbe essere necessario modificare rapidamente uno YAML generato mentre si lavora su un terminale. Questo è un luogo ideale per utilizzare il nostro fidato vi, l'editor di testo originariamente creato per il sistema operativo Unix.

L'editor vi è ben documentato e ha il supporto di una vivace comunità open source. Uno dei problemi dell'editor vi durante la creazione di file YAML, però, è la gestione degli spazi. Serve un modo per fare l'indentazione con le tabulazioni e l'allineamento con gli spazi. L'uso di tabulazioni invece di spazi per lo spazio bianco ha sempre creato problemi di sintassi durante la scrittura di file YAML (ad esempio, ottenere il YAML a 2 spazi come predefinito quando si preme Invio).

La soluzione? Crea un file ~/.vimrc con queste righe prima di creare file YAML con l'editor vi per facilitare la modifica:

  • set smarttab
  • set expandtab
  • set shiftwidth=4
  • set tabstop=4
  • set number

4. Creare YAML dai comandi kubectl

Possiamo creare file YAML complessi dalla riga di comando usando comandi kubectl.

La maggior parte delle persone concorderebbe sul fatto che lavorare con i file YAML non è divertente e che i file YAML di Kubernetes possono essere molto prolissi e difficili da creare da zero. È molto più semplice creare il file YAML dai comandi kubectl anziché da una pagina vuota utilizzando un editor.

I seguenti comandi creeranno un file YAML con il nome yamlfile . Una volta creato il file YAML da questi comandi kubectl, puoi modificarlo in base alle tue esigenze e usarlo invece di scrivere da zero:

  • kubectl run busybox --image=busybox --dry-run=client -o yaml --
    restart=Never > yamlfile.yaml
    
    kubectl create job my-job --dry-run=client -o yaml --image=busybox -- date>yamlfile.yaml
    
  • kubectl get -o yaml deploy/nginx > 1.yaml(Assicurati di avere
    una distribuzione chiamata nginx)
    
  • kubectl run busybox --image=busybox --dry-run=client -o yaml 
    --restart=Never -- /bin/sh -c "while true; do echo hello; echo 
    hello again;done" > yamlfile.yaml
    
  • kubectl run wordpress --image=wordpress –-expose –-port=8989 -
    -restart=Never -o yaml
    
  • kubectl run test --image=busybox --restart=Never --dry -
    run=client -o yaml -- bin/sh -c 'echo test;sleep 100' > 
    yamlfile.yaml(Nota che --bin va alla fine. Questo creerà un file yaml.)
    

(Nota che --bin  va alla fine. Questo creerà un file yaml.)

Un'altra buona idea per creare il file YAML è ottenere il file direttamente da Internet usando il comando wget . 

5. Passaggio tra namespace Kubernetes

Nel suggerimento 1, abbiamo appreso alcuni comandi utili per utilizzare i namespace di Kubernetes e salvarli in modo da non doverli aggiungere a ogni comando. Espandiamo il suggerimento per facilitare il passaggio tra namespace e contesti kubectl.

Ci sono diversi strumenti che possono aiutare, ma ci piacciono kubectx e kubens per gestire contesti e namespace, rispettivamente. Puoi trovare i dettagli su kubectx e kubens qui.

Ecco come scaricare i binari Linux per le utility kubectx e kubens:

  • wget https://github.com/ahmetb/kubectx/releases/download/v0.9.0/kubectx_v0.9.0_linux_x86_64.tar.gz
    
  • wget https://github.com/ahmetb/kubectx/releases/download/v0.9.0/kubens_v0.9.0_linux_x86_64.tar.gz
    

Poi li estrai con i seguenti comandi:

  • tar -xvf kubectx_v0.9.0_linux_x86_64.tar.gz
    
  • tar -xvf kubens_v0.9.0_linux_x86_64.tar.gz
    

Infine, li sposti sul tuo PERCORSO:

  • sudo mv kubectx /usr/local/bin
  • sudo mv kubens /usr/local/bin

Una volta installato, puoi semplicemente usare kubens per elencare i namespace e passare tra di essi:

Una volta installato, puoi semplicemente usare kubens per elencare i namespace e passare tra di essi:

Quando si lavora con più cluster, kubectx rende il passaggio tra i contesti più semplice:

Quando si lavora con più cluster, kubectx rende il passaggio tra i contesti più semplice

6. Completamento automatico della shell

Sapevi che kubectl fornisce il completamento automatico per BASH e ZSH? Questa è una configurazione facoltativa.

Supponiamo che tu comprenda i concetti di Kubernetes e abbia una certa esperienza con kubectl, ma forse memorizzare i comandi non è il tuo forte. Prima installa bash-completion e poi abilita il completamento automatico di kubectl. Puoi trovare tutti i dettagli nella pagina della documentazione "Install and Set Up kubectl" per il tuo ambiente.

Di seguito sono riportate le opzioni di configurazione con la funzione di completamento automatico:

Di seguito sono riportate le opzioni di configurazione con la funzione di completamento automatico:

Ora vai di tabulazioni!

7. Visualizzare l'utilizzo delle risorse

Il comando top è probabilmente uno degli strumenti più popolari per monitorare i processi e le risorse del sistema. Fornisce un'interfaccia semplice basata sui caratteri e un accesso rapido alle informazioni cruciali.

Puoi vedere l'utilizzo delle risorse per nodo:

Puoi vedere l'utilizzo delle risorse per nodo:

Utilizzo delle risorse per pod:

Utilizzo delle risorse per pod:

E il pratico comando watch può aiutarti a visualizzare il comando in un intervallo desiderabile, senza doverlo eseguire più volte. L'esempio seguente fa sì che venga eseguito ogni cinque secondi (il valore predefinito è di due secondi): 

watch kubectl top node -n 5

Nota: è necessario scaricare il comando watch per il tuo ambiente.

Il tuo cluster Kubernetes deve inoltre avere heapster in esecuzione affinché il comando top funzioni; in caso contrario riceverai il seguente errore: "Error from server (NotFound): the server could not find the requested resource (get services http:heapster:)"

8. Estendere kubectl e creare i propri comandi usando output grezzi

Il comando kubectl fornisce una visione riassuntiva delle risorse memorizzate dall'apiserver. Ci sono molti altri campi memorizzati dall'apiserver che non vengono mostrati. Puoi usare il comando kubectl get con l'output delle risorse grezze per creare la tua visualizzazione e i tuoi comandi. 

Puoi stampare le risorse grezze in JSON con il seguente comando:

kubectl get deployments -o json

Puoi anche chiamare direttamente la risorsa usando la chiamata API:

kubectl get --raw=/apis/apps/v1/deployments

Puoi persino combinare l'output con strumenti come jq per fornire visualizzazioni diverse, filtrare l'output o alimentare l'output ad altri strumenti per l'automazione avanzata. 

Ad esempio, può essere difficile trovare problemi su cluster con più namespace e distribuzioni, ma l'esempio qui sotto utilizza l'API grezza per analizzare tutte le distribuzioni nel cluster e filtrare solo quelle con repliche non riuscite:

 

kubectl get --raw=/apis/apps/v1/deployments | jq '.items[] 
| {name: .metadata.name, replicas: .status.replicas, available:
 (.status.availableReplicas // 0), unavailable:
 (.status.unavailableReplicas // 0)} | select (.unavailable > 0)'

Di seguito viene fornita una breve spiegazione del comando sopra:

  • Per prima cosa, chiamiamo l'API di Kubernetes per restituire tutte le distribuzioni. L'output predefinito è in JSON. È difficile visualizzare la struttura del documento JSON, ma puoi reindirizzare l'output a jq per avere un'idea migliore, come mostrato nell'esempio qui sotto:

    kubectl get --raw=/apis/apps/v1/deployments | jq .

  • Nota che il documento di risposta contiene una serie di elementi per ogni implementazione. Alla fine vogliamo ispezionare il campo di stato di questo array fino in fondo. Il comando qui sotto mostra come stampare solo i dati necessari e un valore predefinito di 0 quando il campo non è disponibile:

     

    kubectl get --raw=/apis/apps/v1/deployments | jq '.items[] |
    {name: .metadata.name, replicas: .status.replicas, available:
     (.status.availableReplicas // 0), unavailable: 
    (.status.unavailableReplicas // 0)}'
    
  • L'ultimo elemento del puzzle è l'uso della funzione select per visualizzare solo le implementazioni con repliche non disponibili:

     

    kubectl get --raw=/apis/apps/v1/deployments | jq '.items[] | 
    {name: .metadata.name, replicas: .status.replicas, available:
     (.status.availableReplicas // 0), unavailable: 
    (.status.unavailableReplicas // 0)} | select (.unavailable > 0)'
    

Riepilogo

Ci auguriamo che questi suggerimenti e trucchi ti siano utili mentre lavori con Kubernetes. Facci sapere se hai un suggerimento preferito o uno tuo che vorresti condividere.

Non dimenticare di dare un'occhiata a IBM Cloud Kubernetes Service e mettere in pratica questi consigli e trucchi.

Vuoi fare esperienza pratica e gratuita con Kubernetes? Utilizza al meglio IBM CloudLab, una nuova piattaforma interattiva che offre tutorial Kubernetes con certificazione, senza costi o configurazioni necessari.

Autore

Ravi Saraswathi

IBM Chief Architect

IBM Blog

Marcelo Borges

Lead Cloud Solution Architect

Soluzioni correlate
IBM Red Hat OpenShift

Red Hat OpenShift on IBM Cloud è una OpenShift Container Platform (OCP) completamente gestita.

Esplora Red Hat OpenShift
Soluzioni container

Le soluzioni basate su container eseguono e scalano workload containerizzati con sicurezza, innovazione open source e implementazione rapida.

Esplora i container
Servizi di consulenza cloud 

Sblocca nuove funzionalità e promuovi l'agilità aziendale con i servizi di consulenza cloud di IBM. Scopri come creare insieme soluzioni, accelerare la trasformazione digitale e ottimizzare le prestazioni attraverso strategie di hybrid cloud e partnership di esperti.

Servizi cloud
Fai il passo successivo

Inizia con una piattaforma Red Hat OpenShift completamente gestita o esplora la flessibilità dell'ecosistema Kubernetes di IBM Cloud. Accelera il processo di sviluppo e distribuzione con soluzioni scalabili e sicure, su misura per le tue esigenze.

Esplora Red Hat OpenShift Esplora Kubernetes