연습 - Kubernetes에 마이크로 서비스 컨테이너 배포

완료됨

Kubernetes는 컨테이너를 실행합니다. Kubernetes가 YAML 파일을 통해 수행할 작업을 설명합니다. 이 연습에서는 Kubernetes에서 백 엔드 서비스를 배포하고 실행할 수 있도록 파일 생성 과정을 안내합니다.

중요

계속하기 전에 Kubernetes 구현이 설치되어 있는지 확인해야 합니다. 여기서는 codespace에서 실행되는 k3d 구현을 사용합니다. 이 구현을 설치하여 랩을 시작합니다.

Kubernetes 도구 및 구현 설치

kubectl 도구와 k3d Kubernetes 구현을 모두 설치해야 합니다.

  1. codespace에서 터미널 탭으로 전환한 다음, 다음 명령을 실행하여 필수 구성 요소를 설치합니다.

    sudo apt-get update
    sudo apt-get install -y apt-transport-https ca-certificates curl
    
  2. 다음으로 Kubernetes 패키지 리포지토리에 대한 서명 키를 다운로드하려면 다음 명령을 실행합니다.

    sudo mkdir /etc/apt/keyrings
    curl -fsSL https://pkgs.k8s.io/core:/stable:/v1.28/deb/Release.key | sudo gpg --dearmor -o /etc/apt/keyrings/kubernetes-apt-keyring.gpg
    

    디렉터리가 이미 있다는 오류가 표시되면 curl 명령을 별도로 실행합니다.

  3. Kubernetes 리포지토리를 apt 구성에 추가합니다.

    echo 'deb [signed-by=/etc/apt/keyrings/kubernetes-apt-keyring.gpg] https://pkgs.k8s.io/core:/stable:/v1.28/deb/ /' | sudo tee /etc/apt/sources.list.d/kubernetes.list
    
  4. 이제 kubectl 도구를 설치할 수 있습니다.

    sudo apt-get update
    sudo apt-get install -y kubectl
    
  5. 마지막으로 Kubernetes의 k3d 구현을 설치하고 클러스터를 만듭니다.

    curl -s https://raw.githubusercontent.com/k3d-io/k3d/main/install.sh | bash
    k3d cluster create devcluster --config k3d.yml
    

백 엔드 서비스용 배포 파일 만들기

YAML 파일을 사용하여 Kubernetes에 대한 컨테이너 배포를 관리하는 파일을 만들 수 있습니다. 백 엔드 서비스를 배포하는 파일을 만들어 보겠습니다.

  1. backend-deploy.yml codespace의 donet-kubernetes 폴더에 새 파일을 만듭니다.

  2. 다음 텍스트를 파일에 복사한 다음, 저장합니다.

    ---
    apiVersion: apps/v1
    kind: Deployment
    metadata:
        name: productsbackend
    spec:
      replicas: 1
      template:
        metadata:
          labels:
            app: productsbackend
        spec:
          containers:
          - name: productsbackend
            image: [YOUR DOCKER USER NAME]/productservice:latest
            ports:
            - containerPort: 80
            env:
            - name: ASPNETCORE_URLS
              value: http://*:80
      selector:
        matchLabels:
          app: productsbackend
    ---
    apiVersion: v1
    kind: Service
    metadata:
      name: productsbackend
    spec:
      type: NodePort
      ports:
      - port: 80
        targetPort: 80
        nodePort: 32001
      selector:
        app: productsbackend
    
  3. [YOUR DOCKER USER NAME] 자리 표시자를 실제 Docker 사용자 이름으로 바꿉니다.

이 파일은 몇 가지 작업을 수행합니다.

첫 번째 부분은 Kubernetes에 배포될 컨테이너의 배포 사양을 정의합니다. 이는 하나의 복제본, 컨테이너 이미지를 찾을 위치, 컨테이너에서 열 포트를 지정하고 일부 환경 변수를 설정합니다. 이 첫 번째 부분에서는 컨테이너 및 사양을 참조하는 데 사용할 수 있는 레이블과 이름도 정의합니다.

두 번째 부분은 컨테이너가 Kubernetes NodePort 서비스로 실행되도록 정의합니다. 이 모듈에서는 NodePorts의 세부 사항을 모두 이해할 필요가 없습니다. 그러나 클러스터 외부에서 서비스를 테스트할 수 있도록 이러한 유형의 서비스가 외부 IP 주소를 노출한다는 것을 알아야 합니다.

백 엔드 마이크로 서비스 배포 및 실행

다음으로 마이크로 서비스를 배포하고 실행해 보겠습니다.

  1. 터미널 탭에서 다음 명령을 실행합니다.

    kubectl apply -f backend-deploy.yml
    

    이 명령은 만든 파일을 실행하도록 Kubernetes에 지시합니다. Docker Hub에서 이미지를 다운로드하고 컨테이너를 만듭니다.

  2. kubectl apply 명령은 결과를 신속하게 반환합니다. 그러나 컨테이너를 만드는 데 시간이 걸릴 수 있습니다. 진행 상황을 보려면 다음 코드를 사용합니다.

    kubectl get pods
    

    결과 출력에는 productsbackend가 있는 행과 NAME 열 아래에 임의의 문자열이 있습니다. 모든 것이 준비되면 READY 열 아래에 1/1이 표시되고 STATUS 열 아래에 Running이 표시됩니다.

  3. 서비스를 테스트하려면 포트 탭으로 전환한 다음 백 엔드 포트의 로컬 주소 근처에 있는 지구본 아이콘을 선택합니다. 브라우저에서 해당 주소로 새 탭이 열립니다.

  4. 일부 제품을 쿼리하려면 /api/product와 함께 주소를 추가한 다음 Enter 키를 누릅니다. JSON 형식으로 나열된 일부 제품 정보가 표시됩니다.

    [
        {
            "id": 1,
            "name": "Solar Powered Flashlight",
            "description": "A fantastic product for outdoor enthusiasts",
            "price": 19.99,
            "imageUrl": "product1.png"
        },
        {
            "id": 2,
            "name": "Hiking Poles",
            "description": "Ideal for camping and hiking trips",
            "price": 24.99,
            "imageUrl": "product2.png"
        },
        {
            "id": 3,
            "name": "Outdoor Rain Jacket",
            "description": "This product will keep you warm and dry in all weathers",
            "price": 49.99,
            "imageUrl": "product3.png"
        },
        ...
    

배포 파일 만들기 및 프런트 엔드 서비스 실행

백 엔드 서비스와 마찬가지로 프런트 엔드용 배포 파일도 필요합니다.

  1. donet-kubernetes에서 frontend-deploy.yml 폴더에 새 파일을 만듭니다.

  2. 다음 코드를 파일에 붙여넣습니다.

    ---
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: storefrontend
    spec:
      replicas: 1
      template:
        metadata:
          labels:
            app: storefrontend
        spec:
          containers:
          - name: storefrontend
            image: [YOUR DOCKER USER NAME]/storeimage:latest
            ports:
            - containerPort: 80
            env:
            - name: ASPNETCORE_URLS
              value: http://*:80
            - name: ProductEndpoint
              value: http://productsbackend
      selector:
        matchLabels:
          app: storefrontend
    ---
    apiVersion: v1
    kind: Service
    metadata:
      name: storefrontend
    spec:
      type: NodePort
      ports:
      - port: 80
        targetPort: 80
        nodePort: 32000
      selector:
        app: storefrontend
    
  3. [YOUR DOCKER USERNAME] 자리 표시자를 실제 Docker 사용자 이름으로 바꿉니다.

    이 파일은 백 엔드 마이크로 서비스용으로 만든 파일과 비슷합니다. 다음과 같은 두 가지 차이점이 있습니다.

    • 배포의 spec.template.spec.containers.image 값에서 실행할 다른 컨테이너를 지정합니다.
    • spec.template.spec.containers.env 섹션 아래에 새 환경 변수가 있습니다. storefrontend 애플리케이션의 코드가 백 엔드를 호출하지만 FQDN(정규화된 도메인 이름)을 지정하지 않았고 백 엔드 마이크로 서비스의 IP 주소를 알 수 없기 때문에 Deploymentmetadata.name 노드에서 지정한 이름을 사용합니다. Kubernetes는 나머지를 처리합니다.
  4. 다음 명령을 사용하여 Kubernetes에 컨테이너를 배포합니다.

    kubectl apply -f frontend-deploy.yml
    

    다시 kubectl get pods를 사용하여 배포 상태를 볼 수 있습니다. storefrontend 행에 RunningSTATUS 열 아래에 표시되면 모든 준비가 완료된 것입니다.

  5. 프런트 엔드 서비스를 테스트하려면 포트 탭으로 전환한 다음 프런트 엔드 포트의 로컬 주소 오른쪽에 있는 지구본 아이콘을 선택합니다. 브라우저에 홈 페이지가 표시됩니다.

  6. 제품을 선택합니다. 카탈로그에는 Contoso의 상품이 표시됩니다.

    A screenshot of the eSHopLite products page.

이 연습에서는 Kubernetes 내에서 컨테이너를 실행하는 방법을 정확히 설명하는 배포 파일을 만들었습니다. 그런 다음, Kubernetes가 Docker Hub에서 이미지를 다운로드하고 컨테이너를 시작하도록 합니다.