Google Kubernetes Engine(GKE) 개발자 가이드
Drew Bradstock
Senior Director, GKE Product Management, Google Cloud
* 본 아티클의 원문은 2020년 11월 18일 Google Cloud 블로그(영문)에 게재되었습니다.
Kubernetes와 같은 컨테이너 관리 플랫폼을 배포 환경으로 구축할지를 고민할 때 리소스 효율성 향상, 확장성 증가, 향상된 복원력, 보안 등의 운영상의 이점을 보고 결정하는 경우가 많습니다. 하지만 Kubernetes는 기업의 소프트웨어 개발 측면에도 큰 도움이 됩니다. 코드 이식성 개선, 생산성 향상을 막론하고 Kubernetes가 지닌 이점은 운영자뿐 아니라 개발자에게도 도움이 됩니다.
우선, 클라우드 기반으로 재설계: 규모에 맞춘 개발자 생산성 향상을 위한 혁신적인 접근 방식에서 살펴본 바와 같이 Kubernetes에서는 마이크로서비스와 같은 최신 클라우드 기반 소프트웨어 개발 패턴을 보다 쉽게 도입할 수 있어 다음과 같은 이점을 누릴 수 있습니다.
- 개발자 생산성 향상 - 팀 규모가 커지더라도 생산성을 높일 수 있습니다.
- TTM(time to market) 단축 - 새로운 기능 추가 및 결함 수정이 보다 신속하게 이루어집니다.
- 가용성 향상 - 소프트웨어 업타임을 높이고 배포 실패율을 낮추며 이슈 발생 시 복원 시간을 단축합니다.
- 보안 강화 - 애플리케이션에서 공격에 취약한 부분을 줄이고 공격 및 새롭게 발견된 취약점을 보다 쉽게 감지하고 재빠르게 대응할 수 있도록 합니다.
- 확장성 향상 - 클라우드 기반 플랫폼 및 애플리케이션으로 필요에 따라 손쉽게 수평 확장 또는 축소가 가능합니다.
- 비용 절감 - 능률적인 소프트웨어 제공 프로세스로 새로운 기능 제공 비용이 절감되고 효과적인 클라우드 플랫폼 사용으로 서비스 운영 비용 역시 크게 절감됩니다.
Google이 개발한 Kubernetes를 Google Cloud에서는 완전 관리형 서비스인 Google Kubernetes Engine(GKE)으로 제공하고 있습니다. 뿐만 아니라 Google Cloud에서는 GKE와 긴밀하게 통합되고 완전하게 갖춰진 개발자 도구도 제공하고 있다는 사실을 알고 계신가요? 오늘은 KubeCon 개최를 축하하는 의미로 GKE 전용 애플리케이션을 개발하여 안전하고 효율적으로 배포하는 방법, 프로덕션 단계의 애플리케이션을 모니터링 및 디버깅하는 방법을 소개하는 몇 가지 블로그 게시물을 되짚어 보려고 합니다.
개발자의 손끝에서 시작되는 GKE 기반 개발
아무리 큰 규모의 엔터프라이즈급 애플리케이션이라 하더라도 그 태생은 개발자의 노트북입니다. GKE에서 실행되는 애플리케이션도 마찬가지입니다. 이러한 개발 작업을 위해 로컬 개발 환경을 GKE와 통합하는 데 사용할 수 있는 다양한 도구가 마련되어 있습니다.
- 개발자가 많은 컴퓨팅 리소스로 노트북 사양을 높이는 것은 잘 알려진 사실입니다. 가령 Minikube를 사용하면 GPU를 활용할 수 있습니다. 또한 Jib 및 Skaffold처럼 Java 앱 컨테이너화를 도와주는 로컬 개발 도구도 있습니다. Jib는 Docker를 설치할 필요 없이 Java 앱을 컨테이너화하고 Docker 데몬을 실행하거나 Dockerfile을 작성하는 데에도 도움이 되며 Maven 또는 Gradle의 플러그인 형태로 사용 가능합니다. 그런 다음 Skaffold를 사용하면 변경사항이 감지될 때 이러한 컨테이너화된 Java 앱을 Kubernetes 클러스터에 배포할 수 있습니다. Skaffold에서는 새로운 버전의 파일을 실행 중인 컨테이너에 삽입하는 것도 가능합니다. 이 내용은 로컬 노트북에서 보다 간편한 Kubernetes 개발 환경 누리기에 보다 자세히 설명되어 있습니다.
- GKE 개발자 사이에 인기가 높은 또 다른 도구로는 Cloud Code가 있습니다. 이 도구는 널리 사용되는 Visual Studio 및 IntelliJ 통합 개발 환경(IDE)용 플러그인을 제공하여 GKE 기반 개발을 간소화합니다. 예를 들어 최근에도 Cloud Code 업데이트를 통해 Kubernetes YAML 및 커스텀 리소스 정의(CRD) 지원을 대폭 강화했습니다. 자세한 내용은 수백 개에 달하는 인기 Kubernetes CRD의 YAML 작업을 간편하게 만드는 Cloud Code를 참조하세요.
- 속성으로 처리해야 하는 개발 작업이 있다면 Cloud Shell 편집기를 사용해 보세요. 이 편집기는 브라우저에서 모든 기능을 갖춘 독립 실행형의 컨테이너 개발 환경을 실행합니다. 자세한 내용은 새로운 Cloud Shell 편집기: 몇 분 안에 첫 클라우드 기반 앱 실행하기를 참조하세요.
파이프라인 만들기
궁극적으로 노트북에서 개발한 앱을 프로덕션 단계로 푸시할 준비를 마치게 됩니다. 하지만 그에 앞서 코드의 테스트가 제대로 수행되었고 필수 보안 및 규정 준수 테스트를 통과하는지 확인하고 싶을 것입니다. Google Cloud의 다양한 도구를 활용하면 이 파이프라인을 통해 코드를 푸시하는 데 도움을 받을 수 있습니다.
- GKE에 이르는 자동 배포 파이프라인을 설정하는 작업이 반드시 어려운 것만은 아닙니다. 몇 번의 클릭만으로 GKE 워크로드의 배포 파이프라인 만들기에서 Cloud Build를 사용하여 소스, 빌드 구성, Kubernetes YAML 파일을 선택하는 과정을 비롯하여 파이프라인을 처음부터 만드는 방법을 알아보세요.
- 단, 파이프라인을 시작하기 전에 배포 중인 이미지가 안전한지 확인해야 합니다. Binary Authorization은 정책 시행 관문을 제공하여 서명 및 승인이 완료된 이미지만 환경에 배포되도록 보장합니다. 자세한 내용은 배포 신뢰성을 높이는 GKE용 Binary Authorization 소개에서 확인할 수 있습니다.
- 반가운 소식은 Artifact Registry에서 취약점 스캔 기능이 기본 제공된다는 것입니다. 이 기능을 사용 설정하면 Cloud Build를 사용해 빌드된 모든 컨테이너 이미지가 Artifact Registry로 푸시될 때 OS 패키지 취약점을 감지하는 자동 스캔을 거치게 됩니다. 자세한 내용은 Artifact Registry를 사용한 소프트웨어 공급망 강화를 참조하세요.
GKE 앱 원격 개발을 위한 모니터링, 디버깅, 반복 과정
앱이 GKE 클러스터에서 프로덕션 단계에 있다면 모든 작업이 마무리된 것일까요? 아닙니다. 개발자에게 앱 프로덕션은 소프트웨어 수명 주기의 시작점일 뿐입니다. 개발자는 앱을 개선할 방법을 고민하기 마련이고 이를 위해 문제점을 알리는 조짐이 있는지 모니터링하게 됩니다. GKE는 GKE 앱의 상태를 확인하는 데 도움이 되는 여러 모니터링, 디버깅, 성능 관리 도구와 긴밀히 통합되어 있으므로 앱 개선이 간편하게 이루어집니다.
- 프로덕션 환경에 문제가 있을 때 가장 먼저 살펴보는 것이 로그입니다. GKE 클러스터를 만들면 Cloud Logging과 Cloud Monitoring이 모두 기본적으로 사용 설정되므로 로그 확인에 도움이 됩니다. Cloud Logging을 사용하여 GKE 로그를 확인하는 방법과 사용 사례, 권장사항을 자세히 알아보려면 Kubernetes Engine에서 실행되는 앱에 로깅 사용을 참조하세요.
- 문제의 원인을 찾았다면 Cloud Logging 및 Cloud Monitoring을 사용하여 애플리케이션을 디버깅하는 방법도 알아보세요.