웹사이트 검색

Kubernetes로 다중 계층 애플리케이션을 배포하는 방법


이 페이지에서

  1. 전제 조건
  2. 무엇을 할 것인가?\n
  3. 다중 계층 애플리케이션 배포\n
  4. 결론

다중 계층 애플리케이션은 둘 이상의 계층에 분산된 애플리케이션입니다. 운영 계층을 논리적으로 분리합니다. 계층 수는 비즈니스 및 애플리케이션 요구 사항에 따라 다릅니다. 이 기사에서는 백엔드 및 프론트엔드 계층의 2개 계층으로 나누어진 애플리케이션을 볼 것입니다. MongoDB를 백엔드로 사용하여 데이터를 저장하고 Python Flask를 프런트엔드 웹 서버로 사용합니다. Kubernetes의 배포를 사용하여 이 두 애플리케이션을 배포하고 여기에 요청을 전달하는 서비스를 제공합니다.

전제 조건

<올 스타일=텍스트 정렬:정렬>

  • 최소 1개의 작업자 노드가 있는 Kubernetes 클러스터.
    Kubernetes 클러스터 생성 방법을 알아보려면 여기를 클릭하십시오. 이 안내서는 AWS Ubuntu 18.04 EC2 인스턴스에서 1개의 마스터와 2개의 노드가 있는 Kubernetes 클러스터를 생성하는 데 도움이 됩니다.\n
  • 배포 및 서비스에 대한 기본적인 이해.
    기본적인 이해를 얻으려면 서비스를 참조하세요.\n

    우리는 무엇을 할 것인가?

    1. 다중 계층 애플리케이션 배포\n

    다중 계층 애플리케이션 배포

    다음 내용으로 \test-db-deployment.yaml\이라는 새 파일을 만듭니다. 이것은 데이터베이스, 백엔드 계층으로 작동할 MongoDB의 배치를 정의합니다. var slotId=div-gpt-ad-howtoforge_com-medrectangle-3-0;var ffid=1;var alS=1021%1000;var container=document.getElementById(slotId);container.style.width=100%;var ins =document.createElement(ins);ins.id=slotId+-asloaded;ins.className=adsbygoogle ezasloaded;ins.dataset.adClient=pid;ins.dataset.adChannel=cid;if(ffid==2){ins.dataset .fullWidthResponsive=참;}

    vim 테스트-db-deployment.yaml

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: test-db
    spec:
      selector:
        matchLabels:
          appdb: testdb
      replicas: 1
      template:
        metadata:
          labels:
            appdb: testdb
        spec:
          containers:
          - name: test-db
            image: mongo:3.3
            env:
            - name: MONGODB_DATABASE
              value: testdata
            ports:
            - containerPort: 27017

    이제 프런트엔드 애플리케이션에서 MongoDB로 요청을 처리할 서비스를 생성합니다. 이 서비스는 포트 27017에서 수신하고 동일한 포트에서 MongoDB로 요청을 전달합니다.

    vim 테스트-db-service.yaml

    apiVersion: v1
    kind: Service
    metadata:
      name: mongodb
      labels:
        app: testdb
    spec:
      ports:
      - port: 27017
        protocol: TCP
      selector:
        appdb: testdb

    다음 단계는 프런트엔드 애플리케이션을 정의하는 것입니다. 다음 배치 정의를 포함하는 새 파일을 작성하십시오.

    포트 5000에서 수신 대기합니다.

    MongoDB에 대한 요청은 MONGODB_HOST, 즉 mongodb 서비스로 전달됩니다.

    vim 테스트-웹-배포.yaml

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: test
    spec:
      selector:
        matchLabels:
          app: test
      replicas: 1
      template:
        metadata:
          labels:
            app: test
        spec:
          containers:
          - name: test-app
            image: teamcloudyuga/rsvpapp
            env:
            - name: MONGODB_HOST
              value: mongodb
            ports:
            - containerPort: 5000
              name: web-port

    프런트엔드에 액세스하기 위해 포트 31081에서 수신하는 NodePort 유형의 서비스를 생성합니다. 즉, Python Flask 웹 서버는 IP=IP-Of-Any-Node 및 Port=31081에서 액세스할 수 있습니다. 다음 서비스 정의를 사용하여 새로 만듭니다.

    vim 테스트-웹-service.yaml

    apiVersion: v1
    kind: Service
    metadata:
      name: test
      labels:
        apps: test
    spec:
      type: NodePort
      ports:
      - name: tcp-31081-5000
        nodePort: 31081
        port: 5000
        protocol: TCP
      selector:
        app: test

    이제 2계층 샘플 애플리케이션을 만들 준비가 모두 끝났습니다. 계속 진행하기 전에 클러스터에 개체가 있는지 확인하겠습니다.

    다음 명령을 실행하여 클러스터에서 실행 중인 포드, 배포 및 서비스를 확인합니다.

    kubectl 포드 가져오기

    kubectl 배포 가져오기

    kubectl 서비스 받기

    위 스크린샷에서 클러스터에 1개의 kubernetes 기본 서비스만 있는 것을 볼 수 있습니다.

    이제 4개의 파일을 생성한 디렉터리에서 다음 명령어를 하나씩 실행하여 MongoDB 배포, MongoDB 서비스, Python Flask 웹서버 배포 및 Python Flask 웹서버 서비스를 생성합니다.

    kubectl create -f test-db-deployment.yaml

    kubectl create -f test-db-service.yaml

    kubectl create -f test-web-deployment.yaml

    kubectl create -f test-web-service.yaml

    위의 스크린샷에서 MongoDB 배포, MongoDB 서비스, Python Flask 웹서버 배포 및 Python Flask 웹서버 서비스가 성공적으로 생성되었음을 확인할 수 있습니다.

    동일한지 확인하려면 다음 명령을 실행하십시오.

    kubectl 포드 가져오기

    kubectl 배포 가져오기

    kubectl 서비스 받기

    다음 스크린샷에서 포드 2개와 서비스 2개가 생성되었음을 확인할 수 있습니다. 생성된 포드는 우리가 생성한 배포에 의해 제어됩니다.

    이제 IP-of-any-Node:31081에서 애플리케이션에 액세스하도록 모두 설정되었습니다.

    브라우저에서 URL을 누르면 다음과 같이 애플리케이션이 표시됩니다. 이것은 공개적으로 사용 가능한 도커 이미지를 사용하고 CloudYuga에 속하는 샘플 애플리케이션입니다. 여기에서 RSVP 수가 0임을 알 수 있습니다. 이는 MongoDB에 데이터가 없음을 의미합니다.

    이제 몇 가지 데모 항목을 추가할 수 있습니다.

    몇 가지 항목을 추가하면 개수가 변경된 것을 볼 수 있습니다. 이것은 데이터가 MongoDB에 저장되었음을 의미합니다.

    이제 이러한 애플리케이션이 더 이상 필요하지 않으면 모든 Kubernetes 개체 파일이 있는 디렉터리에서 다음 명령을 실행하여 모든 개체를 삭제할 수 있습니다.

    kubectl 삭제 -f .

    위 명령어는 생성한 MongoDB 배포, MongoDB 서비스, Python Flask 웹서버 배포 및 Python Flask 웹서버 서비스를 삭제합니다.

    생성한 모든 객체가 성공적으로 삭제되었는지 확인하려면 다음 명령을 실행합니다.

    kubectl 모두 가져오기

    다음 스크린샷에서 기본 kubernetes 서비스가 하나만 있고 생성한 개체가 더 이상 존재하지 않는 것을 볼 수 있습니다.

    결론

    이 문서에서는 데이터베이스에 액세스하기 위한 MongoDB 백엔드 데이터베이스 및 서비스의 배포를 생성했으며 프런트엔드의 경우 이 프런트엔드에 액세스하기 위한 Python Flask 기반 애플리케이션 배포 및 서비스를 생성했습니다. 또한 데이터가 백엔드 데이터베이스에 저장되는 것도 확인했습니다. 이것은 공개적으로 사용 가능한 도커 이미지를 사용하는 샘플 2계층 애플리케이션입니다.