Print
카테고리: [ Cloud Computing & MSA ]
조회수: 3149

GKE는 완전 관리형 쿠버네티스 엔진으로서, 마스터노드에 대한 고가용성을 보장하고 클러스터에 대한 오토 스케일링과 오토 힐링, Stackdriver를 통한 로깅/모니터링, GPU/TPU지원, 워크로드 및 네트워크 보안 제공 등 쿠버네티스를 운용하기에 편리한 기능들을 제공한다. 

GKE의 생성은 클러스터를 생성하여 클러스터의 네트워크, 보안을 설정하고 Worker노드 풀을 정의하여 실제 Pod가 구동될 노드의 사양을 정의한다. 

 

1. 클러스터 생성


실제 Pod가 구동될 Worker Node를 정의하고 클러스터를 구성한다.

좌상단 메뉴 →  Kubernetes Engine →  Clusters →  Create Cluster

 

1.1. Cluster Basics

Location Type/Master Version 선택

GKE 클러스터는 Zone/Region단위로 배포가 가능하다. 가용성을 고려하여 선택한다. (공식적으로 Regional Cluster 선호)

Kubernetes 엔진 버전을 선택한다. Release Channel을 선택하면 추후에 자동으로 Node에 대한 업데이트가 진행되며, Static을 선택하면 유저가 수동으로 노드 업데이트를 진행해야 한다. Release Channel은 베타 서비스 이므로 안정성을 고려하여 선택한다. 

 

2. Node Pools 정의


GKE는 여러개의 Node Pool을 정의하여 사용할 수 있다. 각각의 Pool 마다 인스턴스 타입, size, 오토스케일링, 라벨링 등의 설정을 통해 pod 배포 전략을 수립할 수 있다. 

 

2.1. Node 기본 정의

Size

Pool을 추가할 때 기본적으로 기동할 Worker Node 수를 정의할 수 있다. Enable Autoscaling을 통해 오토스케일링 설정이 가능하다. 

Regional을 선택한 경우, Zone마다 생성할 Node 숫자를 입력하게 되므로, zone 수 만큼 곱한 Node가 생성됨을 유의한다. 

Automation

위에서 Kubernetes의 버전을 Release Channel을 통해 선택하면, 자동적으로 auto-upgrade/auto-repair가 선택되어있다. 이 옵션들은 쿠버네티스의 새 버전이 나오면 자동으로 Node Pool에 속한 워커의 버전을 업그레이드 해 주며, Node의 health를 체크하여 상태를 회복시켜준다. 

Enable Surge Upgrade를 선택하면 Node의 업그레이드가 진행되는 동안, 가용성을 위해 추가적인 노드(Max Surge 한계)가 일시적으로 생성되어 Max Unavailable 이상의 활성 Node를 확보해준다. 

 

2.2. Nodes 옵션

Nodes

Worker Node의 VM 타입 선택할 수 있다. Boot Disk/VM Security/Management 등을 설정 가능하다.

Machine Configuration

Node의 OS Image로 Container-Optimized OS와 Ubuntu 옵션이 있으며, 추가적으로 containerd 런타임을 선택 가능하다. 

Node의 Machine Type을 지정할 수 있으며, Compute Engine과 동일하게 지정 가능하다. 필요한 목적에 맞게 Configuration을 진행한다. 

CPU Platform으로 Intel의 platform 중 선택이 가능하다. 추가적으로 NVIDIA Tesla 모델 중 GPU선택이 가능하다. 

Boot Disk의 type(ssd/pv)과 size를 선택할 수 있다. Preemptible nodes는 가용성이 보장되지 않는 저렴한 node 옵션이다. 

Networking

Maximum pods per node를 지정할 수 있다. Kubernetes default로 110으로 지정되어 있으며, Node의 성능 문제(주로 Memory)로 스케쥴링 제한을 위해 설정할 수 있다. Node 안에서 Pod의 address range가 /24로 지정되어 있으므로 8-110 사이의 pod 수만 제한할 수 있다. 

Network Tag를 설정하여 VPC/Subnet 단위에서 firewall rules를 적용할 수 있다. 필요한 tag를 부착한다. 

 

2.3. Node Security

Service Account

GKE에 사용할 서비스 계정을 선택한다. 지정한 서비스 계정이 Node의 서비스 계정이 된다. 

Integrity Monitoring(무결성 모니터링)

무결성 모니터링을 사용하면 Stackdriver 보고서를 사용하여 보안 노드의 런타임 부팅 무결성을 모니터링및 확인 가능

Secure Booting(안전한 부팅)

보안 부팅을 사용하면 부팅 수준 및 커널 수준의 멀웨어와 루트킷으로부터 노드를 보호

 

2.4. Node Metadata

Kubernetes Labels

kubernetes labels는 key-value 구조로, 이 Node Pool에 존재하는 모든 Node에 label이 적용된다.

Node Taints(beta)

Taint를 적용하면 Node에 스케쥴링 옵션을 지정할 수 있다. 적용한 key-value에 대한 Toleration이 없는 경우 아래의 옵션에 따라 스케쥴링이 제한된다.

GCE Instance Metadata

Node로 동작하는 GCE Instance의 metadata GKE 1.12버전부터 GCE 메타데이터의 엔드포인트가 사용 불가하다.

 

3. Cluster 정의


3.1. Automation

클러스터 단위의 자동화에 대해 정의한다.

Enable Maintenance Window

사용 설정 하면 정해진 시간에만 Node의 변경을 수행한다. Maintenance exclusions를 설정하여 Maintenence Window에서 제외할 시점을 설정할 수 있다.

Enable Vertical Pod Autoscaling

활성화 시 Node에 구동중인 컨테이너의 CPU와 Memory 사용량을 분석하여 Node에서 자동으로 컨테이너의 CPU/Memory Request를 조정한다.

Enable node auto-provisioning

활성화하면 자동으로 새로운 Node Pool을 프로비저닝 한다. 하단에서 리소스를 정의할 수 있다. 비활성화 하면 사용자가 생성한 Node Pool 집합에서만 새로운 Node를 생성한다.

Availability/Networking/Security and Additional Features

Availability

리전 안에서 추가로 노드를 배포할 존 선택 가능

Networking

GKE가 위치할 VPC 및 네트워크 선택이 가능하다. 

Pod에 부여할 Cluster IP 대역과 Node의 최대 Pod 수, Service에 부여할 IP 주소 범위를 설정할 수 있다.

 

3.2. Networking

Public Cluster

기본 설정으로, 네트워크 안에 있다면 Node에 접근이 가능하다. 

Private Cluster(영구)

클러스터를 비공개로 전환하여 엑세스를 제한하는 옵션이다. 

Network/Node subnet

Cluster가 생성될 네트워크/서브넷을 지정한다. 

Access master using its external IP address(영구)

비공개 클러스터에서 마스터에 엑세스 하기 위해 접근 가능한 IP 대역을 설정할 수 있다. CloudShell을 통해 접근하기 위해서는 CloudShell의 IP대역 또한 추가해야 한다. 

Advanced networking options

Enable VPC-native traffic routing(영구)

Alias IP를 활용하여 GCP 서비스와 통합되며, 더욱 안전한 네트워킹을 지원한다. 비공개 클러스터를 사용 설정 한 경우 자동으로 활성화된다. 

Automatically create secondary ranges

Cluster에 의해 사용될 IP 대역을 GKE가 추가적으로 설정하는 옵션이다. Pod의 IP 대역과, 서비스로 노출될 IP 대역을 지정할 수 있다. 지정한 서브넷이 충분한 IP 대역을 가지고 있지 않으면 자동으로 활성화된다. 

Enable Intranode Visibility

활성화하면 Pod-to-Pod 트래픽에 가시성이 생긴다. 이를 통해 VPC flow logging 또는 다른 트래픽 관련 VPC 기능을 사용할 수 있다. 

Enable HTTP Load Balancing

HTTP 부하 분산을 하기 위해 GKE에 Ingress를 설정하고 Google Cloud Load Balancer를 반드시 사용해야 한다. 활성화하면 Node에 Ingress Controller가 설치된다. 

Enable master authorized networks

활성화하면 신뢰할 수 없는 GCP 외부 IP로부터 클러스터에 접근이 불가해진다. Authorized network를 추가적으로 설정하여 접근 가능한 IP 대역을 설정할 수 있다. 

Enable Network Policy

클러스터 관리자가 Pod 레벨에서 네트워크 권한을 지정할 수 있다. 사용하기 위해서 Calico가 강제된다.

 

3.3. Security

기본 설정

Binary Authorization 사용 설정

Kubernetes 클러스터에 배포되는 이미지에 대해 Policy Control을 할 수 있다. 

Enable Shilded GKE Nodes

클러스터에 join하는 Node에 대해 암호화를 적용한다. 1.18버전부터 디폴트로 설정된다. 

Enable Workload Identity

작업 부하 ID(Workload Identity) 사용설정(베타)

Enable Google Groups for RBAC

RBAC용 Google 그룹스 사용 설정(베타)

Legacy Security Options

Enable legacy authorization

이전 승인 사용 설정

Enable Application-layer Secrets Encryption

애플리케이션 레이어의 쿠버네티스 시크릿에 대한 암호화 설정

Enable basic authentication

기본 인증 사용 설정

Issue a client certificate

클라이언트 인증서 발급 (영구적)

보안 GKE 노드 사용 설정 (사용 중지 가능/Node 리부팅 필요)

 

3.4. Metadata

Cluster에 대한 Description/Label을 설정할 수 있다. 

 

3.5. Features

Cluster에 대한 Description/Label을 설정할 수 있다. 

Serverless

Enable Cloud Run for Anthos

Stateless app과 function을 Cloud Run을 통해 배포할 수 있다. 활성화하면 Cloud Run이 배포될 수 있도록 기저의 리소스에 대한 관리와 스케일링을 진행한다. 

활성화 하기 위해서 Machine Type이 2vCPU 이상이어야 한다. 

Telemetry

Stackdriver와 관련된 설정이다. 

Legacy Stackdriver/GKE용 Stackdriver에 대해 선택 가능하다.

기타 Feature에 대한 설정

클라우드 TPU 사용 설정(영구)

머신러닝 가속을 위한 Cloud TPU 사용 설정

Enable Kubernetes alpha features in this cluster

현재 버전의 kubernetes의 alpha feature에 대한 사용 여부 설정

Master의 version이 Release Channel로 설정되어 있는 경우 활성화할 수 없다. 

GKE 사용 미터링 허용

클러스터의 리소스 사용량을 네임스페이스와 라벨에 따라 분류한다. 활성화하기 위해서 BigQuery 데이터셋이 필요하며, GKE에서 해당 데이터셋을 사용할 수 있도록 설정하는 것이 필요하다. Network Egress와 Resource Consumption에 대해 미터링이 가능하다. 

Istio 사용 설정(베타)

쿠버네티스용 서비스 메시, 사용 설정시 클러스터에 자동으로 설치된다. mTLS 설정으로 Permissive와 Strict를 선택할 수 있다. Permissive를 선택할 경우, 서비스가 mTLS와 HTTP 트래픽 모두 수용 가능하다. Strict를 사용한 경우 mTLS통신이 강제된다. 

Enable Application Manager(베타)

애플리케이션의 라이프싸이클을 관리하는 GKE 컨트롤러인 Application Manager를 설정한다. 

GitOps 측면에서 사용이 권장된다. 

Enable GCP Compute Persistent Disk CSI Driver(베타)

Compute Engine Persistent Disk CSI Driver를 자동으로 배포하고 관리한다.