
In rete ci sono molte risorse informative, ma a volte i consigli più semplici si rivelano i più preziosi. Il team ha tradotto , raccolti dall'autore dell'articolo dopo un anno di lavoro con Kubernetes. I consigli non sono ordinati per importanza, ma pensiamo che ognuno possa trovare qualcosa di utile per sé.
Il comando più semplice per lavorare con Kubernetes
Per cominciare, probabilmente l'azione più semplice e utile nel lavoro con Kubernetes è che il seguente comando abilita il completamento automatico dei comandi kubectl nella shell bash:
echo "source > ~/.ashrc
Il completamento automatico kubectl sarà registrato nel file .bashrc e si attiverà automaticamente ogni volta che si avvia la shell. Questo accelera la digitazione di comandi e parametri lunghi, come all-namespaces. Maggiori dettagli nel .
I limiti predefiniti di memoria e CPU nello spazio dei nomi
Se un'applicazione è scritta in modo errato, ad esempio, apre una nuova connessione al database ogni secondo senza mai chiuderla, si verifica una perdita di memoria nel cluster. E se per l'applicazione non sono impostati limiti di memoria al momento del deploy, ciò potrebbe portare a un guasto del nodo.
Per prevenire ciò, Kubernetes consente di impostare limiti predefiniti per ogni spazio dei nomi. Questi vengono definiti in un file yaml per un determinato spazio dei nomi. Ecco un esempio di tale file:
apiVersion: v1
kind: LimitRange
metadata:
name: mem-limit-range
spec:
limits:
- default:
memory: 512Mi
defaultRequest:
memory: 256Mi
type: Container
Crea un file yaml di questo tipo e applicalo a qualsiasi spazio dei nomi. Ad esempio, allo spazio dei nomi limit-example. Ora, per qualsiasi contenitore distribuito in questo spazio dei nomi, si applicherà un limite di 512Mi, a meno che non venga impostato un altro limite individuale per quel contenitore.
Pulizia della spazzatura nelle vecchie versioni di Kubernetes
Kubelet inizia automaticamente la pulizia quando var/lib/docker occupa il 90% dello spazio disco disponibile. Questo è positivo, tuttavia, fino alla versione 1.7 di Kubernetes non c'era un limite predefinito sul numero di descrittori di indice inode (inodes) utilizzati, che corrispondono al numero di file nel file system.
Potenzialmente, il tuo contenitore var/lib/docker può utilizzare solo il 50% dello spazio disco, ma gli inode possono finire, causando problemi nel funzionamento dei worker.
Nelle vecchie versioni di kubelet dalla 1.4 alla 1.6 è necessario aggiungere il seguente flag:
--eviction-hard
=memory.available<100Mi,nodefs.available<10%,nodefs.inodesFree<5%
Nella versione 1.7 e nelle versioni successive, questo flag è impostato di default. Tuttavia, le versioni precedenti non controllano il limite degli inode.
Minikube… piccolo ma potente Kubernetes locale
Minikube è il modo più semplice per avviare un cluster Kubernetes locale. Si avvia con un semplice comando:
minikube start
Di conseguenza, eseguendo questo comando, avrai un vero cluster Kubernetes sul tuo computer.

Il trucco è come costruire un'applicazione e avviarla localmente in questo cluster. Se non vengono fornite indicazioni specifiche, l'immagine Docker verrà costruita sul tuo computer, e non nel cluster.
Per costringere Docker a inviare l'immagine al cluster Kubernetes locale, si usa il seguente comando:
eval $(minikube docker-env)
Ora possiamo costruire applicazioni sul cluster Kubernetes locale.
Non concedere l'accesso a kubectl a chiunque
Sembra ovvio, ma se più team utilizzano un unico cluster per le loro applicazioni (ed è questo il motivo per cui è stato creato Kubernetes), non è opportuno concedere l'accesso a tutti indiscriminatamente. kubectl. È meglio separare i team, assegnando a ciascuno il proprio spazio dei nomi e limitando l'accesso mediante politiche RBAC.
Si può complicare la situazione specificando per ogni pod i permessi di accesso, lettura, creazione, eliminazione e altre operazioni. Ma la cosa più importante è limitare l'accesso ai segreti, consentendolo solo agli amministratori. In questo modo distinguiamo tra chi può amministrare il cluster e chi può semplicemente essere distribuito al suo interno.
Gestisci i budget dei pod
Come garantire l'assenza di tempi di inattività per l'applicazione in un cluster Kubernetes? PodDisruptionBudget e ancora PodDisruptionBudget.
I cluster vengono aggiornati periodicamente e i nodi vengono svuotati. Nulla rimane fermo, questa è la realtà. In ogni deployment con più di un'istanza è fondamentale includere il PDB (PodDisruptionBudget). Viene creato in un semplice file yaml, applicato al cluster. L'ambito di applicazione di un PDB specifico è determinato dai selettori di etichette.
Nota: Il budget del PDB viene considerato solo in caso di violazione del budget reversibile (). In situazioni come guasti hardware, il PDB non entrerà in azione.
Esempio di PDB:
apiVersion: policy/v1beta1
kind: PodDisruptionBudget
metadata:
name: app-a-pdb
spec:
minAvailable: 2
selector:
matchLabels:
app: app-a
I due parametri principali sono matchLabels e minAvailable. Nel primo parametro si specifica per quali applicazioni si applica il budget. Ad esempio, se ho dei deploy con etichette app: app-a e app: app-b, questo PDB verrà applicato solo al primo.
Caratteristica minAvailable considerato durante lo svuotamento (pulizia) del nodo. Ad esempio, nel nostro caso, durante lo svuotamento vengono espulsi tutti gli istanze app: app-a, tranne due.
Questo consente di controllare quanti esemplari dell'applicazione devono essere in esecuzione in ogni momento.
Monitoraggio della salute dell'applicazione
Questo monitoraggio può essere effettuato in due modi: tramite probe Readiness o Liveness.
La prima probe (readiness) determina se il container è pronto a ricevere traffico.
La seconda (liveness) indica se il container è operativo o se deve essere riavviato.
Le relative configurazioni vengono semplicemente aggiunte nel file yaml per il deployment. Lì è possibile specificare timeout, tempi di attesa e numero di ripetizioni delle probe. Maggiori dettagli si trovano nella .
Etichette ovunque
Le etichette sono uno dei concetti fondamentali in Kubernetes. Permettono agli oggetti di collegarsi liberamente tra loro e di effettuare richieste basate sulle etichette. In Kubernetes, è persino possibile accedere al client e monitorare gli eventi in base a etichette specifiche.
Con le etichette si può fare praticamente tutto, ma un buon esempio è la creazione di più ambienti per eseguire programmi in un unico cluster.
Supponiamo che tu stia utilizzando lo stesso cluster per dev e qa. Ciò significa che potresti avere un'applicazione app-a, che funziona simultaneamente in entrambi gli ambienti qa e dev. In questo caso, possiamo accedere separatamente all'istanza dell'applicazione in un ambiente specifico, specificando il parametro corrispondente environment. Ad esempio, app: app-a e environment: dev per un ambiente e app: app-a e environment: qa per l'altro.
Questo consente di accedere a entrambe le istanze dell'applicazione, ad esempio, per effettuare test in contemporanea.
Metti in ordine
Kubernetes è un sistema molto potente, ma qualsiasi sistema può finire per impantanarsi in un gran numero di processi. Kubelet avvia tutti i processi e i controlli che hai specificato, oltre ai propri.
Certo, un singolo servizio non rallenterà il sistema, e Kubernetes è progettato fin dall'inizio per la scalabilità. Ma se invece di un servizio ne appaiono un milione, kubelet inizia a faticare.
Se per qualche motivo elimini un deployment (container, immagine, qualsiasi cosa), assicurati solo di fare una pulizia completa.
Incontra Go
Il consiglio principale lo abbiamo riservato per ultimo. Studia il linguaggio di programmazione Go.
Kubernetes è sviluppato in Go, tutte le estensioni sono scritte in Go, e la libreria client ufficialmente supportata è client-go.
Può essere utilizzata per cose diverse e interessanti. Ad esempio, per estendere il sistema Kubernetes a proprio piacimento. Quindi, puoi usare programmi personalizzati per raccogliere dati, distribuire applicazioni o semplicemente pulire i container.
Studiare il linguaggio di programmazione Go e padroneggiare client-go è senza dubbio il consiglio più importante per i nuovi utenti di Kubernetes.
Cosa leggere ancora:
- .
- ?
- .
Fonte: habr.com
