Ce TP se déroule sur un cluster DigitalOcean.(lien sponsorisé : 200€ sur 60j)
- But de l'exercice
- Effectuer un premier déploiement
- Scaler le déploiement
- Exposer avec un LoadBalancer
- Effectuer un rollout
- Exposition en NodePort
- Cleanup
- Manipuler les déploiements et les services.
- Constater que les Pods obtiennent des @IP dynamiquement
- Constater que les svc ont des IP stables
kubectl create deployment hello-world --image=stefanprodan/podinfo:6.11.2Podinfo écoute par défaut sur TCP/9898. Inspectez-le (retrouvez l'IP du Pod)
kubectl get pod -o wideChanger le nombre de replicas
kubectl scale deployment hello-world --replicas=5Exposer le deploiement avec un Load Balancer (notez le NAT de port)
kubectl expose deployment hello-world --type=LoadBalancer --port=80 --target-port=9898Initialement pending, déterminer au bout de quelques minutes l'IP publique du Load Balancer
kubectl get svcVisiter le site web avec votre navigateur
Depuis le terminal CodeSpaces (ou une station Linux), verifier que le load-balancer dispatche bien les requêtes, par exemple en lançant plusieurs curl :
for i in {1..100}; do
curl -s http://<IP_PUBLIC> | jq '.hostname' ; done | sort | uniq -cConstater les Endpoints attachés au svc :
kubectl describe svc/hello-worldChanger la version de l'image deployée
kubectl set image deployment/hello-world podinfo=stefanprodan/podinfo:5.2.0Observer le déploiement des pods dans cette version :
kubectl rollout status deployment/hello-worldkubectl get pod -o wideVérifier que les Endpoints (et leur IPs) ont changé :
kubectl describe svc/hello-worldL'IP publique est bien restée inchangée, ainsi celle du ClusterIP.
Changeons le type de déploiement pour passer de LoadBalancer à Nodeport
kubectl patch svc/hello-world -p '{"spec": {"type": "NodePort"}}'
kubectl get svcNotez la publication sur un port dynamique > 30.000.
Naviguez sur ce port sur chacun des noeuds et constatez... (Si vous ne vous souvenez pas de la façon de récupérer l'adresse IP d'un node, revenez au TP01).
Depuis Gitpod (ou une station Linux), verifier que le NodePort dispatche bien les requêtes, par exemple en lançant plusieurs curl :
for i in {1..100}; do
curl -s http://<NODE_IP_PUBLIC>:<NODEPORT> | jq '.hostname' ;
donekubectl delete svc/hello-world
kubectl delete deployment/hello-world