기본 컴퓨팅 영역 설정
컴퓨팅 영역이란 클러스터와 리소스가 존재하는 대략적인 지역적 위치입니다. 예를 들어 us-central1-a는 us-central1 리전의 영역입니다.
Cloud Shell에서 새 세션을 시작하고, 다음과 같은 명령어를 실행하여 기본 컴퓨팅 영역을 us-central1-a로 설정합니다.
$ gcloud config set compute/zone us-central1-a
Kubernetes Engine 환경은 컨테이너 클러스터를 형성하도록 그룹화된 여러 머신(구체적으로 Google Compute Engine 인스턴스)으로 구성되어 있습니다.
Kubernetes Engine을 사용한 클러스터 조정
Kubernetes Engine 클러스터는 Kubernetes 오픈소스 클러스터 관리 시스템을 기반으로 합니다. Kubernetes는 컨테이너 클러스터와 상호작용할 수 있는 메커니즘을 제공합니다. Kubernetes 명령어와 리소스를 사용하면 애플리케이션을 배포 및 관리하고 관리 작업을 수행하고 정책을 설정하며 배포된 작업의 상태를 모니터링할 수 있습니다.
Kubernetes는 널리 쓰이는 Google 서비스와 동일한 설계 원칙을 따르고 있어 자동 관리, 애플리케이션 컨테이너의 모니터링 및 활성 여부 조사, 자동 확장, 순차적 업데이트와 같은 이점을 그대로 누릴 수 있습니다. 10년 이상 컨테이너를 통해 프로덕션 작업을 실행해 온 Google의 경험이 녹아든 기술을 활용하여 컨테이너 클러스터에서 애플리케이션을 실행할 수 있습니다.
Google Cloud Platform에서 사용하는 Kubernetes
Kubernetes Engine 클러스터를 실행하면 Google Cloud Platform이 제공하는 고급 클러스터 관리 기술의 이점도 활용할 수 있습니다. 예를 들면 다음과 같습니다.
- Compute Engine 인스턴스를 위한 부하 분산
- 노드 풀로 클러스터 안에 하위 노드 집합을 지정하여 유연성 강화
- 클러스터에서 노드 인스턴스 개수의 자동 확장
- 클러스터에서 노드 소프트웨어의 자동 업그레이드
- 노드 자동 복구로 노드 상태 및 가용성 유지 관리
- Stackdriver를 통한 로깅 및 모니터링으로 클러스터 현황에 대한 가시성 확보
Kubernetes Engine 클러스터 만들기
클러스터는 하나 이상의 클러스터 마스터 머신과 노드라는 다수의 작업자 머신으로 구성됩니다. 노드란 클러스터를 구성하기 위해 필요한 Kubernetes 프로세스를 실행하는 Compute Engine VM(가상 머신) 인스턴스입니다.
클러스터를 생성하려면 다음과 같은 명령어를 실행합니다. 이때 [CLUSTER-NAME]을 내가 선택한 클러스터 이름으로 대체해야 합니다(예: my-cluster). 클러스터 이름은 문자로 시작하고 영숫자로 끝나야 하며 40자를 초과할 수 없습니다.
$ gcloud container clusters create [CLUSTER-NAME]
클러스터의 사용자 인증 정보 얻기
클러스터를 만든 후 클러스터와 상호작용하려면 사용자 인증 정보를 얻어야 합니다.
클러스터를 인증하려면 다음과 같은 명령어를 실행합니다. 이때 [CLUSTER-NAME]을 내 클러스터 이름으로 대체해야 합니다.
클러스터에 애플리케이션 배포하기
클러스터가 생성되었으므로 이제 컨테이너화된 애플리케이션을 배포할 수 있습니다. 이번 실습에서는 hello-app을 클러스터에서 실행합니다.
Kubernetes Engine에서는 Kubernetes 객체를 사용해 클러스터의 리소스를 만들고 관리합니다. Kubernetes에서는 웹 서버와 같은 스테이트리스(Stateless) 애플리케이션의 배포를 위한 배포 객체를 제공합니다. 서비스 객체에서는 인터넷에서 애플리케이션에 액세스하기 위한 규칙 및 부하 분산 방식을 정의합니다.
Cloud Shell에서 다음과 같은 kubectl create 명령어를 실행하여 hello-app 컨테이너 이미지에서 새로운 배포 hello-server를 생성합니다.
1. kubectl 설치 (cloud shell에서는 설치 안해도 됨.)
$ sudo apt-get install kubectl
2. hello-server 배포
$ kubectl create deployment hello-server --image=gcr.io/google-samples/hello-app:1.0
이 Kubernetes 명령어를 사용하면 hello-server을 나타내는 배포 객체가 생성됩니다. 이 명령어에서 --image를 통해 배포할 컨테이너 이미지가 지정됩니다. 이 경우에는 명령어를 통해 Google Container Registry 버킷에서 예시 이미지를 가져옵니다. gcr.io/google-samples/hello-app:1.0은 가져올 이미지 버전을 지정합니다. 버전이 지정되지 않은 경우 최신 버전이 사용됩니다.
이제 다음과 같은 kubectl expose 명령어를 실행하여 Kubernetes 서비스를 생성합니다. 이 서비스는 애플리케이션을 외부 트래픽에 노출할 수 있게 해주는 Kubernetes 리소스입니다.
$ kubectl expose deployment hello-server --type=LoadBalancer --port 8080
이 명령에서는:
- --port를 통해 컨테이너가 노출될 포트가 지정됩니다.
- type="LoadBalancer"를 전달하면 컨테이너의 Compute Engine 부하 분산기가 생성됩니다.
kubectl get을 실행하여 hello-server 서비스를 검사합니다.
$ kubectl get service
참고: 외부 IP 주소가 생성되는 데는 몇 분이 걸릴 수 있습니다. EXTERNAL-IP 열이 아직 출력되지 않았으면 위 명령어를 다시 실행하세요.
웹브라우저에서 서비스 작동여부 확인
클러스터를 삭제하려면 다음과 같은 명령어를 실행합니다.
$ gcloud container clusters delete [CLUSTER-NAME]
* 메시지가 표시되면 Y를 입력하여 확인합니다. 클러스터를 삭제하는 데는 몇 분이 걸릴 수 있습니다.
'Cloud > GCP' 카테고리의 다른 글
[GCP] Kubectl 컨텍스트 전환 방법 (0) | 2020.02.12 |
---|---|
[GCP] 쿠버네티스를 통한 클라우드 조정 (1) | 2020.02.10 |
[GCP] 로컬 PC에서 VM SSH 접속하기 (0) | 2020.02.03 |
[GCP]Firebase와 GCP 빌링 통합 (0) | 2019.12.23 |
[GCP] 외부 계정 - 조직없는 프로젝트 조직으로 이전하기 (0) | 2019.12.17 |