1. 개요
기존 애플리케이션을 Kubernetes에서 작동하도록 재작성하거나 재설계하는 것이 항상 수동으로는 가능하거나 가능하지는 않습니다. Migrate for Anthos는 기존 애플리케이션을 현대화하고 Kubernetes에서 실행하도록 도와줍니다. 이 Codelab에서는 Migrate for Anthos를 사용하여 Compute Engine에서 호스팅되는 기존 웹 앱을 Kubernetes Engine으로 마이그레이션합니다.
학습할 내용
- Kubernetes 클러스터에 Migrate for Anthos를 배포하는 방법
- 기존 Compute Engine 인스턴스에서 스테이트풀(Stateful) 세트에 컨테이너를 만드는 방법
- 컨테이너를 Kubernetes에 배포하고 부하 분산기로 구성하는 방법
필요한 항목
- 결제가 설정된 Google Cloud 프로젝트 Google 계정이 없으면 계정을 만들어야 합니다.
2. 설정
이 Codelab은 로컬 설치 또는 구성 없이 전적으로 Google Cloud Platform에서 실행할 수 있습니다.
API 사용 설정
시작하기 전에 Google Cloud 프로젝트에서 필수 API를 사용 설정해야 합니다.
Compute 인스턴스 웹 서버 만들기
웹 서버의 기본 방문 페이지를 볼 수 있는 방화벽 규칙과 함께 초기 nginx 웹 서버를 호스팅하는 데 사용할 컴퓨팅 인스턴스를 만들어 보겠습니다. 몇 가지 방법이 있지만 사용 편의성을 위해 Cloud Shell을 사용하겠습니다.
Cloud Shell에서 다음을 실행합니다.
gcloud compute instances create webserver --zone=us-central1-a && \ gcloud compute firewall-rules create default-allow-http --allow=tcp:80
이 명령어의 전반부에서는 us-central1-a 영역에 Google Cloud 인스턴스를 만들고 후반부에서는 'default-allow-http'라는 방화벽 규칙을 만듭니다. HTTP 트래픽을 허용합니다.
인스턴스가 성공적으로 생성되면 인스턴스의 세부정보가 포함된 테이블이 표시됩니다. 외부 IP를 기록해 둡니다. 이는 나중에 웹 서버가 실행 중인지 확인하는 데 필요합니다.
인스턴스가 실행되면 Cloud Shell에서 인스턴스에 SSH로 연결하여 nginx를 설치하고 웹 서버를 시작할 수 있습니다.
gcloud compute ssh --zone us-central1-a webserver
컴퓨팅 인스턴스에 로그인한 후 nginx를 설치합니다.
sudo apt install nginx
logout
명령어로 SSH 세션에서 로그아웃
앞서 사용한 인스턴스의 외부 IP를 브라우저에 입력하여 웹 서버가 실행 중인지 확인해 보겠습니다. 기본 nginx 시작 화면이 표시됩니다.
이 웹 서버는 Migrate for Anthos를 사용하여 Kubernetes로 마이그레이션할 기존 웹 앱 역할을 합니다.
3. Migrate for Anthos를 사용하는 Kubernetes 클러스터
다음으로 최종적으로 Compute Engine 웹 서버를 마이그레이션할 GKE 클러스터를 만듭니다. Cloud 콘솔에서 다음을 실행합니다.
gcloud container clusters create my-gke-cluster \ --zone us-central1-a \ --cluster-version 1.13 \ --machine-type n1-standard-4 \ --image-type "UBUNTU" \ --num-nodes 1 \ --enable-stackdriver-kubernetes
이 명령어가 완료되는 데 몇 분 정도 걸립니다. 클러스터가 생성되면 세부정보가 포함된 출력이 표시됩니다.
그런 다음 GCP Marketplace로 이동하여 Migrate for Anthos를 배포합니다.
Migrate for Anthos의 Marketplace 페이지에서 '구성'을 클릭하고 메시지가 표시되면 목록에서 프로젝트를 선택합니다. 다음 페이지에는 일부 기본값이 입력된 양식이 표시됩니다. 선택한 클러스터가 방금 만든 클러스터인지 확인하고 배포를 클릭합니다.
이제 Migrate for Anthos가 Kubernetes 클러스터에 배포됩니다. 배포가 완료되면 '확인' 상태가 표시됩니다. ( Kubernetes Engine 애플리케이션 페이지)
4. 컴퓨팅 인스턴스에서 스테이트풀(Stateful) 세트로
Migrate for Anthos를 실행하는 Kubernetes 클러스터가 있으므로 이제 마이그레이션 프로세스를 시작할 수 있습니다. Kubenetes 클러스터에 컴퓨팅 인스턴스를 배포하기 위해 디스크의 스냅샷을 만들 수 있도록 Compute Engine 인스턴스를 종료하겠습니다. 계속 진행하기 전에 나중에 필요하므로 인스턴스 ID를 기록해 둡니다.
gcloud compute instances describe webserver --zone us-central1-a | grep ^id
컴퓨팅 인스턴스를 종료해 보겠습니다.
gcloud compute instances stop webserver --zone us-central1-a
이제 인스턴스가 중지되었으므로 다음 스크립트를 실행하여 디스크의 스냅샷을 안전하게 생성할 수 있습니다. 프로젝트 ID와 인스턴스 ID를 삽입해야 합니다.
python3 /google/migrate/anthos/gce-to-gke/clone_vm_disks.py \ -p <project-id> -i <instance-id> \ -z us-central1-a \ -T us-central1-a \ -A webserver-statefulset \ -o containerized-webserver.yaml
이러한 플래그를 사용하면 clone_vm_disks.py
에서 다음을 실행합니다.
- GCE 인스턴스가 꺼져 있는지 확인
- 인스턴스의 각 디스크에서 스냅샷 만들기
- 각 스냅샷에서 새 디스크 만들기
- 생성된 스냅샷 삭제
- 웹 서버를 호스팅할 스테이트풀(Stateful) 세트를 배포하기 위해 현재 작업 디렉터리에 YAML 파일을 생성합니다.
생성된 yaml 파일은 Kubernetes 클러스터에 복사된 디스크를 웹 서버 컨테이너에 마운트하는 데 필요한 영구 볼륨 클레임과 함께 스테이트풀(Stateful) 세트를 프로비저닝합니다. kubectl
를 사용하여 이러한 변경사항을 적용할 수 있습니다.
kubectl apply -f containerized-webserver.yaml
워크로드 페이지에서 webserver-statefulset의 상태를 확인합니다.
상태가 '포드 대기 중'으로 표시되는 것은 정상입니다. kubectl apply
를 실행한 후 몇 분 동안 지속됩니다. 상태가 '확인'으로 표시되면 계속 진행합니다.
5. 클러스터를 부하 분산기에 노출
이 시점에서 Kubenetes 클러스터는 웹 서버를 스테이트풀(Stateful) 세트로 실행해야 하지만, 외부 IP 주소를 통해 웹 서버에 액세스하려면 컨테이너를 부하 분산기에 노출해야 합니다. Cloud Shell에서 다음 내용으로 loadbalancer.yaml
라는 새 파일을 만듭니다.
loadbalancer.yaml
apiVersion: v1
kind: Service
metadata:
name: webserver-loadbalancer
spec:
type: LoadBalancer
selector:
app: webserver-statefulset
ports:
- protocol: TCP
port: 80
targetPort: 80
이제 kubectl
로 적용합니다.
kubectl apply -f loadbalancer.yaml
kubectl을 사용하여 webserver-container 서비스의 외부 IP 주소를 검색할 수 있습니다.
kubectl get services
브라우저에 외부 IP 주소를 입력하면 이전과 동일한 기본 nginx 시작 화면이 표시됩니다.
해냈구나! 이제 GCE 웹 서버가 Kubernetes에서 호스팅됩니다. 좋은 소식입니다.
6. Stackdriver Monitoring
측정항목
관리형 Kubernetes 서비스인 Kubernetes Engine은 Stackdriver를 통한 로깅과 모니터링을 자동으로 계측합니다. Stackdriver가 자동으로 캡처하는 몇 가지 측정항목을 살펴보겠습니다.
제품 메뉴에서 Monitoring 링크를 클릭합니다. 프로젝트에서 처음으로 이 기능에 액세스하려면 작업공간을 설정하는 동안 몇 분 정도 걸릴 수 있습니다.
로드가 완료되면 왼쪽 창에서 리소스 위로 마우스를 가져가 'Kubernetes Engine 신규'를 선택합니다. 선택합니다.
여기에 표시된 대시보드의 각 행은 Kubernetes 리소스를 나타냅니다. 대시보드 위에 있는 링크를 사용하여 인프라, 워크로드 또는 서비스 뷰 간에 전환할 수 있습니다.
워크로드 뷰에서 'my-gke-cluster'를 펼칩니다. 기본값으로 드릴다운 > webserver-statefulset> webserver-statefulset-0> webserver-statefulset로 집계됩니다. webserver-stateful set 컨테이너를 클릭합니다. 여기에서는 메모리 사용률 및 CPU 사용률을 포함하여 Stackdriver에서 캡처되는 즉시 사용 가능한 몇 가지 측정항목을 확인할 수 있습니다.
이 대시보드에 표시되는 차트는 맞춤 대시보드를 만드는 데 사용할 수 있는 차트입니다.
커스텀 대시보드
Stackdriver를 사용하면 사용 가능한 측정항목 데이터의 차트와 그래프를 구성하는 데 사용할 수 있는 커스텀 대시보드를 만들 수 있습니다. 웹 서버의 일부 측정항목을 한눈에 볼 수 있도록 커스텀 대시보드를 만들어 보겠습니다.
왼쪽 창에서 대시보드 위로 마우스를 가져간 다음 대시보드 만들기를 클릭합니다.
이제 대시보드가 비어 있으므로 계속 확인하고 싶은 측정항목을 추가할 수 있습니다. 제목 없는 대시보드에 'My Web Server Containers'와 같은 유용한 이름을 지정해 보겠습니다. '차트 추가'를 클릭합니다. 를 클릭합니다.
바로 사용할 수 있는 측정항목을 기억하시나요? 컨테이너 CPU 사용률 차트를 추가해 보겠습니다. 차트 제목 필드에 'CPU 사용률'을 입력합니다. '리소스 유형 및 측정항목 찾기' 상자에 request_utilization을 입력하고 필터링된 목록에서 CPU 요청 사용률을 선택합니다. 이 옵션을 선택하면 리소스 유형 및 측정항목 필드가 자동으로 채워집니다.
다음으로 project_id (여러 프로젝트가 있는 경우) 및 container_name을 기준으로 필터링합니다. 필터 상자에 project_id를 입력하고 필터링된 목록에서 선택한 다음 값 필드에서 프로젝트를 선택합니다. container_name을 기준으로 필터링해야 합니다. 필터 상자에 container_name을 입력하고 필터링된 목록에서 선택한 다음 값 필드에서 webserver-statefulset을 선택합니다. 저장을 클릭합니다.
이제 첫 번째 차트가 있는 대시보드가 생겼습니다.
7. 업타임 체크 및 알림 정책
Stackdriver를 사용하면 측정항목이 지정한 임계값에 도달할 때 알려주는 알림을 설정할 수 있습니다. 예를 들어 마지막 단계의 CPU 사용률이 지속적으로 일정 임곗값을 초과하면 Stackdriver로부터 이메일을 받을 수 있습니다. 이는 앱에 문제가 있음을 의미할 수 있습니다. 이러한 알림이 어떻게 표시되는지 확인하기 위해 업타임 체크를 설정한 다음 서비스 중단을 시뮬레이션해 보겠습니다.
왼쪽 창에서 업타임 체크와 업타임 체크 개요를 차례로 선택합니다.
업타임 체크 페이지에서 알 수 있듯이 첫 번째 업타임 체크를 설정해 보겠습니다. 페이지 오른쪽 상단에서 업타임 체크 추가 버튼을 클릭합니다.
진행 양식에 '엔드포인트 업타임'을 입력합니다. 을 제목으로, 부하 분산기의 외부 IP 주소를 호스트 이름으로 설정합니다.
저장을 클릭하면 함께 제공되는 알림 정책을 만들라는 메시지가 표시됩니다.
알림 정책 만들기를 클릭합니다.
이름을 '엔드포인트 업타임 정책'으로 지정하겠습니다. 구성 섹션에서 '다음의 경우 조건 트리거'를 설정합니다. '시계열 위반'으로 변경 저장을 클릭합니다.
아직 끝이 아닙니다. 다음으로 Google의 알림 정책을 위반했을 때 알림을 받을 수 있도록 알림 채널을 지정합니다. 알림 채널 유형 메뉴에서 이메일 과 올바른 이메일 주소를 차례로 선택합니다.
알림 채널 추가를 클릭합니다. 마지막으로 양식 하단에서 정책의 이름을 '웹 앱 업타임'으로 지정합니다. 저장을 클릭합니다
알림이 어떻게 표시되는지 확인하려면 Cloud 콘솔에서 Cloud Shell을 다시 엽니다. 다음 명령어는 웹 서버 포드에서 실행 중인 nginx 서비스를 중지합니다.
kubectl exec -t webserver-statefulset-0 -- /bin/bash -c "nginx -s stop"
몇 분 후 중단을 알리는 이메일이 수신됩니다.
실행취소합니다. Cloud Shell로 돌아가서 nginx를 다시 시작하겠습니다.
kubectl exec -t webserver-statefulset-0 -- /bin/bash -c "nginx"
몇 분 후 다른 Stackdriver 이메일을 받게 됩니다.
8. 삭제
이제 Migrate for Anthos를 사용하여 GCE에서 GKE로 마이그레이션했으므로 우리가 만든 모든 리소스를 프로젝트에서 정리해 보겠습니다.
프로젝트 삭제하기
원하는 경우 전체 프로젝트를 삭제할 수 있습니다. GCP Console에서 Cloud Resource Manager 페이지로 이동합니다.
프로젝트 목록에서 작업 중인 프로젝트를 선택하고 삭제를 클릭합니다. 프로젝트 ID를 입력하라는 메시지가 표시됩니다. 프로젝트 ID를 입력하고 종료를 클릭합니다.
여러 구성요소를 하나씩 삭제하려면 다음 섹션으로 진행합니다.
Stackdriver
대시보드
대시보드 페이지에서 페이지 상단의 설정 아이콘 을 클릭하고 대시보드 삭제를 선택합니다.
알림 정책
정책 페이지의 오른쪽에 있는 작업 메뉴 에서 삭제를 선택합니다.
업타임 체크
업타임 체크 페이지에서 생성한 각 체크의 오른쪽에 있는 작업 메뉴에서 삭제를 선택합니다.
GCE 및 Kubernetes
Google Compute Engine 인스턴스
gcloud compute instances delete webserver --zone=us-central1-a
Kubernetes 클러스터(Migrate for Anthos, 스테이트풀(Stateful) 세트, 부하 분산기 서비스 포함)
gcloud container clusters delete my-gke-cluster --zone=us-central1-a
디스크
스테이트풀(Stateful) 세트는 우리가 만든 디스크를 사용했습니다. 이름을 검색하려면 다음을 사용합니다.
gcloud compute disks list --filter=webserver
내 디스크 대신 사용 중인 디스크 이름을 사용하여 삭제합니다.
gcloud compute disks delete vls-690d-webserver --zone=us-central1-a
정리가 완료되었습니다.
9. 축하합니다.
훌륭합니다. Migrate for Anthos를 사용하여 웹 서버를 GCE 인스턴스에서 Kubernetes 클러스터로 마이그레이션했습니다.
학습한 내용
- Migrate for Anthos를 사용하여 웹 서버를 GCE에서 Kubernetes 클러스터로 마이그레이션
- 스테이트풀(Stateful) 세트 웹 서버를 Kubernetes 부하 분산기 서비스를 통해 노출하여 공개했습니다.
- Stackdriver를 사용 설정하고 커스텀 대시보드를 만들었습니다.
- 웹 서버가 다운되면 이를 알려주는 알림 정책과 업타임 체크를 구성했습니다.