
Su Internet ci sono molte risorse di riferimento, ma a volte i consigli più semplici si rivelano i più preziosi. Il team ha tradotto , che l'autore dell'articolo ha raccolto dopo un anno di lavoro con Kubernetes. I suggerimenti 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 iniziare, forse l'azione più semplice e utile nel lavoro con Kubernetes. Il seguente comando attiva il completamento automatico dei comandi kubectl nella shell bash:
echo "source > ~/bashrc
Il completamento automatico kubectl verrà registrato nel file .bashrc e sarà attivato automaticamente ogni volta che si apre la shell. Questo accelera la digitazione di comandi lunghi e parametri, come all-namespaces. Maggiori dettagli nella .
Le limitazioni predefinite di memoria e CPU nello spazio dei nomi
Se un'applicazione è scritta in modo errato, ad esempio, apre una nuova connessione con il database ogni secondo senza mai chiuderla, si verifica una perdita di memoria nel cluster. E se per l'applicazione non viene impostato un limite di memoria al momento del deploy, questo può portare al crash del nodo.
Per prevenire ciò, Kubernetes consente di impostare limitazioni predefinite per ogni spazio dei nomi. Queste vanno specificate nel file yaml per un particolare 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. Adesso, per qualsiasi container distribuito in questo spazio dei nomi, si applicherà un limite di 512Mi, a meno che non venga impostato un altro limite individuale.
Pulizia della spazzatura nelle vecchie versioni di Kubernetes
Kubelet per impostazione predefinita inizia la pulizia della spazzatura quando var/lib/docker occupa il 90% dello spazio su disco disponibile. Questo è ottimo, ma fino alla versione 1.7 di Kubernetes non c'era un limite predefinito sul numero di descrittori di inode index (inodes) utilizzati, che corrispondono al numero di file nel file system.
Potenzialmente, il tuo container var/lib/docker può utilizzare solo il 50% dello spazio su disco, ma gli inode potrebbero finire, causando problemi nel funzionamento dei worker.
Nelle vecchie versioni di kubelet dalla 1.4 alla 1.6, sarà necessario aggiungere questo flag:
--eviction-hard
=memory.available<100Mi,nodefs.available<10%,nodefs.inodesFree<5%
Nella versione 1.7 e versioni successive, questo flag è impostato di default. Tuttavia, le versioni precedenti non monitorano il limite degli inode.
Minikube… piccolo ma potente Kubernetes locale
Minikube è il modo più semplice per avviare un cluster Kubernetes locale. Viene avviato con un semplice comando:
minikube start
Dopo aver eseguito questo comando, avrete un vero cluster Kubernetes in esecuzione sul vostro computer.

Il trucco è come costruire un'applicazione e avviarla localmente in questo cluster. Se non vengono date istruzioni specifiche, l'immagine Docker sarà costruita sul computer e non nel cluster.
Per costringere Docker a inviare l'immagine al cluster Kubernetes locale, si dà il seguente comando a docker-machine:
eval $(minikube docker-env)
Ora possiamo costruire applicazioni nel cluster Kubernetes locale.
Non concedete l'accesso a kubectl a chiunque
Sembra ovvio, ma se più team utilizzano un cluster per le proprie applicazioni (per questo Kubernetes è stato creato), non dovreste semplicemente concedere l'accesso a chiunque. kubectlÈ meglio separare i team, assegnando a ciascuno il proprio spazio dei nomi e delimitando l'accesso con politiche RBAC.
Si può rendere complicato specificando per ogni pod i diritti di accesso, lettura, creazione, cancellazione e altre operazioni. Ma la cosa principale è limitare l'accesso ai segreti, consentendolo solo agli amministratori. In questo modo separiamo chi può amministrare il cluster da chi può semplicemente essere distribuito al suo interno.
Gestite i budget dei pod
Come garantire l'assenza di interruzioni per un'applicazione nel cluster Kubernetes? PodDisruptionBudget e ancora PodDisruptionBudget.
I cluster vengono aggiornati periodicamente e i nodi vengono svuotati. Nulla rimane fermo, questa è la realtà. Ogni distribuzione con più di un'istanza dovrebbe includere obbligatoriamente il PDB (PodDisruptionBudget). Viene creato in un semplice file yaml, che viene applicato al cluster. La copertura di un PDB specifico è definita dai selettori delle etichette.
Nota: Il budget PDB viene preso in considerazione solo in caso di interruzione del budget reversibile (). In situazioni come guasti hardware, il PDB non sarà attivato.
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 viene indicato per quali applicazioni è valido il budget. Ad esempio, se ho delle distribuzioni con le etichette app: app-a e app: app-b, questo PDB verrà applicato solo alla prima.
Parametro minAvailable viene considerato durante lo svuotamento (pulizia) del nodo. Ad esempio, nel nostro caso durante lo svuotamento vengono espulsi tutte le istanze app: app-a, tranne due.
Questo consente di controllare quanti esemplari dell'applicazione devono essere attivi in ogni momento.
Monitoraggio della salute dell'applicazione
Questo monitoraggio è possibile in due modi: tramite probe di Readiness o Liveness.
La prima probe (readiness) determina se il contenitore è pronto per ricevere traffico.
La seconda (liveness) indica se il contenitore è funzionante o se deve essere riavviato.
Le relative configurazioni vengono semplicemente aggiunte al file yaml per il deployment. Qui è possibile specificare timeout, tempi di attesa e numero di retry. Maggiori dettagli sono disponibili nella .
Etichette ovunque
Le etichette sono uno dei concetti fondamentali in Kubernetes. Permettono agli oggetti di collegarsi liberamente tra loro e di effettuare query basate sulle etichette. In Kubernetes, è persino possibile accedere al client e monitorare gli eventi in base a etichette specifiche.
Con le etichette si possono realizzare praticamente tutte le operazioni, 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, in esecuzione contemporaneamente in entrambi gli ambienti qa e dev. In questo caso, possiamo accedere separatamente all'esemplare dell'applicazione in un ambiente specifico, specificando il relativo parametro ambiente. Ad esempio, app: app-a e environment: dev per un ambiente, e app: app-a e environment: qa per il secondo.
Questo consente di accedere a entrambi gli esemplari dell'applicazione, ad esempio, conducendo test simultanei.
Fare ordine
Kubernetes è un sistema molto potente, ma qualsiasi sistema può eventualmente impantanarsi in un gran numero di processi. Kubelet avvia tutti i processi e le verifiche che hai specificato, oltre ai propri.
Certamente, un servizio orfano non rallenterà il sistema, e Kubernetes è progettato per scalare fin dall'inizio. Ma se invece di un servizio ne compaiono milioni, kubelet comincia a subire colpi.
Se per qualche motivo annulli un deployment (contenitore, immagine, qualsiasi cosa), assicurati semplicemente di fare una pulizia completa.
Scopri Go
Il consiglio principale lo abbiamo lasciato per ultimo. Studia il linguaggio di programmazione Go.
Kubernetes è sviluppato in Go, tutte le estensioni sono scritte in Go, e inoltre è ufficialmente supportata la libreria client client-go.
Può essere utilizzato per cose diverse e interessanti. Ad esempio, per estendere il sistema Kubernetes a proprio piacimento. Così, puoi usare i tuoi programmi per raccogliere dati, distribuire applicazioni o semplicemente pulire contenitori.
Imparare il linguaggio di programmazione Go e padroneggiare client-go è forse il consiglio più importante che si possa dare ai nuovi utenti di Kubernetes.
Cosa leggere ancora:
- .
- ?
- .
Fonte: habr.com
