Top 10 Kubernetes-trucs en tips

Top 10 Kubernetes-trucs en tips

Er is veel referentieliteratuur op internet, maar soms is het eenvoudigste advies het meest waardevol. Team Kubernetes aaS van Mail.ru vertaald een selectie van tien trucs en tips, die de auteur van het artikel verzamelde na een jaar werken met Kubernetes. De tips zijn niet gerangschikt op belangrijkheid, maar wij denken dat iedereen er wel iets nuttigs voor zichzelf tussen zal vinden.

Het eenvoudigste commando om met Kubernetes te werken

Om te beginnen misschien wel de eenvoudigste en nuttigste actie bij het werken met Kubernetes. Met de volgende opdracht wordt opdrachtvoltooiing mogelijk gemaakt kubectl in bash-shell:

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

AutoAanvullen kubectl wordt naar het .bashrc-bestand geschreven en wordt automatisch geactiveerd telkens wanneer de shell wordt gestart. Dit versnelt het typen van lange opdrachten en parameters zoals all-namespaces. Lees meer binnen Kubernetes bash-hulp.

Standaardgeheugen- en CPU-limieten in een naamruimte

Als de applicatie bijvoorbeeld verkeerd is geschreven en elke seconde een nieuwe verbinding met de database opent, maar deze nooit sluit, heeft het cluster een geheugenlek. En als de applicatie tijdens de implementatie geen geheugenlimiet heeft ingesteld, kan dit leiden tot een knooppuntstoring.

Om dit te voorkomen, kunt u in Kubernetes standaardbeperkingen per naamruimte instellen. Ze worden geschreven in het yaml-bestand voor een specifieke naamruimte. Hier is een voorbeeld van zo’n bestand:

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

Maak een dergelijke yaml en pas deze toe op elke naamruimte. Bijvoorbeeld naar de naamruimte limit-example. Nu heeft elke container die in deze naamruimte wordt geïmplementeerd een limiet van 512 Mi, tenzij er bovendien nog een individuele limiet voor deze container wordt ingesteld.

Afvalinzameling in oudere versies van Kubernetes

Kubelet begint standaard met het verzamelen van afval wanneer var/lib/docker neemt 90% van de beschikbare schijfruimte in beslag. Dit is echter geweldig, want tot Kubernetes 1.7 was er geen standaardlimiet voor het aantal gebruikte inodes, wat overeenkomt met het aantal bestanden in het bestandssysteem.

Mogelijk uw container var/lib/docker gebruikt mogelijk slechts 50% van de schijfruimte, maar het kan zijn dat de inodes opraken, wat problemen voor werknemers zal veroorzaken.

In oudere versies van kubelet van 1.4 tot 1.6 moet je deze vlag toevoegen:

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

In 1.7 en latere versies is deze vlag standaard ingesteld. Eerdere versies bewaken de inodelimiet echter niet.

Minikube... kleine maar krachtige lokale Kubernetes

Minikube is de eenvoudigste manier om een ​​lokaal Kubernetes-cluster uit te voeren. Het wordt gestart met een eenvoudig commando:

minikube start

Als u deze opdracht uitvoert, wordt er een echt Kubernetes-cluster op uw machine uitgevoerd.

Top 10 Kubernetes-trucs en tips
Illustratiebron

De truc is om de applicatie te bouwen en deze lokaal op dat cluster uit te voeren. Tenzij specifiek aangegeven, wordt de Docker-image op uw computer gebouwd en niet op het cluster.

Om Docker te dwingen de image naar het lokale Kubernetes-cluster te pushen, krijgt de docker-machine de volgende opdracht:

eval $(minikube docker-env)

Nu kunnen we applicaties bouwen op een lokaal Kubernetes-cluster.

Geef niet iedereen kubectl-toegang

Dit lijkt voor de hand liggend, maar als meerdere teams hetzelfde cluster gebruiken voor hun applicaties (waar Kubernetes voor is gemaakt), moet je niet zomaar iedereen kubectl. Het is beter om de opdrachten te scheiden, elk een eigen naamruimte toe te wijzen en de toegang te beperken met behulp van RBAC-beleid.

U kunt in de war raken door rechten toe te wijzen voor toegang, lezen, maken, verwijderen en andere bewerkingen voor elke pod. Maar het belangrijkste is om de toegang tot geheimen te beperken, zodat deze alleen toegankelijk is voor beheerders. Op deze manier maken we onderscheid tussen degenen die het cluster kunnen beheren en degenen die er eenvoudigweg gebruik van kunnen maken.

Beheer podbudgetten

Hoe zorg je ervoor dat een applicatie in een Kubernetes-cluster geen downtime heeft? PodDisruptionBudget en opnieuw PodDisruptionBudget.

Clusters worden periodiek bijgewerkt en knooppunten worden geleegd. Niets staat stil, dat is de realiteit. Elke implementatie met meer dan één exemplaar moet een PDB (PodDisruptionBudget) bevatten. Het wordt gemaakt in een eenvoudig yaml-bestand dat op het cluster wordt toegepast. Het dekkingsgebied van een bepaald PDB wordt bepaald door labelkiezers.

Opmerking: Er wordt alleen rekening gehouden met de begroting van het VOB als de begrotingsschending omkeerbaar is (vrijwillige verstoring). In situaties zoals hardwarefouten zal PDB niet werken.

Voorbeeld VOB:

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

De twee belangrijkste parameters zijn matchLabels и minAvailable. De eerste parameter geeft aan voor welke toepassingen het budget geldt. Als ik bijvoorbeeld implementaties met labels heb app: app-a и app: app-b, dan is dit VOB alleen van toepassing op het eerste.

Parameter minAvailable hiermee wordt rekening gehouden bij het legen (reinigen) van het knooppunt. In ons voorbeeld worden bijvoorbeeld tijdens het legen alle instanties verwijderd app: app-a, behalve twee.

Hiermee kunt u bepalen hoeveel exemplaren van de applicatie op een bepaald moment actief moeten zijn.

Toezicht op de status van applicaties

Een dergelijke monitoring is op twee manieren mogelijk: met behulp van Readiness- of Liveness-tests.

De eerste test (gereedheid) bepaalt de gereedheid van de container om verkeer te ontvangen.

De tweede (levendigheid) geeft aan of de container gezond is of opnieuw moet worden opgestart.

De relevante configuraties worden eenvoudig aan de yaml toegevoegd voor implementatie. Daar kunt u time-outs, vertragingstijden en het aantal nieuwe pogingen opgeven. Bekijk meer details over hen Kubernetes-documentatie.

Labels zijn overal

Labels zijn een van de fundamentele concepten in Kubernetes. Ze zorgen ervoor dat objecten vrij met elkaar kunnen communiceren en dat er zoekopdrachten kunnen worden gemaakt op basis van labels. In Kubernetes kun je zelfs naar de client gaan en evenementen voor specifieke tags bekijken.

Je kunt bijna alles met tags doen, maar een goed voorbeeld is het creëren van meerdere omgevingen om programma's op hetzelfde cluster uit te voeren.

Stel dat u hetzelfde cluster gebruikt dev и qa. Dit betekent dat u een aanvraag kunt indienen app-a, tegelijkertijd werkend in beide omgevingen qa и dev. In dit geval hebben we afzonderlijk toegang tot het toepassingsexemplaar in een specifieke omgeving door de juiste parameter op te geven environment. Bijvoorbeeld app: app-a и environment: dev voor één omgeving, en app: app-a и environment: qa voor de tweede.

Hierdoor heeft u toegang tot beide instances van de applicatie, zodat u bijvoorbeeld tegelijkertijd tests kunt uitvoeren.

Zet de zaken op een rij

Kubernetes is een zeer krachtig systeem, maar elk systeem kan uiteindelijk vastlopen door te veel processen. De Kubelet voert alle processen en controles uit die u opgeeft, evenals zijn eigen processen.

Natuurlijk zal één verweesde service het systeem niet vertragen, en Kubernetes is ontworpen om vanaf de basis op te schalen. Maar als er in plaats van één dienst een miljoen verschijnen, begint de kubelet te stikken.

Als u om de een of andere reden een implementatie (container, image, wat dan ook) verwijdert, zorg er dan voor dat u deze volledig opschoont.

Maak kennis met Go

Het belangrijkste advies hebben we voor het laatst bewaard. Leer de Go-programmeertaal.

Kubernetes is ontwikkeld in Go, alle extensies zijn geschreven in Go en ook de client-go clientbibliotheek wordt officieel ondersteund.

Het kan voor verschillende en interessante dingen worden gebruikt. Bijvoorbeeld om het Kubernetes systeem naar jouw smaak uit te breiden. U kunt dus uw eigen programma's gebruiken om gegevens te verzamelen, applicaties te implementeren of eenvoudigweg containers op te ruimen.

Het leren van de Go-programmeertaal en het beheersen van client-go is misschien wel het belangrijkste advies dat je aan nieuwe Kubernetes-gebruikers kunt geven.

Vertaald met de steun van Mail.ru Cloud Solutions

Wat moet je nog meer lezen:

  1. Drie niveaus van automatisch schalen in Kubernetes en hoe u deze effectief kunt gebruiken.
  2. Kubernetes-werkknooppunten: veel kleine of weinig grote?
  3. 25 Handige tools voor het implementeren en beheren van Kubernetes.

Bron: www.habr.com

Voeg een reactie