In een Kubernetes-cluster maak je in veel gevallen gebruik van een Deployment. Als onderdeel van een Deployment worden één of meer Pods (een groep van één of meer containers) aangemaakt. In de praktijk gebruikt men hier meestal Kubernetes (YAML) objects voor, of een package manager zoals Helm.
In deze handleiding laten we zien hoe je een Kubernetes Deployment maakt door gebruikt te maken van Kubernetes objects. Meer informatie over Kubernetes objects en het maken daarvan, vind je in onze artikelen 'Wat zijn Kubernetes objects' en 'Kubernetes (yaml) objects maken'.
Voor de stappen in deze handleiding is het belangrijk dat je Kubectl hebt geïnstalleerd en je Kubeconfig-file hebt gedownload.
Een Deployment maken met een Kubernetes object
Een Kubernetes object bevat de specificiaties van de gewenste status van een Kubernetes-cluster, zoals de gebruikte Kubernetes API versie, de container image, aantal replica's, etc. In deze handleiding gebruiken we een voorbeeld object van de officiële Kubernetes-organisatie dat terug te vinden is op https://k8s.io/examples/application/deployment.yaml. Je bent vrij hiervoor een eigen object te gebruiken.
Stap 1
Maak een Deployment aan met het onderstaande commando. Als je een ander object wil deployen dan dit voorbeeld, vervang dan het adres https://k8s.io/examples/application/deployment.yaml door het adres waar het gewenste object gehost wordt, of de locatie van het .yaml-bestand op je computer.
kubectl apply -f https://k8s.io/examples/application/deployment.yaml
Je krijgt de volgende bevestiging te zien:
deployment.apps/nginx-deployment created
Je Deployment op basis van een .yaml object is nu klaar voor gebruik. We doorlopen gelijk enkele nuttige beheercommando's waarmee je de status van verschillende aspecten van je Deployment kunt controleren.
De status van je Deployment controleren
Controleer gelijk de status van je nieuwe Deployment met het commando:
kubectl get deployments
Host je meerdere Deployments? Dan zie je die allemaal terug met dit commando. Als dit je enige Deployment is, ziet de output er als volgt uit:
NAME READY UP-TO-DATE AVAILABLE AGE
nginx-deployment 2/2 2 2 21s
De status van je Pods controleren
Controleer vervolgens de status van je Pods:
kubectl get pods
De output ziet er als volgt uit. Het maakt niet uit hoeveel Pods je hebt of tot welke Deployments die behoren, je ziet ze hier allemaal terug. Je Deployment herken je aan dat de naam van je Pod altijd begint met de naam van je Deployment.
NAME READY STATUS RESTARTS AGE
nginx-deployment-9456bbbf9-m25sr 1/1 Running 0 52s
nginx-deployment-9456bbbf9-wwczr 1/1 Running 0 52s
Er zijn nog veel meer commando's beschikbaar. Een overzicht van enkele van de nuttigste voor het beheer van jouw cluster vind je in deze handleiding.
Stap 2
Een Pod is standaard alleen bereikbaar vanuit het interne virtuele netwerk van je Kubernetes-cluster en niet via het publieke internet. Om de containers in dit voorbeeld bereikbaar te maken voor het publieke internet 'expose' je de Pods als een Kubernetes Service van het type 'LoadBalancer'.
kubectl expose deployment nginx-deployment --type=LoadBalancer --port=80
- De toevoeging --type=LoadBalancer geeft aan dat je een LoadBalancer Service wil aanmaken en zo je Pods wil exposen aan het publieke internet. Hiervoor wordt in onze systemen automatisch een HA-IP loadbalancer aangemaakt voor jouw Deployment.
- De Nginx-applicatie luistert naar verkeer op poort 80, zie de opmaak van dit specifieke object in ons artikel 'Wat zijn Kubernetes objects'. Gebruik je een ander object voor jouw Deployment, controleer dan daarin het poortnummer en pas dat hier aan.
Je krijgt een duidelijke bevestiging te zien:
service/nginx-deployment exposed
De status van je LoadBalancer Service (en alle andere Kubernetes Services op jouw cluster) zie je terug met het commando:
kubectl get services
Bij een nieuw cluster ziet de output er ongeveer als volgt uit:
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 42d
nginx-deployment LoadBalancer 10.123.234.123 <pending> 80:31867/TCP 15s
Pending geeft aan dat de loadbalancer nog aangemaakt wordt. Doorgaans duurt dit maximaal een minuut of twee. Hierna zie je onder 'EXTERNAL-IP' het externe IP-adres van de loadbalancer terug.
Stap 3
Tot slot blijft er nog één ding over: het testen van je hello node Deployment.
Open een browser en ga naar het IP-adres dat je aan het eind van stap 2 onder 'EXTERNAL-IP' ziet, met de toevoeging :80 voor de poort waar je Service op luistert, bijvoorbeeld: 86.123.234.123.haip.transip.net:80
Als je het voorbeeld object gebruikt hebt om een Deployment aan te maken, krijg je nu een Nginx welkomstpagina te zien.
Voor het daadwerkelijk gebruiken van je eigen website zijn aanvullende stappen nodig: Je kunt of je website in een keer in een container stoppen en die deployen, of naast nginx ook een FTP-server deployen. We lichten deze opties in de toekomst in een apart artikel toe.
Je Deployment en bijbehorende services verwijderen
Nu je klaar bent met het testen van een hello node Deployment, wil je deze allicht verwijderen. Dit bestaat uit twee onderdelen: het verwijderen van aangemaakte Services en het verwijderen van de daadwerkelijke Deployment.
kubectl delete service nginx-deployment
kubectl delete deployment nginx-deployment
Mocht je niet meer zeker weten hoe je Service of je Deployment heet, dan kun je die opnieuw opvragen met respectievelijk:
kubectl get services
kubectl get deployments
Dit brengt ons bij het eind van deze handleiding over het maken van Deployments op basis van objects in Kubernetes.