练习 - 通过 configmap 增强应用程序

已完成

你已部署应用程序后端,现在需要使用 ConfigMap 部署应用程序前端。

准备工作

注意

本练习为选做练习。 若要完成本练习,需要在开始之前创建 Azure 订阅。 如果没有 Azure 帐户,或者现在不想创建帐户,则可以通读说明,以便了解所提供的信息。

创建 ConfigMap

  1. 创建一个名为 configmap.yaml 的新 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. 使用前面创建的 ZONE_NAME 变量的值替换 {your-dns-zone}

  3. 保存并关闭该文件。

  4. 使用 kubectl apply 命令将更改应用于群集。

    kubectl apply -f configmap.yaml
    
  5. 使用 kubectl get configmap 命令查询 ConfigMap 以检查结果。

    kubectl get configmap ship-manager-config
    

创建应用程序

  1. 创建一个名为 frontend.yaml 的新 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. 在三条短划线的下方,粘贴以下代码以创建服务和入口规范:

    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. 使用前面创建的 ZONE_NAME 变量的值替换 Ingress 中的 {your-dns-zone}

  4. 保存并关闭该文件。

  5. 使用 kubectl apply 命令部署应用程序。

    kubectl apply -f frontend.yaml
    
  6. 使用 kubectl get deployment 命令查询 Kubernetes API 以检查结果。

    kubectl get deployment contoso-ship-manager-frontend
    

    如果该 API 可用,应该会出现如下所示的输出:

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