Scroll to top

GCP 자동화와 트러블 슈팅

최근 배포 시스템의 업데이트가 있었습니다. 배포 시스템과 같은 내부 시스템의 업데이트는 온전히 혼자 작업하다 보니 확실히 더디긴 합니다만, 더 늦지 않게 이번에 업데이트를 했습니다.

LAH는 자사 서비스를 GKE로 운영하고 있고, 고객사 서비스는 Instance Group을 사용하고 있습니다. 이 중 Instance Group 부분을 업데이트 했습니다. 고객사 서비스는 자사 서비스에 비해 긴급 대응하는 경우가 꽤 있고, 이를 빠르게 대응하기 위해서 이렇게 운영하게 되었습니다.
이번 기회에 업데이트한 부분은 고객사 서비스를 운영하고 있는 Instance Group 부분입니다.

Instance Group을 구성하기 위해서는 스냅샷, 이미지, 인스턴스 템플릿이 사용됩니다. 따라서 스냅샷 생성, 이미지 생성, 인스턴스 템플릿, 인스턴스 그룹 업데이트 단계로 자동화가 이뤄지게 됩니다.

GCP를 사용해 본 분들이라면 아마 잘 알겠지만, 거의 모든 GCP 기능에는 CLI 명령어를 볼 수 있는 버튼이 있습니다.

스냅샷을 생성하는 곳을 보면 “상응하는 코드” 라는 버튼이 있고, 이 버튼을 누르면 gcloud 명령어를 통해 설정할 수 있는 명령어를 생성해 줍니다.


gcloud compute snapshots create snapshot-1
  --project={projectname}
  --source-disk={diskname}
  --source-disk-zone=asia-northeast3-a
  --storage-location=asia

프로젝트 명과 디스크 명은 수정했지만, 이렇게 바로 실행이 가능하도록 CLI 를 제공하고 있습니다.

LAH에서는 GCP 에서 실행되는 많은 자동화를 위해 게이트웨이용 인스턴스를 운영하고 있습니다. 해당 서버는 GCP 내부에 있기 때문에 GCP 방화벽을 활용하여 보호받을 수 있고, 해당 서버에 명령어를 전달할 때는 whitelist로 발신 서버를 관리하기 때문에 안전하고 쉽게 명령어를 처리할 수 있습니다.

스냅샷, 이미지, 인스턴스 템플릿을 생성하고 배포하는 과정은 전부 동일합니다. GUI에서 먼저 구성하고, 생성되는 코드를 참고하여 배포 시스템에 개발하면 되는 것이죠.
다만 인스턴스 템플릿을 생성할 때는 조심해야 할 것이 있습니다.

인스턴스 템플릿의 경우 “상응하는 코드” 라는 버튼이 아니라 “동등한 명령줄”이라는 버튼이 있는데, 이 버튼에서 GCP가 제안하는 코드를 살펴보면 다음과 같습니다.

gcloud compute instance-templates create instance-template-1
  --project={projectname}
  --machine-type=e2-medium
  --network-interface=network=default,network-tier=PREMIUM
  --maintenance-policy=MIGRATE
  --provisioning-model=STANDARD
  --service-account={serviceaccount}
  --scopes=생략
  --create-disk=auto-delete=yes,boot=yes,device-name=instance-template-1,image={이미지경로},mode=rw,size=10,type=pd-balanced
  --no-shielded-secure-boot
  --shielded-vtpm
  --shielded-integrity-monitoring
  --reservation-affinity=any

굉장히 복잡해 보이지만, 대부분 자동으로 생성해 주거나, 앞서 생성한 이미지명 등 확인이 쉬운 것들로 구성되어 있습니다. 이렇게 자동 생성된 명령어를 사용하여 그대로 사용하게 되면 바로 문제가 발생합니다.

인스턴스 템플릿은 말 그대로 “템플릿”인데, 인스턴스 그룹이 특정 조건에 따라 인스턴스를 확장, 축소해야 할 때 참고할 템플릿입니다. 따라서 사용할 이미지 외에도 많은 설정값이 필요한데 그 중 하나가 네트워크입니다.
GUI로 인스턴스를 생성할 때는 기본적으로 임시 외부 IP 주소가 할당되고 특별한 조치 없이도 해당 IP로 접속이 가능합니다. 그리고 추후 해당 IP를 고정 IP로 등록할 수 있죠.

물론 인스턴스 그룹을 사용하는 경우에는 가장 앞단에 LB(Load Balancer)를 두고 구성하기 때문에 고정 IP를 할당할 일은 없지만, 기본 IP는 할당이 되어야 합니다.
그런데 이 스크립트로 인스턴스 템플릿을 생성하면 네트워크 인터페이스는 구성되지만 임시 IP 구성이 되지 않습니다.

공식 문서를 보면

빈 문자열을 명시해야 임시 IP가 할당된다고 작성되어 있습니다.

  --network-interface=network=default,network-tier=PREMIUM
  --network-interface=network=default,network-tier=PREMIUM,address=''

즉 이처럼 뒤에 address=”를 추가로 기재해야 문제없이 동작하는 것을 확인할 수 있었습니다.

여러 우여곡절과 강렬한 “실패” 표시가 떠있지만, 이제는 안정화되어서 운영에 많은 도움이 되고 있습니다. 확실히 자동화가 늘어갈 때마다 “회사”가 되어가는 것 같습니다.


LAH의 소식

🦁 LAH의 블로그 LAHibrary는 매주 수요일 업데이트 됩니다.
더 많은 라이브러리 읽으러 가기


🏞 LAH의 일상이 궁금하시다면?
LAH 인스타그램 둘러보기

LAH의 서비스

내 포트폴리오도 만들고 구인구직까지 가능한, 영상 창작자 매칭 플랫폼
비디어스(Vidius) 둘러보기


🗓 한국 영화제 일정 및 정보를 한눈에 보고 싶으시다면?
🎞 내 영화를 온라인에서 판매하고 싶다면?
🍿 그동안 만나보지 못했던 나만의 영화를 디깅하고 싶다면?
필름업(FILMUP) 둘러보기


📷 촬영장비 렌탈, 한 번에 검색하고 싶으시다면?
장비모아 둘러보기