Ci hè assai letteratura di riferimentu in Internet, ma qualchì volta u cunsigliu più simplice hè u più preziosu. squadra Kubernetes aaS da Mail.ru traduttu una selezzione di dece trucchi è cunsiglii, chì l'autore di l'articulu hà cullatu dopu un annu di travagliu cù Kubernetes. I cunsiglii ùn sò micca ordinati per impurtanza, ma pensemu chì ognunu truverà qualcosa d'utile per elli.
U cumandamentu più simplice per travaglià cù Kubernetes
Per principià, forsi l'azzione più simplice è utile in u travagliu cù Kubernetes. U cumandimu seguitu permette a cumminazione di cumandamenti kubectl in bash shell:
Autocumplimentu kubectl serà scrittu à u schedariu .bashrc è serà attivatu automaticamente ogni volta chì a cunchiglia hè cuminciata. Questu accelerà a scrittura di cumandamenti longu è parametri cum'è all-namespaces. Più dettagli in Kubernetes bash aiutu.
Memoria predeterminata è limiti CPU in un spaziu di nomi
Se l'applicazione hè scritta incorrectamente, per esempiu, apre una nova cunnessione à a basa di dati ogni siconda, ma ùn a chjude mai, allora u cluster hà una fuga di memoria. È se l'applicazione ùn hà micca un limitu di memoria stabilitu durante a implementazione, questu pò purtà à un fallimentu di u nodu.
Per impediscenu questu, Kubernetes permette di stabilisce restrizioni predeterminate nantu à una basa per-namespace. Sò scritti in u schedariu yaml per un spaziu di nome specificu. Eccu un esempiu di tali file:
Crea tali yaml è appiecà à qualsiasi namespace. Per esempiu, à u namespace limit-example. Avà ogni containeru implementatu in questu spaziu di nomi avarà un limitu di 512Mi, salvu chì un altru limitu individuale hè ancu stabilitu per stu containeru.
Raccolta di rifiuti in versioni più vechje di Kubernetes
Kubelet per difettu inizia a cullizzioni di basura quandu var/lib/docker occupa u 90% di u spaziu di discu dispunibule. Questu hè grande, però, finu à Kubernetes 1.7 ùn ci era micca un limitu predeterminatu nantu à u numeru di inodes utilizati, chì currispondenu à u numeru di schedari in u sistema di schedari.
Potenzialmente u vostru containeru var/lib/docker pò aduprà solu 50% di u spaziu di discu, ma pò esce da inodes, chì pruvucarà prublemi per i travagliadori.
In e versioni più vechje di kubelet da 1.4 à 1.6 duverete aghjunghje sta bandiera:
U truccu hè cumu custruisce l'applicazione è eseguisce in u locu in quellu cluster. A menu chì specificamente struitu, l'imaghjini di Docker serà custruitu nantu à u vostru urdinatore è micca in u cluster.
Per furzà Docker à spinghja l'imaghjini à u cluster Kubernetes locale, a macchina docker riceve u cumandimu seguente:
eval $(minikube docker-env)
Avà pudemu custruisce applicazioni nantu à un cluster Kubernetes locale.
Ùn dà accessu à kubectl à tutti
Questu pare evidenti, ma se parechje squadre utilizanu u stessu cluster per e so applicazioni (chì hè per quessa chì Kubernetes hè statu creatu), ùn deve micca solu dà à tutti. kubectl. Hè megliu separà i cumandamenti, assignendu ognuna di elli u so propiu spaziu di nomi è limità l'accessu cù e pulitiche RBAC.
Pudete esse cunfunditu da assignà diritti per accede, leghje, creà, sguassà è altre operazioni per ogni pod. Ma a cosa principal hè di limità l'accessu à i sicreti, chì permettenu solu à l'amministratori. In questu modu, distingueremu trà quelli chì ponu amministrari u cluster è quelli chì ponu simpricimenti implementà à questu.
Gestisce i Budgets Pod
Cumu assicurà chì ùn ci hè micca un downtime per una applicazione in un cluster Kubernetes? PodDisruptionBudget è dinò PodDisruptionBudget.
I clusters sò periodicamente aghjurnati è i nodi sò svuotati. Nunda ferma, hè a realità. Ogni implementazione cù più di una istanza deve include un PDB (PodDisruptionBudget). Hè creatu in un schedariu yaml simplice chì hè appiicatu à u cluster. L'area di copertura di un PDB particulare hè determinata da selettori di l'etichetta.
Nutate bè: U bilanciu PDB hè cunsideratu solu quandu a violazione di u budget hè reversibile (disturbazione voluntaria). In situazioni cum'è fallimenti hardware, PDB ùn funziona micca.
I dui paràmetri principali sò matchLabels и minAvailable. U primu paràmetru specifica à quali applicazioni s'applica u budgetu. Per esempiu, se aghju implementazioni cù etichette app: app-a и app: app-b, allura stu PDB s'applicà solu à u primu.
Parameter minAvailable presa in contu quandu sviutata (pulizia) u node. Per esempiu, in u nostru esempiu, durante u sviutata, tutti i casi sò scacciati app: app-a, eccettu dui.
Questu permette di cuntrullà quante istanze di l'applicazione deve esse in esecuzione in ogni mumentu.
Monitoraghju di a salute di l'applicazioni
Un tali surviglianza hè pussibule in dui maneri: utilizendu e teste di Readiness o Liveness.
A prima sonda (prontezza) determina a prontezza di u containeru per riceve u trafficu.
U sicondu (liveness) mostra se u cuntinuu hè sanu o deve esse riavviatu.
E cunfigurazioni pertinenti sò simpliciamente aghjunte à u yaml per a implementazione. Quì pudete specificà i timeouts, i tempi di ritardu è u numeru di riprovazioni. Vede più dettagli nantu à elli Documentazione di Kubernetes.
I tags sò in ogni locu
L'etichette sò unu di i cuncetti fundamentali in Kubernetes. Permettenu à l'uggetti di cumunicà liberamente cù l'altri, è ancu di creà dumande basate nantu à etichette. In Kubernetes, pudete ancu andà à u cliente è fighjà avvenimenti per tags specifichi.
Pudete fà quasi tuttu cù tags, ma un bon esempiu seria di creà ambienti multiplici per eseguisce prugrammi nantu à u stessu cluster.
Diciamu chì utilizate u listessu cluster per dev и qa. Questu significa chì pudete avè una applicazione app-a, travagliendu simultaneamente in i dui ambienti qa и dev. In questu casu, pudemu accede separatamente à l'istanza di l'applicazione in un ambiente specificu specificendu u paràmetru adattatu environment. Per esempiu, app: app-a и environment: dev per un ambiente, è app: app-a и environment: qa per u sicondu.
Questu permette di accede à i dui casi di l'applicazione, per esempiu, per fà teste simultaneamente.
Organisatevi
Kubernetes hè un sistema assai putente, ma ogni sistema pò esse eventualmente impastatu cù troppu prucessi. U Kubelet esegue tutti i prucessi è i cuntrolli chì specificate, è ancu i so propiu.
Di sicuru, un serviziu orfanu ùn rallentarà u sistema, è Kubernetes hè pensatu per scala da a terra. Ma s'è invece di un serviziu un milione apparisce, u kubelet cumencia à choke.
Se per una certa ragione sguassate una implementazione (container, image, whatever), assicuratevi di fà una pulizia cumpleta.
Scuntrà Go
Avemu salvatu i cunsiglii principali per l'ultimu. Amparate a lingua di prugrammazione Go.
Kubernetes hè sviluppatu in Go, tutte l'estensioni sò scritte in Go, è a libreria client-go client hè ancu supportata ufficialmente.
Pò esse usatu per cose diverse è interessanti. Per esempiu, per espansione u sistema Kubernetes à u vostru gustu. Cusì, pudete aduprà i vostri propri prugrammi per cullà dati, implementà applicazioni, o simpricimenti pulizziari cuntenituri.
Amparate a lingua di prugrammazione Go è maestru di client-go hè forse u cunsigliu più impurtante chì pudete dà à i novi utilizatori Kubernetes.