Kubernetes
Objectifs
- Estimer son travail
- Utiliser minikube
- Déployer une application sur Kubernetes
- Créer un fichier
deployment.yamlpour déployer l'application
Rendu
- Rapport individuel en PDF sur Cyberlearn
- Nom du fichier:
lab05-kubernetes-{nom}.pdf - Délai: 1 semaine
- Nom du fichier:
- Mettez tout votre travail sur une branche
feature/05-kuberneteset faites une merge request (MR) surmainen m'ajoutant comme reviewer - Ajoutez un lien vers le commit dans votre rapport
Tâches
Estimer son travail
- Estimez le temps total nécessaire pour réaliser ce laboratoire
- Découpez le travail en tâches pour faciliter l'estimation
- A la fin du rapport, comparez le temps estimé avec le temps réellement passé:
Tâche Temps estimé Temps réel Commentaire ... 30m 45m ... ... ... ... ... Total 2h 1h30 ...
Utiliser minikube
- Suivez les instructions sur minikube pour déployer des applications sur votre machine
- Suivez les points suivants:
- Start your cluster
- Interact with your cluster
- Deploy applications
- Service
- LoadBalancer
- Scale votre Deployment à 2 replicas et vérifiez que les requêtes sont bien réparties entre les deux pods (en y accédant en navigation privée)
- Ingress
- Suivez les points suivants:
- Regardez les logs (au niveau du pod)
- Sur le dashboard, sélectionnez un pod
- En haut à droite, il y a plusieurs icônes, dont
View logsetExec into pod
- En haut à droite, il y a plusieurs icônes, dont
- En ligne de commande, utilisez
kubectl logsetkubectl exec(kubectl get podspour lister les pods)
- Sur le dashboard, sélectionnez un pod
Déployer une application
On va déployer notre application sur Kubernetes. Les instructions suivantes utilise https://gitlab.com/blueur/heig-vd-devops mais vous être libre d'utiliser votre propre application.
GUI
Déployez l'application sur Kubernetes en utilisant le dashboard.
Déployez le frontend
- Cliquez sur le
+en haut à droiteCreate from form- App name :
frontend - Container image :
registry.gitlab.com/blueur/heig-vd-devops/frontend:latest - Service :
Internal - Port :
80 - Target port :
80
- App name :
- Cliquez sur
Deploy
- Vous pourrez accéder à l'application avec
minikube service frontend
- Cliquez sur le
Déployez une base de donnée
- App name :
database - Container image :
postgres:16-alpine - Service :
Internal - Port :
5432 - Target port :
5432 - Cliquez sur
Show advanced options- Environment variables
POSTGRES_PASSWORD:postgres
- Environment variables
- Cliquez sur
Deploy
- App name :
Déployez le backend
- App name :
backend - Container image :
registry.gitlab.com/blueur/heig-vd-devops/backend:latest - Service :
Internal - Port :
80 - Target port :
80 - Cliquez sur
Show advanced options- Environment variables
POSTGRES_HOST:databasePOSTGRES_PASSWORD:postgresROOT_PATH:/api
- Environment variables
- App name :
Créez un ingress
Create from inputyamlapiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: heig-vd-devops-ingress annotations: nginx.ingress.kubernetes.io/use-regex: "true" nginx.ingress.kubernetes.io/rewrite-target: /$2 spec: rules: - http: paths: - path: / pathType: Prefix backend: service: name: frontend port: number: 80 - path: /api(/|$)(.*) # https://kubernetes.github.io/ingress-nginx/examples/rewrite/ pathType: ImplementationSpecific backend: service: name: backend port: number: 80
Vous pourrez accéder à l'application sur http://127.0.0.1/
CLI
- Suivez les instructions pour créer une application stateless : https://kubernetes.io/docs/tasks/run-application/run-stateless-application-deployment/
- Suivez les instructions pour créer une application stateful : https://kubernetes.io/docs/tasks/run-application/run-single-instance-stateful-application/
- Créez un fichier
deployment.yamlà la racine de votre repository qui permet de déployer votre application sur Kubernetes.- On devra pouvoir déployer ou mettre à jour toute l'application avec
kubectl apply -f deployment.yaml
- On devra pouvoir déployer ou mettre à jour toute l'application avec
- Déployez votre application sur un nouveau namespace
Google Cloud
Attention
La consommation des ressources sur Google Cloud est payante à la minute. Vérifiez que vous avez bien supprimé toutes vos ressources après avoir terminé ce laboratoire ou lors d'une pause prolongée.
- Créez un compte Google Cloud avec votre adresse email HEIG-VD
- Installez gcloud CLI sur votre machine
gcloud init- Cloud project :
heig-vd-devops - Google Compute Engine zone :
europe-west6-b
- Cloud project :
gcloud -v
- Accéder au cluster
- Installez le plugin GKE
gcloud components install gke-gcloud-auth-plugingke-gcloud-auth-plugin --version
- Installez le plugin GKE
- Configurez votre cluster
gcloud container clusters get-credentials heig-vd-dop-cluster --region=europe-west6 - Créez un nouveau namespace (avec votre nom) et effectuez les déploiements suivants dessus car le cluster est partagé
- Déployez une application d'exemple
kubectl apply -f https://storage.googleapis.com/minikube-site-examples/ingress-example.yaml- Accédez au dashboard
- Dans le menu de gauche, sous
Kubernetes Engine, cliquez surServices & Ingress - Vous devriez voir (dans le menu tabulaire
Ingress) un ingressexample-ingressavec une IP externe - Vous pourrez accéder à l'application sur cette IP (le déploiement prend plusieurs minutes)
- Dans le menu de gauche, sous
- Accédez au dashboard
- Pour supprimer votre déploiement, utilisez
kubectl delete -f https://storage.googleapis.com/minikube-site-examples/ingress-example.yaml
Essayez aussi de déployer votre application sur Google Cloud.
Pour utiliser votre propose cluster Kubernetes, vous pouvez suivre les instructions suivantes (vous pouvez tout faire avec le dashboard):
- Créez un nouveau projet
- Activer le cluster Kubernetes sur votre projet
- Utilisez la région
europe-west6qui est située à Zurich
- Utilisez la région
Contextes
Pour pouvoir utiliser plusieurs clusters Kubernetes, on peut utiliser des contextes.
- Lister les contextes:
kubectl config get-contexts - Changer de contexte:
kubectl config use-context <context-name>