Skip to content

Kubernetes

Objectifs

  • Estimer son travail
  • Utiliser minikube
  • Déployer une application sur Kubernetes
  • Créer un fichier deployment.yaml pour déployer l'application

Rendu

  • Rapport individuel en PDF sur Cyberlearn
    • Nom du fichier: lab05-kubernetes-{nom}.pdf
    • Délai: 1 semaine
  • Mettez tout votre travail sur une branche feature/05-kubernetes et faites une merge request (MR) sur main en 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âcheTemps estiméTemps réelCommentaire
    ...30m45m...
    ............
    Total2h1h30...

Utiliser minikube

  • Suivez les instructions sur minikube pour déployer des applications sur votre machine
    • Suivez les points suivants:
        1. Start your cluster
        1. Interact with your cluster
        1. 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
  • 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 logs et Exec into pod
    • En ligne de commande, utilisez kubectl logs et kubectl exec (kubectl get pods pour lister les pods)

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 à droite
      • Create from form
        • App name : frontend
        • Container image : registry.gitlab.com/blueur/heig-vd-devops/frontend:latest
        • Service : Internal
        • Port : 80
        • Target port : 80
      • Cliquez sur Deploy
    • Vous pourrez accéder à l'application avec minikube service frontend
  • 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
    • Cliquez sur Deploy
  • 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 : database
        • POSTGRES_PASSWORD : postgres
        • ROOT_PATH: /api
  • Créez un ingress

    • Create from input

      yaml
      apiVersion: 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

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
    • gcloud -v
  • Accéder au cluster
    • Installez le plugin GKE gcloud components install gke-gcloud-auth-plugin
      • gke-gcloud-auth-plugin --version
  • 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 sur Services & Ingress
      • Vous devriez voir (dans le menu tabulaire Ingress) un ingress example-ingress avec une IP externe
      • Vous pourrez accéder à l'application sur cette IP (le déploiement prend plusieurs minutes)
  • 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):

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>