ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [퀵랩] 고급 - 쿠버네티스 솔루션 04/08
    Qwiklabs/고급 - Kubernetes Solutions 2020. 5. 31. 02:14
    728x90

    안녕하세요! 어느덧 쿠버네티스 솔루션 4번째 이야기입니다.

    랩에서 담고 있는 내용이 어려워 그림을 통해 이해를 도왔습니다.

    좋아요, 댓글은 많은 도움이 됩니다!

     

    이번 랩에서는 GKE를 통한 분산 로드 테스팅을 해봅니다.

    복잡한 구성의 분산처리 모델, 로드 테스팅 시나리오에도 사용될 수 있습니다.

    시작합니다!

     

     

    이번의 백엔드 구성은 다음의 그림과 같습니다.

    상호작용을 모델링할때 Locust를 사용해서 분산처리를 작업합니다.

     

    다음은 이번 랩의 내용 설명입니다.

     

    컨테이너 기반 컴퓨팅

     

    컨테이너 클러스터에는 하나의 마스터 노드(실상 워커 노드들을 관리하는 역할을 합니다.),

    여러 개의 워커 노드들로 이루어집니다.

    재미를 위해서 스타워즈 아이콘으로 비유해 보았습니다!

     

    마스터 노드 : 제다이 마스터, 요다 / 워커 노드 : 루크 스카이워커

     

     

    파드는 하나의 호스트에 배포된 선언/배포/관리의 최소 단위입니다.

    (파드 안의 컨테이너는 IP주소, 포트 스페이스 등을 공유합니다. 

    이번 랩에선 집중적으로 다루진 않지만, 어떤 한 컨테이너 객체가 외부 노출 포인트가 없어도

    다른 컨테이너가 외부 노출 포인트를 갖게해서 외부의 정보를 수집하게끔 할 수도 있습니다.)

     

    그리고 어떤 파드들은 단일 컨테이너만 가집니다. 이번 랩에서도요!

     

    배포 컨트롤러는 파드& 레플리카셋의 선언적인 업데이트를 제공합니다.

     

    서비스

     

    파드같은 경우에는 여 러가지 이유로 사라질 수 있기 때문에,

    서비스를 통해 배포합니다.

     

    이번 랩에서도 서비스를 사용합니다!

     

    다음 도식은 마스터와 워커 노드의 구성을 보여줍니다.

     

    자 많이 해왔던 프로젝트, 존 설정을 다른 랩과 다르게 해 봅니다.

    사실 내용이 다른 게 아니라 cli에서 gcloud config get-value project만 실행해도 프로젝트 ID를 가져올 수도 있습니다.

     

    다음의 명령어를 실행해서 환경 변수들을 설정합니다.

    PROJECT=$(gcloud config get-value project)

    REGION=us-central1 ZONE=${REGION}-a

    CLUSTER=gke-load-test

    TARGET=${PROJECT}.appspot.com

    gcloud config set compute/region $REGION

    gcloud config set compute/zone $ZONE

     

    그러고 나서, 샘플 코드를 받아 도커 이미지를 만듭니다.

    git clone https://github.com/GoogleCloudPlatform/distributed-load-testing-using-kubernetes.git

    폴더로 들어갑니다.

    cd distributed-load-testing-using-kubernetes/

    도커 이미지를 만들어서 구글 컨테이너 레파지토리에 저장합니다.

    gcloud builds submit --tag gcr.io/$PROJECT/locust-tasks:latest docker-image/.

     

    다음의 결과 화면을 확인할 수 있습니다.

     

    다음의 명령어를 통해서 앱을 배포합시다!

    gcloud app deploy sample-webapp/app.yaml

     

    쿠버네티스 클러스터를 배포합니다.

    환경변수에 클러스터명, 존이 설정되어 있고, 노드의 수는 5개입니다.

    gcloud container clusters create $CLUSTER \ --zone $ZONE \ --num-nodes=5

     

    이제 다음으로 마스터 노드를 테스팅해봅시다.

    웹 인터페이스 통신을 위해 8089 포트,

    워커 노드와 통신하기 위해서 5557, 5558 포트 등을 명시하여 마스터가 구성됩니다.

     


    다음의 명령어를 통해 로커스트 마스터를 배포합니다.

    sed -i -e "s/\[TARGET_HOST\]/$TARGET/g" kubernetes-config/locust-master-controller.yaml

    sed -i -e "s/\[TARGET_HOST\]/$TARGET/g" kubernetes-config/locust-worker-controller.yaml

    sed -i -e "s/\[PROJECT_ID\]/$PROJECT/g" kubernetes-config/locust-master-controller.yaml

    sed -i -e "s/\[PROJECT_ID\]/$PROJECT/g" kubernetes-config/locust-worker-controller.yaml

     

    타겟 호스트, 프로젝트 아이디는 변경해줘야 합니다!

     

    로커스트 마스터 컨트롤러를 배포합니다.

    kubectl apply -f kubernetes-config/locust-master-controller.yaml

    파드 생성을 확인합니다.

    kubectl get pods -l app=locust-master

    로커스트 마스터 서비스를 생성해 봅시다.

    kubectl apply -f kubernetes-config/locust-master-service.yaml

     

    로커스트 마스터 서비스를 가져와 봅니다.

    kubectl get svc locust-master

     

    생성을 확인했습니다! 이제 다음으로 워커의 로드 테스팅을 해봅시다.

     

    워커 컨트롤러를 배포합니다.

    kubectl apply -f kubernetes-config/locust-worker-controller.yaml

     

    워커 컨트롤러의 파드를 가져와 봅니다. 5개임을 확인할 수 있습니다.

    kubectl get pods -l app=locust-worker

     

    로커스트 워커의 레플리카수를 20개로 조절해 봅니다.

    kubectl scale deployment/locust-worker --replicas=20

     

    다시 수를 확인해 봅시다.

    kubectl get pods -l app=locust-worker

     

    다음의 그림은 마스터와 로커스트 워커 간의 관계입니다.

     

    다음의 명령어를 통해서 외부 IP를 가져옵니다.

    링크를 눌러서 웹 인터페이스로 접근합니다!

     

    EXTERNAL_IP=$(kubectl get svc locust-master -o yaml | grep ip | awk -F": " '{print $NF} ')

    echo http://$EXTERNAL_IP:8089

     

    먼저 위칸에 300, 아랫칸에 10을 입력하고 Start swarming을 누릅니다.

     

     

    유저가 생성되고, 수집되는 통계를 대시보드를 통해서 확인할 수 있습니다.

     

     

    고생하셨습니다! 이번 랩을 통해서 GKE를 통한 분산 로드 테스팅 프레임 워크를 배포하고,

    웹 인터페이스를 통해 유저를 발생하고 확인하는 작업까지 해보았습니다.

    다음 랩에서 뵙겠습니다! 

     

    728x90
    반응형
Designed by Tistory.