- Voorbereiding
- Hallo wereld
- Extern publiceren
- Persistente volumes
- Geautomatiseerd uitrollen
- Applicatie publiceren
Hallo wereld
In deze sectie rollen we een eenvoudige applicatie uit op het cluster. Deze applicatie geeft het bericht "Hallo wereld" terug samen met de versie van de applicatie.
Broncode en Docker images
De broncode van de applicatie is te vinden op GitLab. Ook staan hier reeds gebouwde Docker images. Voor zowel versie 1.0 als 2.0 is er een tag aanwezig. We gaan de images gebruiken om de applicatie uit te rollen.
Een deployment maken
We starten met het aanmaken van een deployment. Maak met een editor het volgende bestand aan:
hallo-wereld-deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: hallo-wereld
namespace: default
labels:
app: hallo-wereld
spec:
replicas: 1
selector:
matchLabels:
app: hallo-wereld
template:
metadata:
labels:
app: hallo-wereld
spec:
containers:
- name: hallo-wereld
image: registry.gitlab.com/commonground/haven/hallo-wereld:1.0
ports:
- containerPort: 80
resources:
limits:
cpu: '1'
memory: 256Mi
requests:
cpu: 50m
memory: 128Mi
Dit is de minimale configuratie die het cluster nodig heeft om een deployment aan te maken.
Er wordt met deze configuratie één replica gestart van de hallo-wereld container in de namespace met de naam default. De container gebruikt de hallo-wereld Docker image en start versie 1.0.
Maak de deployment aan met:
$ kubectl apply -f hallo-wereld-deployment.yaml
deployment.apps/hallo-wereld created
Bekijk vervolgens de status van de deployments in de default namespace met:
$ kubectl get deployments
NAME READY UP-TO-DATE AVAILABLE AGE
hallo-wereld 1/1 1 1 39s
Na een tijdje wordt de deployment vanzelf beschikbaar.
De deployment maakt automatisch pods aan. Voor iedere replica van de applicatie wordt er een pod aangemaakt. Je kunt de aangemaakte pods als volgt bekijken:
$ kubectl get pods -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
hallo-wereld-867b47957d-swhg5 1/1 Running 0 2m3s 100.106.228.234 nodes-3-dv-dev-k8s-local <none> <none>
Als je in het venster hierboven hierboven wat naar rechts scrollt zie je dat de deployment op nodes-3 terecht is gekomen.
Meer informatie over deployments vind je op Kubernetes.io.
Een service maken
Om te zorgen dat onze deployment bereikbaar is binnen het cluster op een vast adres hebben we een service nodig. Maak het volgende bestand aan:
hallo-wereld-service.yaml
apiVersion: v1
kind: Service
metadata:
name: hallo-wereld
namespace: default
spec:
selector:
app: hallo-wereld
ports:
- protocol: TCP
port: 80
targetPort: 80
De selector geeft aan hoe de service gekoppeld wordt aan de deployment. In dit geval worden pods met het label app: hallo-wereld
gekoppeld aan deze service.
Maak vervolgens de service aan met:
$ kubectl apply -f hallo-wereld-service.yaml
service/hallo-wereld created
Bekijk daarna de lijst met services:
$ kubectl get services -o wide
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE SELECTOR
hallo-wereld ClusterIP 100.66.81.208 <none> 80/TCP 56s app=hallo-wereld
kubernetes ClusterIP 100.64.0.1 <none> 443/TCP 51d <none>
Je ziet dat de service is aangemaakt en een Cluster IP heeft gekregen. Binnen het hele cluster kan de applicatie nu op dit IP bereikt worden. Ook is automatisch de DNS verwijzing hallo-wereld.default aangemaakt.
Meer informatie over services vind je op Kubernetes.io.
De service bevragen
We gaan nu de service bevragen om te kijken of het allemaal werkt. Hiervoor zetten we eerst met kubectl een port forward op, omdat de service nu alleen nog maar intern bereikbaar is:
$ kubectl port-forward services/hallo-wereld 8080:80
Forwarding from 127.0.0.1:8080 -> 80
Nu wordt poort 8080 op je lokale machine doorgestuurd naar poort 80 van de service in het cluster. Ga nu met de browser naar http://localhost:8080/ om de applicatie te bekijken.
Versie vernieuwen
Om de applicatie te verhogen naar versie 2.0 pas je in het bestand hallo-wereld-deployment.yaml de image aan naar het volgende:
spec:
containers:
- name: hallo-wereld
image: registry.gitlab.com/commonground/haven/hallo-wereld:2.0
Vernieuw vervolgens de deployment met:
$ kubectl apply -f hallo-wereld-deployment.yaml
deployment.apps/hallo-wereld configured
Na een tijdje zal versie 2.0 van de applicatie beschikbaar zijn.
Verwijderen
Je kunt de deployment en service weer verwijderen met:
$ kubectl delete -f hallo-wereld-deployment.yaml
deployment.apps "hallo-wereld" deleted
$ kubectl delete -f hallo-wereld-service.yaml
service "hallo-wereld" deleted
De ontwikkelen op Haven pagina's dienen ter illustratie en staan los van Haven Compliancy
Aan de slag met Haven?
In onze technische documentatie wordt de standaard toegelicht en beschreven hoe u Haven kunt installeren op uw huidige IT infrastructuur. Bovendien hebben we een handreiking programma van eisen beschikbaar gesteld om het inkopen van Haven te vereenvoudigen. Of neem contact met ons op, we helpen u graag op weg!