Wat is kubectl en hoe gebruik je het?
Auteur: Redactie Domeny.ForSale Gepubliceerd
Kort samengevat: kubectl is een commandoregeltool voor het bedienen van Kubernetes — een systeem dat applicaties beheert die in containers draaien. Je kunt er de status van applicaties mee controleren, wijzigingen doorvoeren, logs uitlezen en clusterresources beheren. Het is niet Kubernetes zelf en maakt niet automatisch een omgeving waarin applicaties kunnen draaien: het heeft toegang tot een bestaand cluster nodig.
Hoe kubectl samenwerkt met Kubernetes
Een cluster van Kubernetes is een omgeving die bestaat uit machines, ook wel nodes genoemd, en componenten die het draaien van applicaties beheren. Een container verpakt een applicatie samen met haar afhankelijkheden. Kubernetes draait containers in eenheden die Pods heten; een Pod kan één of meerdere samenwerkende containers bevatten.
kubectl draait op de computer van een beheerder of ontwikkelaar, of in een systeem dat deployments automatiseert. Het stuurt verzoeken naar de API-server van Kubernetes: het communicatiepunt voor het uitlezen en wijzigen van clusterresources. Het stuurt niet elke container rechtstreeks aan — de componenten van Kubernetes voeren de handelingen uit die nodig zijn om de opgegeven toestand te bereiken.
Als je bijvoorbeeld opgeeft dat er drie kopieën van een applicatie moeten draaien, stuurt kubectl die configuratie naar de API. Vervolgens probeert Kubernetes ervoor te zorgen dat de vereiste kopieën draaien. Je kunt de terminal sluiten: de applicatie is niet afhankelijk van een actief proces van kubectl.
Wat je nodig hebt om te beginnen
Alleen kubectl installeren is niet voldoende. Je hebt een cluster nodig — een lokale testomgeving, bijvoorbeeld aangemaakt met kind of minikube, of een cluster dat je bedrijf of een cloudprovider beschikbaar stelt — en de rechten om het te gebruiken.
De verbindingsgegevens staan meestal in een kubeconfig-bestand. Daarin staan clusteradressen, authenticatie-instellingen of verwijzingen naar inlogmechanismen, en contexten. Een context bepaalt met welk cluster en als welke gebruiker je werkt; hij kan ook een standaardnamespace opgeven. Een namespace groepeert resources binnen het cluster.
De standaardlocatie voor de configuratie is $HOME/.kube/config, maar je kunt een ander bestand opgeven. Controleer voordat je begint de client en de actieve verbinding:
kubectl version --client
kubectl config current-context
kubectl cluster-info
Het eerste commando controleert de versie van de lokale tool, maar bevestigt niet dat je toegang hebt tot het cluster. Het tweede toont de geselecteerde context en het derde probeert informatie over het cluster op te halen. Fouten kunnen ontstaan door een ontbrekende configuratie, netwerkproblemen, een verlopen inlogsessie of onvoldoende rechten.
Raadpleeg de officiële documentatie van Kubernetes voor de installatieprocedure en de ondersteunde versieverschillen tussen client en server. Volg in een bedrijfsomgeving ook de inloginstructies van de beheerder.
Basiscommando’s om applicaties te controleren
Commando’s hebben meestal de vorm kubectl werkwoord resourcetype naam. Met opties kun je onder meer de namespace en het uitvoerformaat kiezen. In het begin zijn vooral leesoperaties nuttig:
| Commando | Toepassing |
|---|---|
kubectl get pods -n test | Lijst van Pods in de namespace test en hun basisstatus. |
kubectl describe pod NAAM -n test | Details van een Pod en gebeurtenissen die helpen bij de diagnose. |
kubectl logs NAAM -n test | Logs van een container in de opgegeven Pod. |
kubectl get deployments -n test | Status van de resources die kopieën van de applicatie beheren. |
Vervang NAAM door de werkelijke naam van de Pod. Als een Pod meerdere containers heeft, kan bij het uitlezen van logs de optie -c CONTAINERNAAM nodig zijn.
Stel dat de applicatie na een deployment niet reageert. Begin met get pods om te controleren of de Pods van de applicatie draaien. Gebruik vervolgens describe en zoek naar gebeurtenissen rond bijvoorbeeld het ophalen van de image of het starten van de container. Lees daarna de applicatielogs uit. De status van de Pod alleen is niet altijd voldoende om de oorzaak van het probleem te achterhalen.
Wijzigingen doorvoeren met een YAML-bestand
kubectl kan resources aanmaken met losse commando’s, maar de applicatieconfiguratie wordt vaak vastgelegd in een manifest — een bestand dat de gewenste toestand van de resources beschrijft. Meestal wordt hiervoor YAML gebruikt. Je kunt zo’n bestand in een repository bewaren en de wijzigingen bekijken voordat je ze doorvoert.
Het onderstaande manifest maakt een Deployment aan: een resource die een bepaald aantal kopieën van de applicatie draaiende houdt en hun updates beheert:
apiVersion: apps/v1
kind: Deployment
metadata:
name: demo
spec:
replicas: 1
selector:
matchLabels:
app: demo
template:
metadata:
labels:
app: demo
spec:
containers:
- name: nginx
image: nginx:stable
Sla het op als deployment.yaml. In een testcluster kun je de configuratie toepassen en de voortgang controleren:
kubectl apply -f deployment.yaml
kubectl rollout status deployment/demo
kubectl get pods -l app=demo
Dit voorbeeld start een nginx-server, maar maakt die niet automatisch bereikbaar via internet. Netwerktoegang vereist aanvullende configuratie, vaak een Service-resource die verkeer naar de Pods doorstuurt. Of het voorbeeld kan draaien, hangt ook af van de mogelijkheid om de image op te halen en van de beschikbare clusterresources.
Wijzigingen in de verkeerde omgeving voorkomen
kubectl kan zowel een testomgeving als een productieomgeving beheren. Controleer de context en de namespace voordat je resources wijzigt. Je kunt ze expliciet opgeven met de opties --context en -n, in plaats van op de standaardinstellingen te vertrouwen.
Voordat je een manifest toepast, zijn twee commando’s nuttig: kubectl diff -f deployment.yaml toont de verschillen met de bestaande resources, en kubectl apply --dry-run=server -f deployment.yaml verstuurt een proefverzoek zonder de wijziging op te slaan. Ze garanderen echter niet dat de applicatie na de deployment correct zal werken.
Het commando delete verwijdert resources en kan de werking van de applicatie onderbreken. Behandel kubeconfig als een gevoelig bestand: publiceer het niet in een repository en gebruik geen configuratie uit een onbetrouwbare bron. Doe je eerste oefeningen in een testcluster en begin met het controleren van de context en het uitlezen van de status van de Pods.
Zie ook: Wat is FTP?
