[GCP]GKE 차근 차근 알아보기 1탄 — GKE 개요

이정운 (Jungwoon Lee)
16 min readNov 24, 2018

안녕하세요 이정운 입니다.

정신 없이 바쁜 시간이 좀 지나가고 근질거리는 몸을 부여잡고, 이번에 공부도 할 겸 정리하고자 하는 부분은 Google cloud 의 관리형 kubernetes 서비스인 Google Kubernetes Engine(GKE) 입니다. Kubernetes 는 이미 잘 알고 계시겠지만 Container 를 위한 오픈소스 Orchestrator 로 이미 많은 분들이 관심을 가지고 있고 사용하고 있는 솔루션입니다. GKE 는 Kubernetes 를 쉽게 사용자가 활용할 수 있도록 관리형으로 제공하는 Google cloud 의 솔루션으로 하단과 같이 다양한 기능을 제공 가능합니다.

https://cloud.google.com/kubernetes-engine/

결국, GKE 는 Container 애플리케이션 배포를 위한 관리형 환경으로 이를 통해서 개발자 생산성, 리소스 효율성, 자동화된 작업, 오픈소스 유연성을 얻을 수 있으며 특히 Google 은 15년 이상 Container 로 운영 환경 작업을 실행해 왔으며 이러한 작업으로부터 얻은 노하우의 정수가 GKE 의 기반을 이루고 있습니다.

그렇다고 GKE 가 Kubernetes 환경을 모두 Google cloud 에서 관리형으로 제공하는 것은 아니고 운영환경에서 변화의 영역이 적은 Master Node 에 대한 완전 관리 서비스를 제공하며, 실제 서비스를 수행하는 Container 의 집합인 Pod 가 올라가서 운영되는 Worker Node 는 반 관리형(?)으로 설정만 하면 기본 Kubernetes 에 필요한 컴포넌트를 준비해둔 GCE(VM) 를 제공하여 개발자가 직접 Pod 를 올리거나 작업을 수행할 수 있도록 지원합니다.

https://cloud.google.com/solutions/distributed-load-testing-using-kubernetes

GKE 관련 이야기를 진행하다 보면 결국 Kubernetes 이야기가 많이 필요하겠지만 이미 하단과 같이 훌륭한 분들이 정리를 잘해주셔서 저는 가급적 Kubernetes 의 기본 내용은 제외하고 GKE 관점에서 이야기 진행을 해볼까 합니다. 따라서, Kubernetes 를 시작하는 분들은 하단의 블로그들을 먼저 살펴 보기를 권장드리며 기본적으로 Kubernetes 에 대한 기본 개념은 있는 분들을 대상으로 본 이야기는 진행하도록 하겠습니다.

Kubernetes #1 — 소개 — 조대협의 블로그
http://bcho.tistory.com/1255

Kubernetes Engine from scratch
https://medium.com/google-cloud/kubernetes-engine-from-scratch-2c2369c46841

늘 강조드리지만 저는 그렇게 창조적이거나 똑똑하지 않기 때문에 이번 강좌도 하단과 같은 좋은 자료를 기반으로 작성하였습니다.

Google Kubernetes Engine Documentation
https://cloud.google.com/kubernetes-engine/docs/

GKE Quickstart
https://cloud.google.com/kubernetes-engine/docs/quickstart

Creating VPC-native clusters using Alias IPs
https://cloud.google.com/kubernetes-engine/docs/how-to/alias-ips

Medium — GKE
https://medium.com/google-cloud/tagged/gke

Kubernetes in the Google Cloud
https://www.qwiklabs.com/quests/29?locale=en

그럼 “백문이 불여 일타!” 한번 시작해 보도록 하겠습니다.

#1) GKE cluster 생성 하기

가장 먼저 Google cloud 에서 GKE 를 생성하는 부분부터 이야기를 시작하고자 합니다. 설명도 없이 벌써 생성인가 생각하시는 분들도 있으실 수 있지만 GKE 는 굉장히 쉽게 생성할 수 있기 때문에 뒷 이야기를 보면 바로 그 이유를 알 수 있으실 것 입니다. Google cloud 의 관리콘솔에 가서 Kubernetes Engine 을 선택하면 하단과 같은 화면을 확인할 수 있으며 ‘create cluster’ 라는 메뉴를 통해서 GKE cluster 를 생성할 수 있습니다.

‘create cluster’ 메뉴를 클릭하면 하단과 같이 GKE cluster 생성 마법사가 나옵니다. 가장 먼저 왼쪽의 메뉴를 보면 여러 종류의 클러스터를 큰 카테고리로 선택 가능합니다. 해당 메뉴는 다양한 운영환경을 고려하여 그에 적합한 옵션들이 사전 선택된 템플릿으로 보면 되며 해당 카테고리를 선택하면 자동으로 해당 설정들이 오른쪽 세부 설정에 들어가게 됩니다. 예를 들어 GPU Accelerated Computing 이면 자동으로 노드에 사용되는 GCE(VM)에 GPU 가 자동 설정으로 추가 됩니다. 그렇다고 완벽히 고정된 템플릿은 아니라 가이드 정도이며 세부 설정은 필요한 경우 추가 변경 가능합니다.

우측의 세부 설정에는 GKE 를 Zonal 형태로 만들지 Regional 형태로 만들지 Location type 에 대한 설정 및 버전, Node pool 등을 지정할 수 있습니다. GKE 는 zone 이라는 Google cloud 의 데이터 센터에서 마스터 노드가 하나 존재하는 Zonal 형태가 있고 GKE 의 마스터 노드에 대한 고가용성을 추가하고자 한다면 Region 안의 여러 zone 별로 마스터를 두는 Regional 형태의 GKE cluster 를 선택할 수 있습니다. (Google cloud 의 Zone, Region 의 개념을 좀 더 자세히 알고 싶으신 분들은 링크를 참고하시기 바라겠습니다. — https://cloud.google.com/docs/geography-and-regions)

With Google Kubernetes Engine regional clusters, master nodes are now highly available
https://cloud.google.com/blog/products/gcp/with-google-kubernetes-engine-regional-clusters-master-nodes-are-now-highly-available

다음으로 Node pools 에 대한 설정입니다. Node pools 는 이름 그대로 Node 의 집합이며 Node 는 결국 GCE(VM) 이기 때문에 이미지 타입과 머신 타입등을 설정하게 되어 있습니다. 메뉴를 보시면 아시겠지만 어떤 GCE(CPU, Memory 등) 를 사용할지와 Node 개수만 넣어주면 간단하고 쉽게 설정을 완료할 수 있습니다. 또한, 하나가 아닌 여러 Node pools 를 만들어서 GKE 버전이나 GCE 머신 타입을 다르게 구성하여 다양한 환경을 위한 GCE 그룹을 운영하는 것도 가능합니다.

Cutting costs with Google Kubernetes Engine: using the cluster autoscaler and Preemptible VMs
https://cloud.google.com/blog/products/containers-kubernetes/cutting-costs-with-google-kubernetes-engine-using-the-cluster-autoscaler-and-preemptible-vms

그리고 필요하다고 하면 좀 더 유연하게 GKE cluster 의 Node pool 에 대한 Autoscaling 기능을 사용할 수도 있습니다. 즉, 요청에 따라서 Node 자체를 동적으로 늘리거나 줄일 수 있다는 의미입니다. (해당 옵션을 켜보시면 아시겠지만 최소/최대 node 수를 입력하는 화면이 나옵니다.)

Node pools 메뉴를 닫고 상세 메뉴에서 고급 옵션을 펼치면 GKE cluster 에 대한 세부 설정이 가능합니다. 여기서는 중요한 포인트 몇 가지만 살펴보도록 하겠습니다. 먼저 GKE 는 관리형 Kubernetes 서비스이기 때문에 귀찮으면서도 중요한 작업들은 자동화된 기능을 제공합니다. 그 중에 대표적인 기능이 Auto Upgrade 기능입니다. Kubernetes 는 많은 관심을 받고 빠르게 성장하고 있습니다. 그래서 업데이트가 중요한데 이를 매번 수동으로 업데이트 해야하는 고민을 없애주는 기능이 Auto Upgrade 기능입니다. 그리고 Maintenance windows 는 Auto upgrade 를 수행할 시간을 지정할 수 있는 기능입니다. (일반적으로 부하가 가장 적은 새벽으로 해두면 되겠죠. 또는 자동이 아닌 설정 변경을 통해서 수동으로 하실 수도 있습니다.)

다음으로 Network 에 VPC-native 기능에 대한 설정을 확인할 수 있는데 해당 기능은 타사의 관리형 Kubernetes 와 다르게 Google cloud 만이 제공할 수 있는 기능으로 별도의 NAT 없이도 독립적인 Kubernetes 의 네트워크 구조를 사용하는 GKE 를 다른 Google cloud 서비스와 바로 연동할 수 있도록 Google cloud 의 VPC 와 엮는 옵션입니다. 언급드린 것처럼 이를 enable 하면 추가 작업 없이 다양한 Google cloud 서비스와 VPC 를 통한 통신이 가능하므로 바로 internal IP 로 호출할 수 있습니다. (향후 이야기 진행을 위해서는 꼭, enable 하시기 바라겠습니다.)

또한, 별도 설치 작업없이 Network policy 설정을 바로 enable 가능하여 GKE cluster 에서 Project Calico 를 통해서 네트워크 정책을 적용하여 보다 유연하고 안전한 설정을 하실 수 있습니다. 그 뒤에 나오는 Network security 항목은 엔터프라이 환경에 적합하도록 보안을 추가해서 네트워크를 설정을 할 수 있는 기능으로 예를 들어 보안화된 엔터프라이즈 환경을 위해서 인터넷에서는 접근이 안되는 private cluster 로 만들거나 특정 IP 만 master node 에 접근하도록 허용하는 기능들에 대한 것으로 좀 더 자세한 내용이 궁금하신 분들은 하단의 블로그를 참고하시기 바라겠습니다.

Bringing enterprise network security controls to your Kubernetes clusters on GKE
https://cloud.google.com/blog/products/networking/bringing-enterprise-network-security-controls-to-your-kubernetes-clusters-on-gke?fbclid=IwAR2dUiOcb-wVDnaiXHfzMmwsIf_u8nGav6lZDf-Uykq-ecVv5DOP_w5UZ9M

언급한 것처럼 다양한 보안에 대한 옵션을 선택할 수 있으며 추가적으로 Stackdriver logging 과 monitoring 을 바로 연동할 수 있는 옵션도 포함되어 있습니다. 저 개인적으로는 GKE 를 테스트해보면서 다른 타사 솔루션 대비 가장 나은점 중의 하나는 Stackdriver 연동이 바로 가능해서 전체 Google cloud 의 다른 솔루션을 로깅/모니터링하는 것과 동일하게 GKE 도 로깅/모니터링 할 수 있으며 통합 대시보드 형태로 모니터링 하거나 관리할 수 있다는 점 입니다. (추가로 Beta 이긴 하지만 새로운 Kubernetes 통합 모니터링 기능도 사용할 수 있습니다.)

그리고 마지막으로 원하신다면 GKE cluster 의 node 에 머신러닝을 위해서 GPU 가 아니라 TPU 를 사용할 수도 있습니다. (GKE cluster 환경을 이용해서 ML 작업을 하신다면 유용하겠죠.)

이렇게 설정을 하고 완료하면 하단과 같이 GKE cluster 가 아주 쉽게 5분내로 만들어지는 것을 확인할 수 있습니다.

어때요 처음 이야기 드린 것처럼 아주 쉽게 시작하실 수 있죠? ^^&

#2) GKE cluster 살펴보기

그럼 이제 생성되어진 GKE cluster 를 하나씩 살펴보는 시간을 가지도록 하겠습니다. 생성된 GKE cluster 의 이름을 클릭하면 하단과 같이 상세 정보를 확인할 수 있습니다. Master node 버전이라던가 사이즈등 설정에 넣었던 정보를 여기서 한눈에 확인할 수 있습니다. 당연히 Node pools 에 대한 상세 정보도 하단에서 확인 가능합니다.

Storage 탭을 클릭하면 GKE cluster 에 할당된 storage 를 확인할 수 있으며 기본 형태로 생성했다면 standard 라는 이름으로 PD(Persistent Disk) 가 할당되어 있는 것을 확인할 수 있습니다.

Nodes 탭을 클릭하면 Node 명과 기본적인 정보들을 확인할 수 있으며 이전에 GKE cluster 를 만들때 기본 사이즈 3으로 설정했기 때문에 3개의 Node 를 확인가능 합니다.

각 Node 를 클릭하면 좀 더 상세한 모니터링 정보와 Pods 정보를 하단과 같이 확인 가능합니다.

당연히 여기서 추가로 Pod 이름을 클릭하면 Pod 의 상세 정보 및 모니터링 화면을 확인할 수 있습니다.

이러한 GKE cluster 의 모니터링 정보는 Stackdriver Monitoring 이 훨씬 상세하고 잘 나오며 통합 대시보드로 연동도 가능하기 때문에 해당 도구를 추천 드립니다.

특히 이전에 잠깐 언급드린 새로운 Kubernetes 통합 모니터링 기능 Beta 기능을 enable 했다면 Resources > Kubernetes 를 통해서 하단과 같이 보다 직관적이며 통합적인 GKE 모니터링 기능을 사용할 수 있습니다.

다음으로 Workloads 메뉴를 선택하면 이름 그대로 GKE cluster 의 Deployment 나 Job 과 같은 워크로드를 확인할 수 있습니다.

그 밑에 있는 Applications 메뉴는 GKE cluster 를 조금 더 쉽게 활용하게 할 수도 있고 엔터프라이즈 환경에 보다 적합하게 보이는데 Marketplace 에서 파트너를 통해서 제공되는 다양한 Kubernetes 애플리케이션을 설치해서 바로 사용할 수 있는 메뉴입니다.

‘Deploy from Marketplace’ 버튼을 클릭하면 일반적인 3rd party 솔루션을 Google cloud 에 바로 설치할 수 있는 Marketplace 와 동일하지만 Kubernetes 환경인 GKE cluster 에 클릭만으로 설치해서 사용할 수 있는 Kubernetes 애플리케이션들을 확인하실 수 있습니다.

Services 는 메뉴명 그대로 service 와 service type, endpoints 등을 일목요연하게 확인할 수 있습니다.

Configuration 메뉴는 Container 의 환경 설정 정보등이 담긴 config map 과 secret 정보를 확인할 수 있습니다.

마지막으로 Storage 메뉴는 Kubernetes 의 Persistent volume claims 와 storage classes 를 확인 가능합니다.

#3) GKE cluster 에 CLI 접근해보기

관리 콘솔을 통해서 GKE cluster 를 생성해보고 다양하게 살펴봤으니 이제는 마무리로 개발자들이 많이 사용하는 방식인 CLI 로 접근해보고 살펴보는 시간을 가져보도록 하겠습니다. 이를 가장 쉽게 하는 방법은 GKE cluster 메뉴에서 Connect 메뉴를 선택한 다음 ‘Run in Cloud Shell’ 을 클릭하면 됩니다.

그러면 브라우저 화면에서 Google cloud 의 장점인 Cloud shell 이 실행된 후 자동으로 GKE credential 을 받아오는 명령이 수행되며 그 이후부터는 편하게 kubectl 명령을 이용해서 GKE cluster 답게 Kubernetes 의 모든 액션을 수행할 수 있습니다.

어때요? 간단하게 GKE cluster 를 잘 살펴보셨나요? 보시면 아시겠지만 GKE 는 관리형 Kubernetes 기능에 충실하게 개발자나 사용자가 쉽게 Kubernetes 를 활용하고 운영할 수 있는 다양한 기능을 제공하고 있습니다. 기 언급한 것처럼 오늘 준비한 이야기는 GKE cluster 를 살펴보는 것 이었으며 이정도면 개략적으로 살펴보는 것은 충분한 것 같아 준비한 이야기는 여기까지로 마무리 하도록 하며 다음에는 조금 더 자세한 이야기로 찾아오도록 하겠습니다. 그럼 이만 휘리릭~~~

* Disclaimer: 본 글의 작성자는 Google 직원이지만 Google cloud 를 공부하는 한 개인으로서 작성된 글입니다. 본 글의 내용, 입장은 Google 을 대변하지 않으며 Google 이 해당 콘텐츠를 보장하지 않습니다.

--

--

이정운 (Jungwoon Lee)

Technical engineer who dreams better future. (These thoughts are my own personal opinions, and do not reflect or represent Google’s opinions or plans.)