Упражнение — Усовершенствуйте приложение с помощью ConfigMap.

Завершено

Серверная часть приложения развернута, и теперь необходимо развернуть интерфейс приложения с помощью ConfigMap.

Прежде чем начать

Заметка

Это упражнение является необязательным. Если вы хотите выполнить это упражнение, перед началом работы необходимо создать подписку Azure. Если у вас нет учетной записи Azure или вы не хотите создавать ее в данный момент, вы можете ознакомиться с инструкциями, чтобы понять информацию, представленную.

Создать ConfigMap

  1. Создайте файл YAML с именем configmap.yaml и вставьте следующий код, чтобы создать спецификацию 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. Замените {your-dns-zone} значением созданной ранее переменной ZONE_NAME.

  3. Сохраните и закройте файл.

  4. Примените изменения к кластеру с помощью команды kubectl apply.

    kubectl apply -f configmap.yaml
    
  5. Проверьте результат, запросив ConfigMap с помощью команды kubectl get configmap.

    kubectl get configmap ship-manager-config
    

Создание приложения

  1. Создайте файл YAML с именем frontend.yaml и вставьте следующий код, чтобы создать спецификацию развертывания:

    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 встроен в объект Deployment. Мы не указываем никаких ключей, то есть необходимо указать ключ subPath. subpath — это имя файла в контейнере.

  2. Под тремя дефисами вставьте следующий код, чтобы создать спецификации Service и 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. Замените {your-dns-zone} в Ingress значением переменной ZONE_NAME, которую вы создали ранее.

  4. Сохраните и закройте файл.

  5. Разверните приложение с помощью команды kubectl apply.

    kubectl apply -f frontend.yaml
    
  6. Проверьте результат, запросив API Kubernetes с помощью команды kubectl get deployment.

    kubectl get deployment contoso-ship-manager-frontend
    

    Если API доступен, вы должны получить выходные данные, аналогичные следующему примеру:

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