De 10 bÀsta knepen och tipsen för Kubernetes

De 10 bÀsta knepen och tipsen för Kubernetes

PÄ internet finns det mycket referenslitteratur, men ibland Àr de enklaste rÄden de mest vÀrdefulla. Teamet Kubernetes aaS frÄn Mail.ru har översatt en sammanstÀllning av tio knep och tips, som artikelns författare sammanstÀllde efter ett Ärs arbete med Kubernetes. Tipsen Àr inte sorterade efter vikt, men vi tror att alla kan hitta nÄgot anvÀndbart för sig sjÀlva.

Det enklaste kommandot för arbete med Kubernetes

För att börja, Àr nog den enklaste och mest anvÀndbara ÄtgÀrden i arbetet med Kubernetes. Följande kommando aktiverar autocompletion av kommandon kubectl i bash-skalet:

echo "source > ~/.bashrc

Autocompletion kubectl registreras i filen .bashrc och aktiveras automatiskt varje gÄng man startar skalet. Detta snabbar upp skrivandet av lÄnga kommandon och parametrar, sÄsom all-namespaces. Mer information finns i Kubernetes-hjÀlp för bash.

StandardbegrÀnsningar för minne och CPU i namnrymden

Om en applikation Àr felaktigt skriven, till exempel om den öppnar en ny databasanslutning varje sekund men aldrig stÀnger den, kommer det att leda till minneslÀckor i klustret. Och om inget minnesgrÀns sÀtts vid deployment för applikationen, kan det leda till nodfel.

För att förhindra detta tillÄter Kubernetes att man sÀtter standardbegrÀnsningar för varje namnrymd. Dessa anges i en yaml-fil för den specifika namnrymden. HÀr Àr ett exempel pÄ en sÄdan fil:

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

Skapa en sÄdan yaml-fil och tillÀmpa den pÄ vilken namnrymd som helst. Till exempel pÄ namnrymden limit-example. Nu kommer en grÀns pÄ 512Mi att gÀlla för alla containrar som distribueras i denna namnrymd, om inte ett annat individuellt grÀns sÀtts för den specifika containern.

SkrÀpstÀdning i Àldre versioner av Kubernetes

Kubelet börjar som standard stÀda ut skrÀp nÀr /var/lib/docker upptar 90 % av det tillgÀngliga diskutrymmet. Detta Àr bra, men fram till version 1.7 av Kubernetes fanns det ingen standardgrÀns för antalet anvÀnda inode-indexdeskriptorer (inodes), som motsvarar antalet filer i filsystemet.

Potentiellt kan din container /var/lib/docker bara anvÀnda 50 % av diskutrymmet, men ÀndÄ kan inodes ta slut, vilket kan orsaka problem med arbetarna.

I Àldre versioner av kubelet frÄn 1.4 till 1.6 mÄste du lÀgga till flaggan:

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

FrÄn och med version 1.7 och senare Àr denna flagga aktiverad som standard. Tidigare versioner övervakar dock inte inodgrÀnsen.

Minikube... liten men kraftfull lokal Kubernetes

Minikube Àr det enklaste sÀttet att starta en lokal Kubernetes-kluster. Den startas med ett enkelt kommando:

minikube start

Som ett resultat av att köra detta kommando kör du en riktig Kubernetes-kluster pÄ din dator.

De 10 bÀsta knepen och tipsen för Kubernetes
KĂ€lla till illustration

Tricket Àr att bygga en applikation och fÄ den att köras lokalt i denna kluster. Om inga speciella instruktioner ges kommer Docker-bilden att byggas pÄ din dator, inte i klustret.

För att fÄ Docker att skicka bilden till den lokala Kubernetes-klustret ges följande kommando till docker-maskinen:

eval $(minikube docker-env)

Nu kan vi bygga applikationer pÄ den lokala Kubernetes-klustret.

Ge inte kubectl-Ätkomst till alla

Detta kan verka uppenbart, men om flera team anvÀnder en kluster för sina applikationer (vilket Àr syftet med Kubernetes), bör man inte bara ge Ätkomst till alla. kubectlBÀttre att dela upp teamen och ge varje team sitt eget namnrymd och avgrÀnsa Ätkomst med RBAC-policies.

Det gÄr att gÄ in i detalj och ange ÄtkomstrÀttigheter för varje podd för att lÀsa, skapa, ta bort och andra operationer. Men det viktigaste Àr att begrÀnsa Ätkomsten till hemligheter, och endast tillÄta administratörer Ätkomst. PÄ sÄ sÀtt skiljer vi pÄ dem som kan administrera klustret och dem som bara kan distribuera i det.

Hantera poddarnas budgetar

Hur kan man sÀkerstÀlla att applikationen inte fÄr driftstopp i Kubernetes-klustret? PodDisruptionBudget och Äterigen PodDisruptionBudget.

Klustren uppdateras regelbundet och noder töms. Ingenting stÄr still, sÄdan Àr verkligheten. Varje deployment med mer Àn en instans bör nödvÀndigtvis inkludera PDB (PodDisruptionBudget). Den skapas i en enkel yaml-fil som tillÀmpas pÄ klustret. TÀckningsomrÄdet för ett specifikt PDB definieras av label-selektorer.

AnmÀrkning: PDB-budgeten beaktas endast vid reversibla budgetövertrÀdelser (voluntary disruption). I situationer som hÄrdvarufel kommer PDB inte att fungera.

Exempel pÄ PDB:

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

De tvÄ frÀmsta parametrarna Àr matchLabels och minAvailableI den första parametern anges vilka applikationer budgeten gÀller. Till exempel, om jag har distributioner med etiketter app: app-a och app: app-b, sÄ kommer denna PDB endast att tillÀmpas pÄ den första.

Parameter minAvailable beaktas vid tömning av noden. Till exempel, i vÄrt exempel tas alla instanser bort under tömningen, app: app-a, utom tvÄ.

Detta gör det möjligt att kontrollera hur mÄnga instanser av applikationen som ska köras vid varje given tidpunkt.

Övervakning av applikationens hĂ€lsa

SÄdan övervakning Àr möjlig pÄ tvÄ sÀtt: genom Readiness eller Liveness kontroller.

Den första kontrollen (readiness) avgör om containern Àr redo att ta emot trafik.

Den andra (liveness) visar huruvida containern Àr funktionell eller om den behöver startas om.

De relevanta konfigurationerna lÀggs enkelt till i yaml-filen för distributionen. DÀr kan tidsgrÀnser, fördröjningar och antal upprepningar anges. Mer information om dem finns i Kubernetes-dokumentationen.

Etiketter överallt

Etiketter Àr ett av de grundlÀggande begreppen i Kubernetes. De gör det möjligt för objekt att fritt kopplas samman och att skapa förfrÄgningar baserade pÄ etiketter. I Kubernetes kan man till och med gÄ till klienten och övervaka hÀndelser baserat pÄ specifika etiketter.

Med hjÀlp av etiketter kan man göra nÀstan vad som helst, men ett bra exempel Àr att skapa flera miljöer för att köra program i en och samma kluster.

Anta att ni anvÀnder samma kluster för dev och qa. Det betyder att ni kan ha en applikation app-a, som arbetar samtidigt i bÄda miljöerna. qa och dev. I sÄ fall kan vi hÀnvisa till en specifik instans av applikationen i en viss miljö genom att ange den motsvarande parameter miljö. Till exempel, app: app-a och environment: dev för en miljö, och app: app-a och environment: qa för den andra.

Detta gör det möjligt att hÀnvisa till bÄda instanserna av applikationen, till exempel för att samtidigt genomföra tester.

Rensa upp

Kubernetes Àr ett mycket kraftfullt system, men vilket system som helst kan sÄ smÄningom fastna i ett stort antal processer. Kubelet startar alla processer och kontroller som ni angivit, samt sina egna.

Naturligtvis kommer en förÀldralös tjÀnst inte att bromsa systemet, och Kubernetes Àr frÄn början designat för skalning. Men om en tjÀnst blir en miljon börjar kubelet att kvÀvas.

Om du av nÄgon anledning raderar en distribution (container, bild, vad som helst), se bara till att rensa helt.

LÀr kÀnna Go

Det viktigaste rÄdet har vi sparat till sist. LÀr dig programmeringssprÄket Go.

Kubernetes Àr skrivet i Go, alla tillÀgg Àr skrivna i Go, och den officiella klientbiblioteket client-go stöds ocksÄ.

Det kan anvÀndas för olika och intressanta saker. Till exempel för att anpassa Kubernetes-systemet. Du kan anvÀnda egna program för att samla in data, distribuera applikationer eller helt enkelt rensa containrar.

Att lÀra sig programmeringssprÄket Go och bemÀstra client-go Àr förmodligen det viktigaste rÄdet man kan ge nybörjare i Kubernetes.

Översatt med stöd frĂ„n Mail.ru Cloud Solutions

Vad mer att lÀsa:

  1. Tre nivÄer av automatisk skalning i Kubernetes och hur man anvÀnder dem effektivt.
  2. Arbetsnoder i Kubernetes: mÄnga smÄ eller fÄ stora?
  3. 25 anvÀndbara verktyg för distribution och hantering av Kubernetes.

KĂ€lla: habr.com

Köp pĂ„litlig webbhotell med DDoS-skydd, VPS VDS-servrar đŸ”„ Köp pĂ„litlig webbhotell med DDoS-skydd, VPS VDS-servrar | ProHoster