안녕하세요. 휴먼스케이프의 Software Engineer David입니다.
클라우드 서비스에서 Kubernetes 환경을 직접 구성하려면 많은 번거로움이 있습니다. 그래서 AWS의 EKS(Amazon Elastic Kubernetes Service), Azure의 AKS(Azure Kubernetes Service), Google Cloud의 GKE(Google Kubernetes Engine)와 같이 완전 관리형 쿠버네티스 서비스를 제공하고있습니다.
오늘은 그 중 GKE에 대해 알아보겠습니다.
특징
ID 및 액세스 관리
Google 계정 및 역할 권한(IAM)으로 클러스터의 액세스 권한을 관리합니다.
보안 및 규정 준수
750명 이상의 전문가로 구성된 Google 보안팀이 GKE를 지원하며 HIPAA 및 PCI DSS 규정을 모두 준수합니다.
통합 로깅 및 모니터링
간단한 체크박스 구성으로 Cloud Logging과 Cloud Monitoring을 사용 설정하면 애플리케이션 실행 상태를 손쉽게 확인할 수 있습니다.
GKE 어플리케이션에 Newrelic을 연결하면 Cloud Logging과 Cloud Monitoring을 기반으로 그래프를 보여줍니다.
클러스터 옵션
가용성, 버전 안정성, 격리, 워크로드의 pod 트래픽 요구사항을 고려하여 알맞은 클러스터를 선택할 수 있습니다.
Google Cloud Engine의 기술적 차별성 상속(GKE 차별성)
Custom type 지원(필요한 코어, 메모리 지정 가능), 네트워크: Core 당 2Gbps 지원(최대 32Gbps), 최신 Intel Cascade Lake 칩 기반으로 3.8Ghz All cores turbo 제공
자동 확장
CPU, 메모리 등 리소스 사용량을 기준으로 애플리케이션 배포를 자동으로 확장하거나 축소합니다.
클러스터 — 노드 — 파드 — 컨테이너
워크로드
HPA(Horizintal Pod Autoscaling): CPU에 따라 파드를 늘려줍니다.
VPA(Vertical Pod Autoscaling): 사용률 감시해 파드를 키워줍니다.
인프라
CA(Cluster Autoscaler): 파드를 받을 노드를 늘려줍니다. 반대로 파드가 줄어드면 빼주기도 합니다.
NAP(Node Auto Provisioning): 실제 노드풀를 추가해줍니다.
자동 업그레이드
Kubernetes의 최신 출시 버전을 활용하여 클러스터를 자동으로 최신 상태로 유지합니다. GKE 내에서 Kubernetes 출시 업데이트가 신속하게 제공됩니다.
자동 복구
자동 복구가 사용 설정된 경우 노드가 상태 확인에 실패하면 GKE가 그 노드의 복구 프로세스를 시작합니다.
리소스 한도
Kubernetes를 사용하면 각 컨테이너에 필요한 CPU 및 메모리(RAM) 크기를 지정할 수 있으므로 클러스터 내에서 효과적으로 워크로드를 구성할 수 있습니다.
컨테이너 격리(GKE 차별성)
GKE에서 컨테이너화된 워크로드 간의 2차 방어 레이어에 GKE Sandbox(오픈소스 gVisor 기반)를 사용하여 워크로드 보안을 개선할 수 있습니다.
샌드박스(sandbox)란 외부로부터 들어온 프로그램이 보호된 영역에서 동작해 시스템이 부정하게 조작되는 것을 막는 보안 형태
gVisor는 각 컨테이너에 독립적인 운영체제 커널을 제공하여 작동, 응용 프로그램은 호스트 커널이 아닌 gVisor 커널이 제공하는 가상화 된 환경과 상호 작용()
스테이트풀(Stateful) 애플리케이션 지원
GKE는 12팩터 앱만을 위한 서비스가 아닙니다. 영구 스토리지를 컨테이너에 연결하거나 데이터베이스 전체를 호스팅할 수도 있습니다.
Docker 이미지 지원
GKE는 일반적인 Docker 컨테이너 형식을 지원합니다.
완전 관리형
GKE 클러스터는 Google 사이트 안정성 엔지니어(SRE)가 완전히 관리하므로 클러스터의 가용성이 보장되고 최신 상태로 유지됩니다.
하이브리드 네트워킹(GKE 차별성)
클러스터에 사용할 IP 주소 범위를 예약하여 Google Cloud VPN을 통해 클러스터 IP를 비공개 네트워크 IP와 동시에 사용할 수 있습니다.
컨테이너에 맞게 빌드된 OS(GKE 차별성)
GKE는 Google에서 빌드하고 관리하는 안전한 OS인 Container-Optimized OS에서 실행됩니다.
Container-Optimized OS 란?
Google의 Container-Optimized OS는 Docker 컨테이너를 실행하는 데 최적화된 Compute Engine VM용 운영체제 이미지입니다. Container-Optimized OS는 Google이 유지관리하며 오픈소스 Chromium OS 프로젝트를 기반으로 합니다. Container-Optimized OS를 사용하면 Google Cloud Platform에서 Docker 컨테이너를 빠르고 효율적으로 안전하게 가져올 수 있습니다.
다음과 같은 이점을 제공합니다.
컨테이너 즉시 실행: Container-Optimized OS 인스턴스는 Docker 런타임 및
cloud-init
가 미리 설치된 상태로 제공됩니다. Container-Optimized OS 인스턴스를 사용하면 호스트에서 설정 작업을 할 필요 없이 VM을 생성하는 동시에 Docker 컨테이너를 가져올 수 있습니다. 도커를 레이어 없이 containerd 바로 실행 가능합니다.공격에 노출되는 영역 축소: Container-Optimized OS는 공간을 적게 차지하므로 인스턴스에서 공격에 노출될 만한 영역이 줄어듭니다.
기본적으로 잠김: Container-Optimized OS 인스턴스에는 잠긴 방화벽과 기타 보안 설정이 기본적으로 포함됩니다.
자동 업데이트: Container-Optimized OS 인스턴스는 주간 업데이트를 백그라운드에서 자동으로 다운로드하도록 구성되며, 재부팅만 하면 최신 업데이트를 사용할 수 있습니다.
제한사항
Container-Optimized OS는 다른 운영체제에서 흔히 제공하는 몇 가지 일반적인 기능을 제한적으로만 지원하거나 전혀 지원하지 않습니다.
1. Container-Optimized OS에는 패키지 관리자가 포함되어 있지 않으므로 소프트웨어 패키지를 인스턴스에 곧바로 설치할 수 없습니다. 하지만 CoreOS 도구 상자를 사용하면 격리된 컨테이너에서 디버깅 및 관리 도구를 설치하고 실행할 수 있습니다.
2. Container-Optimized OS는 컨테이너화되지 않은 애플리케이션의 실행을 지원하지 않습니다.
3. Container-Optimized OS 커널은 잠겨 있으므로 타사 커널 모듈이나 드라이버를 설치할 수 없습니다.
4. Container-Optimized OS는 Google Cloud Platform 환경 외부에서 지원되지 않습니다.
비공개 Container Registry(GKE 차별성)
Google Container Registry와 통합하면 비공개 Docker 이미지의 저장과 액세스가 간편해집니다.
GCR의 Vulnerability Scanning으로 이미지 스캔 수행
신속하고 일관성 있는 빌드
Cloud Build를 사용하면 인증을 설정할 필요 없이 GKE에서 안정적으로 컨테이너를 배포할 수 있습니다.
워크로드 이동성, 온프레미스, 클라우드
GKE는 Certified Kubernetes를 실행하여 여러 클라우드 및 온프레미스에서 다른 Kubernetes 플랫폼으로 워크로드를 이동할 수 있습니다.
GPU 및 TPU 지원
GKE는 GPU와 TPU를 지원하여 ML, GPGPU, HPC, 특수 하드웨어 가속기를 활용하는 기타 워크로드를 쉽게 실행할 수 있습니다.
기본 제공 대시보드
Cloud Console은 프로젝트의 클러스터 및 리소스에 유용한 대시보드를 제공합니다. 이 대시보드를 사용하여 클러스터의 리소스를 보고, 검사하고, 관리하고, 삭제할 수 있습니다.
선점형 VM
일괄 작업과 내결함성 워크로드를 실행하도록 설계된 저비용의 단기 인스턴스입니다. 선점형 VM을 사용하면 일반 VM과 동일한 성능과 기능을 유지하면서 비용을 최대 80%까지 절감할 수 있습니다.
영구 디스크 지원
컨테이너 인스턴스를 위한 우수한 내구성의 고성능 블록 스토리지입니다. 데이터는 무결성, 중단 없이 스토리지 크기를 조정할 수 있는 유연성, 자동 암호화를 보장하기 위해 중복 저장됩니다. 영구 디스크는 HDD 또는 SSD 형식으로 만들 수 있습니다. 또한 영구 디스크의 스냅샷을 생성하고 이 스냅샷으로 새 영구 디스크를 만들 수 있습니다.
로컬 SSD 지원
GKE는 항상 암호화되는 로컬 솔리드 스테이트 드라이브(SSD) 블록 스토리지를 제공합니다. 로컬 SSD는 가상 머신 인스턴스를 호스팅하는 서버에 실제로 연결되므로 영구 디스크와 비교할 때 입력/출력 초당 작업 수(IOPS)가 매우 높고 지연 시간이 매우 짧습니다.
글로벌 부하 분산
글로벌 부하 분산 기술을 통해 수신 요청을 여러 리전의 인스턴스 풀 전반으로 분산하므로 저렴한 비용으로 성능, 처리량, 가용성을 극대화할 수 있습니다.
Linux 및 Windows 지원
GKE는 Linux와 Windows 워크로드 모두 완전히 지원하므로 Windows 서버 및 Linux 노드를 둘 다 실행할 수 있습니다.
하이브리드 및 멀티 클라우드 지원
자체 데이터 센터에서 Kubernetes 및 클라우드 기술을 활용할 수 있습니다. Anthos GKE를 통해 Google에서 검증한 빠르고 간단한 관리형 설치 및 업그레이드로 GKE 환경을 조성하세요.
서버리스 컨테이너
모든 인프라 관리를 추상화하면서 스테이트리스(Stateless) 서버리스 컨테이너를 실행하고 Cloud Run으로 자동 확장할 수 있습니다.
사용량 측정
Kubernetes 클러스터에 대해 세분화된 가시성을 제공합니다. 네임스페이스와 라벨로 분류된 GKE 클러스터의 리소스 사용량을 확인하고 사용량의 원인이 되는 의미 있는 항목을 파악할 수 있습니다.
출시 채널
출시 채널은 클러스터의 안정성 요구사항과 워크로드에 따라 특정 클러스터가 수신하는 자동 업데이트를 더 세부적으로 제어합니다. Rapid, Regular, Stable 중 하나를 선택할 수 있습니다. 출시 주기와 워크로드 유형은 각각 다릅니다.
소프트웨어 공급망 보안
컨테이너 분석 기능으로 컨테이너 이미지에 사용되는 인프라 구성요소 및 패키지 보안을 확인, 적용, 강화합니다.
초당 청구
Google은 초 단위로 비용을 청구합니다. 사용한 컴퓨팅 시간에 대해서만 비용을 지불하면 됩니다.
GKE의 운영 환경 설정, 배포는 Yaml로 구성되어있습니다. 기존에 구성되어있는 Yaml이 있다면 개발자는 같은 환경을 서버를 빠르게 구축할 수 있습니다.
GKE로 구성된 Prod 서버를 운영 중인 서비스의 Stage 서버를 만든다고 가정하면 아래와 같이 두 가지 방법으로 구성할 수 있습니다.
Prod / Stage 클러스터를 각각 구성
- Prod 서버 구성 이해
- Prod 서버와 같은 사양의 GKE 클러스터 생성
- Prod 서버와 같은 환경 설정(secret, env 설정)
- Prod 서버의 deployment.yaml을 Stage 서버 클러스터에 배포
- Prod 서버의 service.yaml을 Stage 서버 클러스터에 배포
- Google Cloud Resistry 구성 후 Docker 이미지 업로드
- Stage 서버에 이미지 배포
Prod / Stage 를 단일 클러스터에서 운영(추후 업데이트)
감사합니다.
[출처]
https://www.inflearn.com/questions/16184
Get to know us better!
Join our official channels below.
Telegram(EN) : t.me/Humanscape
KakaoTalk(KR) : open.kakao.com/o/gqbUQEM
Website : humanscape.io
Medium : medium.com/humanscape-ico
Facebook : www.facebook.com/humanscape
Twitter : twitter.com/Humanscape_io
Reddit : https://www.reddit.com/r/Humanscape_official
Bitcointalk announcement : https://bit.ly/2rVsP4T
Email : support@humanscape.io