Verschillende Kubernetes-herstartbeleidsregels instellen

Verschillende Kubernetes Herstartbeleidsregels Instellen



In dit artikel zullen we specifiek ingaan op de verschillende herstartbeleidsregels van Kubernetes. Laten we eerst de verschillende beleidsregels bespreken die worden gebruikt wanneer Kubernetes opnieuw moet worden opgestart. U kunt deze beleidsregels gebruiken om te voorkomen dat een bepaalde werkbelasting in het cluster wordt geïmplementeerd. Hoewel het opleggen van strikte normen in het cluster meestal wordt gedaan om naleving te garanderen, moeten clusterbeheerders ook verschillende best practices volgen die zijn voorgesteld.

Wat is het herstartbeleid van Kubernetes?

Elke Kubernetes-pod houdt zich aan een specifieke levenscyclus. Het begint in de 'pending'-fase en, als een of meer van de primaire containers met succes zijn gelanceerd, gaat het over naar de 'running'-fase. Afhankelijk van of de containers in de pod slagen of mislukken, gaat het proces verder naar de fase 'geslaagd' of 'mislukt'.







Om het beleid opnieuw op te starten op het niveau van de toegepaste containers, kunnen drie opties worden gebruikt:



Altijd

Telkens wanneer een container wordt beëindigd, produceert Kubernetes een nieuwe, aangezien de pod altijd actief moet zijn.



Opmislukking

Als de container wordt afgesloten met een andere retourcode dan 0, wordt deze slechts één keer opnieuw gestart. Opnieuw opstarten is niet nodig voor containers die 0 (succes) retourneren.





Nooit

De container kan niet opnieuw worden opgestart.

In het volgende gedeelte bespreken we nu hoe u een pod opnieuw kunt opstarten.



Hoe start ik een pod opnieuw op in Kubernetes?

Als u een Kubernetes-pod opnieuw wilt starten, geeft u opdrachten met de kubectl-tool. Het maakt verbinding met de KubeAPI-server. Laten we de beschikbare opties verkennen:

Een container in een pod opnieuw opstarten

Een pod kan meerdere containers bevatten. Aan de andere kant maakt u in wezen verbinding met de primaire container binnen een pod wanneer u er verbinding mee maakt. U kunt verbinding maken met elke container die u in een case hebt gedefinieerd als u er meer dan één hebt gedefinieerd.

Hieronder ziet u een voorbeeld van een pod met meerdere containers:


Dit beschrijft een gedeeld volume en twee containers. Het HTML-bestand wordt bediend door de NGINX-container en elke seconde voegt de Ubuntu-container een datumstempel toe aan het HTML-bestand.

Aangezien u niet hebt opgegeven met welke container u verbinding wilt maken, kiest deze automatisch de eerste (NGINX) wanneer u probeert verbinding te maken met die pod. De schermafbeelding is hieronder bijgevoegd:


U kunt nu proberen het PID 1-proces binnen de momenteel actieve container te beëindigen. Voer de volgende opdrachten uit als root om dit te bereiken:


U kunt ook gebruikmaken van de hieronder beschreven kubectl-tool:


Volgens de pod-specificatie zullen K8's nu proberen de vernietigde container opnieuw op te starten. Daarvoor wordt de opdracht 'beschrijven' als volgt gebruikt:


Hier is het resultaat van de bovenstaande opdracht:


De huidige toestand is 'gaan', terwijl de vorige toestand 'beëindigd' was. Dit betekent dat de container volgens dit opnieuw is opgestart. Niet alle containers hebben echter toegang tot rootreferenties. Daarom is deze methode misschien niet erg handig.

Een pod opnieuw opstarten door te schalen

Het aantal replica's van een pod schalen naar 0 en vervolgens schalen naar 1 is de eenvoudigste manier om de pod opnieuw op te starten. U moet in plaats daarvan een implementatie maken omdat de opdracht schaal niet kan worden gebruikt op pods. Hier is een gemakkelijke manier om dat te bereiken:


Schaal naar 0 en daarna naar 1. Door dit te doen, wordt de pod beëindigd en vervolgens opnieuw geïmplementeerd in het cluster:


De replica's zijn ingesteld op 1 zoals je kunt zien in deze afbeelding.


Om de implementatiedetails te bekijken, hebben we nu 'kubectl get deployments' gebruikt. Het volgende is een lijst van zowel de opdracht als het resultaat:

Een pod opnieuw opstarten door deze te verwijderen en opnieuw te implementeren

Met de opdracht 'kubectl delete' kunt u een pod verwijderen en vervolgens opnieuw implementeren. Deze aanpak is echter nogal storend en wordt daarom niet aangeraden.

Een pod opnieuw opstarten met Rollout

Om een ​​pod opnieuw op te starten op de hierboven beschreven manier, moet je ofwel de bestaande pod vernietigen en vervolgens een nieuwe maken, ofwel het aftellen van de replica naar beneden en vervolgens naar boven schalen. Met Kubernetes versie 1.15 kunt u een Deployment rollend herstarten. Dit is de voorgestelde procedure voor het herstarten van een pod. Voer gewoon de volgende opdracht in om aan de slag te gaan:


Als u nu de implementatiestatus op een andere terminal in de gaten houdt, ziet u de stroom van gebeurtenissen als volgt:


Als deze in orde is, wordt de vorige replica van de implementatie omlaag geschaald en wordt een nieuwe replica van de pod gestart. Het resultaat is hetzelfde, behalve dat bij deze aanpak de onderliggende orkestratie door Kubernetes wordt afgehandeld.

Hoe kunnen Kubernetes-pods op verschillende manieren opnieuw worden opgestart?

Laten we eerst beginnen met de docker-container. Met het volgende commando kunnen Docker-containers opnieuw worden opgestart:

> docker herstart container_id

Maar in Kubernetes is er geen vergelijkbare opdracht om pods opnieuw te starten, vooral als er geen gespecificeerd YAML-bestand is. Als alternatief kunt u Kubernetes-pods opnieuw opstarten met behulp van kubectl-opdrachten. De volgende opdrachten worden vermeld:

Het Kubectl Set Env-commando

Een methode is om de opdracht kubectl scale te gebruiken. Hiermee wijzigt u het aantal replica's van de pod dat opnieuw moet worden gestart. Hieronder vindt u een voorbeeldopdracht voor het instellen van de replica's in de pod op twee:

> kubectl schaal implementatie eerste implementatie --replica's = 2

Uitrol herstartopdracht

Hier laten we zien hoe u de rollout restart-opdracht gebruikt om Kubernetes-pods opnieuw op te starten:

> kubectl-implementatie herstart implementatie eerste implementatie -n demo-naamruimte

De controller krijgt de opdracht om elke pod afzonderlijk uit te roeien door het commando. Vervolgens worden nieuwe pods opgeschaald met behulp van de ReplicaSet. Dit proces gaat door totdat elke nieuwe pod recenter is dan elke huidige pod wanneer de controller wordt hervat.

De Delete Pod-opdracht

In deze sectie wordt beschreven hoe u de opdracht Remove gebruikt om Kubernetes-pods opnieuw op te starten. U ziet dat we de volgende opdracht hebben gebruikt om het pod-API-object in deze afbeelding te verwijderen:

. > kubectl delete pod eerste pod -n demo_namespace

De verwachte wordt tegengesproken door het pod-object te verwijderen omdat de Kubernetes API declaratief is. Om de consistentie met de verwachte te behouden, wordt de pod daarom opnieuw gemaakt.

Er kan één pod tegelijk opnieuw worden opgestart met de vorige opdracht. Raadpleeg de bijgevoegde opdracht om verschillende pods opnieuw te starten:

> kubectl delete replicaset pods-multiple-n demo_namespace

De bovengenoemde opdracht start elke pod opnieuw door de volledige ReplicaSet van pods te verwijderen en deze vervolgens helemaal opnieuw te maken.

Gevolgtrekking

Dit bericht bevatte informatie over de verschillende herstartbeleidsregels van Kubernetes. We illustreerden elke fase met behulp van voorbeeldvoorbeelden. Probeer ook deze opdrachten uit en kijk welke uitvoer ze genereren.