연습 - configmaps를 사용하여 애플리케이션 향상

완료됨

애플리케이션 백 엔드를 배포했으므로 이제 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 변수의 값으로 바꿉 {your-dns-zone} 다.

  4. 파일을 저장한 후 닫습니다.

  5. kubectl apply 명령을 사용하여 애플리케이션을 배포합니다.

    kubectl apply -f frontend.yaml
    
  6. 명령을 사용하여 Kubernetes API를 쿼리하여 결과를 확인합니다 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