Kubernetes-engine(Op Kubernetes gebaseerde service voor het uitvoeren van containerapplicaties op Google Cloud - ca. vert.) is een van de beste manieren om workloads uit te voeren die moeten worden geschaald. Kubernetes zal een soepele werking van de meeste applicaties garanderen als ze in containers worden geplaatst. Maar als u wilt dat uw applicatie eenvoudig te beheren is en optimaal gebruik wilt maken van Kubernetes, moet u best practices volgen. Ze zullen de werking van de applicatie, de monitoring en foutopsporing ervan vereenvoudigen, en ook de veiligheid vergroten.
In dit artikel bespreken we een lijst met dingen die u moet weten en doen om containers effectief op Kubernetes uit te voeren. Degenen die dieper op details willen ingaan, moeten het materiaal lezen Best practices voor het gebruik van containers, en let ook op onze eerder bericht over het assembleren van containers.
1. Gebruik eigen mechanismen voor containerregistratie
Als de applicatie op een Kubernetes-cluster draait, is er niet veel aan logs nodig. Er is waarschijnlijk al een gecentraliseerd logboekregistratiesysteem ingebouwd in het cluster dat u gebruikt. In het geval van het gebruik van Kubernetes Engine is dit verantwoordelijk Stackdriver-logboekregistratie. (Opmerking. vert.: En als u uw eigen Kubernetes-installatie gebruikt, raden we u aan onze Open Source-oplossing eens nader te bekijken - blokhut.) Houd uw leven eenvoudig en gebruik eigen mechanismen voor containerregistratie. Schrijf logs naar stdout en stderr - ze worden automatisch ontvangen, opgeslagen en geΓ―ndexeerd.
Indien gewenst kunt u er ook logs naar schrijven JSON-formaat. Deze aanpak maakt het gemakkelijk om er metadata aan toe te voegen. En met hen zal Stackdriver Logging de mogelijkheid hebben om door logs te zoeken met behulp van deze metadata.
2. Zorg ervoor dat containers staatloos en onveranderlijk zijn
Om containers correct te laten functioneren in een Kubernetes-cluster, moeten ze staatloos en onveranderlijk zijn. Zodra aan deze voorwaarden is voldaan, kan Kubernetes zijn werk doen en applicatie-entiteiten creΓ«ren en vernietigen waar en wanneer dat nodig is.
Onveranderlijk betekent dat de container tijdens zijn levensduur niet wordt gewijzigd: geen updates, patches, configuratiewijzigingen. Als u uw applicatiecode moet bijwerken of een patch moet toepassen, maakt u een nieuwe image en implementeert u deze. Het wordt aanbevolen om de containerconfiguratie (luisterpoort, runtime-omgevingsopties, etc.) extern te verplaatsen Secrets ΠΈ configuratiekaarten. Ze kunnen worden bijgewerkt zonder dat u een nieuwe containerimage hoeft te maken. Om eenvoudig pijpleidingen te maken met image-assemblage, kunt u gebruiken Cloud bouwen. (Opmerking. vert.: Wij gebruiken hiervoor een Open Source tool Dapp.)
Een voorbeeld van het bijwerken van de implementatieconfiguratie in Kubernetes met behulp van ConfigMap, gemonteerd in peulen als configuratie
3. Vermijd geprivilegieerde containers
Je draait toch geen applicaties als root op je servers? Als een aanvaller de applicatie binnendringt, krijgt hij root-toegang. Dezelfde overwegingen zijn van toepassing op het niet uitvoeren van bevoorrechte containers. Als u instellingen op de host moet wijzigen, kunt u de container specifiek opgeven mogelijkheden gebruik van de optie securityContext in Kubernetes. Als je moet veranderen systemen, Kubernetes heeft aparte samenvatting voor deze. Probeer er in het algemeen het beste van te maken in het- en zijspancontainers om soortgelijke bevoorrechte operaties uit te voeren. Ze hoeven niet toegankelijk te zijn voor intern of extern verkeer.
Als u een cluster beheert, kunt u gebruik maken van Pod-beveiligingsbeleid voor beperkingen op het gebruik van geprivilegieerde containers.
4. Vermijd het uitvoeren als root
Bevoorrechte containers zijn al besproken, maar het zal nog beter zijn als u daarnaast geen applicaties als root in de container draait. Als een aanvaller een remote kwetsbaarheid vindt in een applicatie met rootrechten die code-uitvoering mogelijk maakt, waarna hij via een nog onbekende kwetsbaarheid de container kan verlaten, zal hij root krijgen op de host.
De beste manier om dit te voorkomen is om in de eerste plaats niets als root uit te voeren. Om dit te doen, kunt u de richtlijn gebruiken USER Π² Dockerfile of runAsUser in Kubernetes. De clusterbeheerder kan het handhavingsgedrag ook configureren met behulp van Pod-beveiligingsbeleid.
5. Maak de applicatie eenvoudig te monitoren
Net als loggen is monitoring een integraal onderdeel van applicatiebeheer. Een populaire monitoringoplossing in de Kubernetes-gemeenschap is Prometheus - een systeem dat automatisch pods en services detecteert die monitoring vereisen. (Opmerking. vert.: Zie ook onze gedetailleerd verslag over het onderwerp monitoring met behulp van Prometheus en Kubernetes.)Stapelstuurprogramma is in staat Kubernetes-clusters te monitoren en bevat een eigen versie van Prometheus voor applicatiemonitoring.
Kubernetes-dashboard op Stackdriver
Prometheus verwacht dat de applicatie metrische gegevens doorstuurt naar het HTTP-eindpunt. Hiervoor beschikbaar Prometheus-clientbibliotheken. Hetzelfde formaat wordt gebruikt door andere tools zoals Open volkstelling ΠΈ Istio.
6. Maak de gezondheidsstatus van de app beschikbaar
Applicatiebeheer in de productie wordt ondersteund door het vermogen om de status ervan aan het hele systeem door te geven. Is de applicatie actief? Is het goed? Bent u klaar om verkeer te ontvangen? Hoe gedraagt ββhij zich? De meest voorkomende manier om dit probleem op te lossen is het implementeren van gezondheidscontroles (gezondheidchecks). Kubernetes kent twee typen: Levendigheids- en gereedheidssondes.
Voor liveness-sonde (vitaliteitscontroles) de applicatie moet een HTTP-eindpunt hebben dat een "200 OK"-antwoord retourneert als deze functioneel is en aan de basisafhankelijkheden is voldaan. Voor gereedheidssonde (servicegereedheidscontroles) de applicatie moet een ander HTTP-eindpunt hebben dat een '200 OK'-antwoord retourneert als de applicatie zich in een goede staat bevindt, de initialisatiestappen zijn voltooid en een geldig verzoek niet tot een fout leidt. Kubernetes zal alleen verkeer naar de container routeren als de applicatie volgens deze controles gereed is. Twee eindpunten kunnen worden samengevoegd als er geen verschil is tussen de liveness- en readiness-statussen.
Je kunt het label gebruiken X.Y.Z (ze zijn bijna altijd ongewijzigd), maar houd in dit geval alle patches en updates van de afbeelding bij. Als de afbeelding die u gebruikt een tag heeft X.Y, dit is een goede optie voor de gulden middenweg. Door ervoor te kiezen ontvang je automatisch patches en vertrouw je tegelijkertijd op de stabiele versie van de applicatie.