Ejercicio: Mejora de la aplicación con objetos ConfigMap

Completado

Ha implementado el back-end de la aplicación y ahora debe implementar el front-end mediante un objeto ConfigMap.

Antes de empezar

Nota

Este ejercicio es opcional. Si le interesa completar este ejercicio, deberá crear una suscripción de Azure antes de empezar. Si no tiene una cuenta de Azure o no quiere crear una en este momento, puede leer las instrucciones para comprender la información que se está presentando.

Creación de un objeto ConfigMap

  1. Cree un nuevo archivo YAML denominado configmap.yaml y pegue el siguiente código para crear la especificación 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. Reemplace {your-dns-zone} por el valor de la variable ZONE_NAME que creó anteriormente.

  3. Guarde y cierre el archivo.

  4. Aplique los cambios al clúster mediante el comando kubectl apply.

    kubectl apply -f configmap.yaml
    
  5. Para comprobar el resultado, consulte ConfigMap mediante el comando kubectl get configmap.

    kubectl get configmap ship-manager-config
    

Crear la aplicación

  1. Cree un nuevo archivo YAML denominado frontend.yaml y pegue el siguiente código para crear la especificación Deployment:

    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
    ---
    

    Observe cómo está montado el objeto ConfigMap en el objeto Deployment. No se especifica ninguna clave, lo que significa que es necesario especificar una clave subPath. subpath es el nombre de archivo dentro del contenedor.

  2. Debajo de los tres guiones, pegue el siguiente código para crear las especificaciones de Service e Ingress:

    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. Reemplace {your-dns-zone} en la entrada por el valor de la variable ZONE_NAME que creó anteriormente.

  4. Guarde y cierre el archivo.

  5. Implemente la aplicación mediante el comando kubectl apply.

    kubectl apply -f frontend.yaml
    
  6. Compruebe el resultado consultando la API de Kubernetes mediante el comando kubectl get deployment.

    kubectl get deployment contoso-ship-manager-frontend
    

    Cuando la API esté disponible, debería obtener una salida similar al siguiente ejemplo:

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