Esercizio - Migliorare l'applicazione con gli oggetti ConfigMap

Completato

Il back-end dell'applicazione è stato distribuito e ora è necessario distribuire il front-end dell'applicazione usando un oggetto ConfigMap.

Prima di iniziare

Nota

Questo esercizio è facoltativo. Per completare questo esercizio, sarà necessario creare una sottoscrizione di Azure prima di iniziare. Se non si dispone di un account Azure o non si vuole crearne uno in questo momento, è possibile leggere le istruzioni per avere un'idea delle informazioni contenute.

Creare un oggetto ConfigMap

  1. Creare un nuovo file YAML denominato configmap.yaml e incollarlo nel codice seguente per creare la specifica 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. Sostituisci {your-dns-zone} con il valore della variabile ZONE_NAME creata in precedenza.

  3. Salva e chiudi il file.

  4. Applicare le modifiche al cluster usando il comando kubectl apply.

    kubectl apply -f configmap.yaml
    
  5. Controllare il risultato eseguendo una query per ConfigMap usando il comando kubectl get configmap.

    kubectl get configmap ship-manager-config
    

Creare l'applicazione

  1. Creare un nuovo file YAML denominato frontend.yaml e incollare il codice seguente per creare la specifica di distribuzione:

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

    ConfigMap viene montato nell'oggetto Deployment. Non si specificano chiavi, il che significa che è necessario specificare una chiave subPath. subpath è il nome file all'interno del contenitore.

  2. Sotto i tre trattini incollare il codice seguente per creare le specifiche di servizio e in ingresso:

    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. Sostituisci {your-dns-zone} in Ingresso con il valore della variabile ZONE_NAME creata in precedenza.

  4. Salva e chiudi il file.

  5. Distribuire l'applicazione usando il comando kubectl apply.

    kubectl apply -f frontend.yaml
    
  6. Controlla il risultato eseguendo una query dell'API Kubernetes usando il comando kubectl get deployment.

    kubectl get deployment contoso-ship-manager-frontend
    

    Quando l'API è disponibile, verrà restituito un output simile al seguente esempio:

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