Top 10 Trucchi è Cunsiglii di Kubernetes

Top 10 Trucchi è Cunsiglii di Kubernetes

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:

echo "source <(kubectl completion bash)" >> ~/.bashrc

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:

apiVersion: v1
kind: LimitRange
metadata:
  name: mem-limit-range
spec:
  limits:
  - default:
      memory: 512Mi
    defaultRequest:
      memory: 256Mi
    type: Container

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:

--eviction-hard
=memory.available<100Mi,nodefs.available<10%,nodefs.inodesFree<5%

In e versioni 1.7 è più tardi sta bandiera hè stabilita per difettu. Tuttavia, e versioni precedenti ùn monitoranu micca u limitu inode.

Minikube... Kubernetes lucali chjuchi ma putenti

Minikube hè u modu più faciule per eseguisce un cluster Kubernetes locale. Hè lanciatu cù un cumandamentu simplice:

minikube start

Eseguisce stu cumandamentu si traduce in un veru cluster Kubernetes in esecuzione in a vostra macchina.

Top 10 Trucchi è Cunsiglii di Kubernetes
Fonte di l'illustrazione

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.

Esempiu PDB:

apiVersion: policy/v1beta1
kind: PodDisruptionBudget
metadata:
  name: app-a-pdb
spec:
  minAvailable: 2
  selector:
      matchLabels:
        app: app-a

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.

Traduttu cù u sustegnu di Mail.ru Cloud Solutions

Chì altru à leghje:

  1. Trè livelli di autoscaling in Kubernetes è cumu aduprà in modu efficace.
  2. Nodi di u travagliu Kubernetes: parechji chjuchi o pochi grandi?
  3. 25 Strumenti utili per l'implementazione è a gestione di Kubernetes.

Source: www.habr.com

Add a comment