Exercice - Améliorer l’application avec des ConfigMaps

Effectué

Vous avez déployé le back end de l'application et vous devez maintenant déployer le front-end de l'application à l'aide d'un ConfigMap.

Avant de commencer

Notes

Cet exercice est facultatif. Si vous souhaitez effectuer cet exercice, vous devrez créer un abonnement Azure avant de commencer. Si vous n’avez pas de compte Azure ou si vous ne souhaitez pas en créer un pour l’instant, vous pouvez lire les instructions pour comprendre les informations qui sont présentées.

Créer un ConfigMap

  1. Créez un fichier YAML nommé configmap.yaml et collez-le dans le code suivant pour créer la spécification ConfigMap :

    apiVersion: v1
    kind: ConfigMap
    metadata:
      name: ship-manager-config
      namespace: default
    data:
      config.js: |
        const config = (() => {
          return {
            'VUE_APP_BACKEND_BASE_URL': 'http://ship-manager-backend.{your-dns-zone}.aksapp.io',
          }
        })()
    
  2. Remplacez {your-dns-zone} par la valeur de la variable ZONE_NAME que vous avez créée précédemment.

  3. Enregistrez et fermez le fichier.

  4. Appliquez les modifications à votre cluster en utilisant la commande kubectl apply.

    kubectl apply -f configmap.yaml
    
  5. Vérifiez le résultat en interrogeant le ConfigMap à l’aide de la commande kubectl get configmap.

    kubectl get configmap ship-manager-config
    

Création de l'application

  1. Créez un fichier YAML nommé frontend.yaml et collez-le dans le code suivant pour créer la spécification de déploiement :

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: contoso-ship-manager-frontend
      namespace: default
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: contoso-ship-manager-frontend
      template:
        metadata:
          labels:
            app: contoso-ship-manager-frontend
        spec:
          containers:
            - image: mcr.microsoft.com/mslearn/samples/contoso-ship-manager:frontend
              name: contoso-ship-manager-frontend
              ports:
                - containerPort: 80
                  name: http
              volumeMounts:
                - name: config
                  mountPath: /usr/src/app/dist/config.js
                  subPath: config.js
          volumes:
            - name: config
              configMap:
                name: ship-manager-config
    ---
    

    Notez que le ConfigMap est monté dans l’objet de déploiement. Nous ne spécifions aucune clé, ce qui signifie que nous devons spécifier une clé subPath. Le subpath est le nom du fichier dans le conteneur.

  2. Sous les trois tirets, collez le code suivant pour créer les spécifications de service et d’entrée :

    apiVersion: v1
    kind: Service
    metadata:
      name: contoso-ship-manager-frontend
      namespace: default
    spec:
      selector:
        app: contoso-ship-manager-frontend
      ports:
        - name: http
          port: 80
          targetPort: 80
    ---
    apiVersion: networking.k8s.io/v1
    kind: Ingress
    metadata:
      name: contoso-ship-manager-frontend
      namespace: default
      annotations:
        spec.ingressClassName: webapprouting.kubernetes.azure.com
    spec:
      rules:
        - host: contoso-ship-manager.{your-dns-zone}.aksapp.io
          http:
            paths:
              - path: /
                pathType: Prefix
                backend:
                  service:
                    name: contoso-ship-manager-frontend
                    port: 
                      name: http
    
  3. Remplacez {your-dns-zone} dans l’entrée par la valeur de la variable ZONE_NAME que vous avez créée précédemment.

  4. Enregistrez et fermez le fichier.

  5. Déployez l’application à l’aide de la commande kubectl apply.

    kubectl apply -f frontend.yaml
    
  6. Vérifiez le résultat en interrogeant l’API Kubernetes à l’aide de la commande kubectl get deployment.

    kubectl get deployment contoso-ship-manager-frontend
    

    Lorsque l’API est disponible, vous devez obtenir une sortie similaire à l’exemple suivant :

    NAME                           READY   UP-TO-DATE   AVAILABLE   AGE
    contoso-ship-manager-frontend  1/1     1            1           18s