* 클라우드 스터디잼 쿠버네티스 입문반 과정을 수강하면서 정리한 내용입니다.
Overview
GKE(Google Kubernetes Engine)에서는 Google 인프라를 사용하여 컨테이너화된 애플리케이션을 배포, 관리 및 확장할 수 있는 관리형 환경을 제공합니다. Kubernetes Engine 환경은 컨테이너 클러스터를 형성하도록 그룹화된 여러 머신(구체적으로 Compute Engine 인스턴스)으로 구성되어 있습니다. 이번 실습에서는 GKE를 사용하여 직접 컨테이너를 생성하고 애플리케이션을 배포해 봅니다.
Cluster orchestration with Google Kubernetes Engine
GKE(Google Kubernetes Engine) 클러스터는 Kubernetes 오픈소스 클러스터 관리 시스템을 기반으로 합니다. Kubernetes는 컨테이너 클러스터와 상호작용할 수 있는 메커니즘을 제공합니다. Kubernetes 명령어와 리소스를 사용하면 애플리케이션을 배포 및 관리, 관리 작업 수행, 정책 설정, 배포된 워크로드의 상태를 모니터링할 수 있습니다.
Kubernetes는 널리 쓰이는 Google 서비스와 동일한 설계 원칙을 따르고 있기 때문에 자동 관리, 애플리케이션 컨테이너의 모니터링 및 활성 여부 조사, 자동 확장, 순차적 업데이트와 같은 이점을 그대로 누릴 수 있습니다. 10년 이상 컨테이너로 프로덕션 워크로드를 처리해 온 Google의 경험이 녹아든 기술을 활용하여 컨테이너 클러스터에서 애플리케이션을 실행할 수 있습니다.
Kubernetes on Google Cloud
GKE 클러스터를 실행하면 Google Cloud의 고급 클러스터 관리 기능을 활용할 수 있다는 장점이 있습니다. 예를 들면 다음과 같습니다.
- Compute Engine 인스턴스를 위한 부하 분산
- 노드 풀로 클러스터 안에 하위 노드 집합을 지정하여 유연성 강화
- 클러스터에서 노드 인스턴스 개수 자동 확장
- 클러스터에서 노드 소프트웨어 자동 업그레이드
- 노드 자동 복구로 노드 상태 및 가용성을 유지 관리
- Cloud Monitoring을 통한 로깅 및 모니터링으로 클러스터 현황에 대한 가시성 확보
Kubernetes 관련 기본 사항을 배웠으므로 이제 GKE를 사용하여 컨테이너화된 애플리케이션을 30분 이내에 배포하는 방법을 알아봅니다. 실습 환경을 설정하려면 아래 단계를 따르세요.
Task 1. Set a default compute zone
compute zone 이란 대략적으로 클러스터와 리소스가 존재하는 지역적인 위치를 의미합니다. 예를 들어 us-central1-a는 us-central1 리전에 속한 영역입니다.
compute zone의 기본값을 us-central1-a로 설정하려면 Cloud Shell에서 새 세션을 시작하고 다음 명령어를 실행합니다.
▼ 명령어
gcloud config set compute/zone us-central1-a
▼ 아웃풋
Updated property [compute/zone].
Task 2. Create a GKE cluster
클러스터는 1개 이상의 클러스터 마스터 머신과 노드라는 다수의 worker 머신으로 구성됩니다. 노드란 클러스터를 구성하기 위해 필요한 Kubernetes 프로세스를 실행하는 Compute Engine VM(가상 머신) 인스턴스입니다.
참고: 클러스터 이름은 문자로 시작하고 영숫자로 끝나야 하며 40자를 초과할 수 없습니다.
클러스터를 생성하려면 다음 명령어를 실행합니다. 이때 [CLUSTER-NAME]은 선택한 클러스터 이름(예: my-cluster)으로 바꿉니다.
▼ 명령어
gcloud container clusters create [CLUSTER-NAME]
표시되는 경고는 모두 무시해도 괜찮습니다. 클러스터 생성이 완료되는 데는 몇 분이 걸릴 수 있습니다.
▼ 아웃풋
NAME: my-cluster
LOCATION: us-central1-a
MASTER_VERSION: 1.22.8-gke.202
MASTER_IP: 34.67.240.12
MACHINE_TYPE: e2-medium
NODE_VERSION: 1.22.8-gke.202
NUM_NODES: 3
STATUS: RUNNING
Task 3. Get authentication credentials for the cluster
클러스터를 만든 후 클러스터와 상호작용하려면 사용자 인증 정보가 필요합니다.
클러스터를 인증하려면 다음 명령어를 실행합니다. 이때 [CLUSTER-NAME]은 클러스터 이름으로 바꿉니다.
▼ 명령어
gcloud container clusters get-credentials [CLUSTER-NAME]
▼ 아웃풋
Fetching cluster endpoint and auth data.
kubeconfig entry generated for my-cluster.
Task 4. Deploy an application to the cluster
이제 클러스터에 컨테이너화된 애플리케이션을 배포할 수 있습니다. 이번 실습에서는 hello-app을 클러스터에서 실행해봅시다.
GKE는 Kubernetes 객체를 사용하여 클러스터의 리소스를 만들고 관리합니다. 웹 서버와 같은 stateless 애플리케이션을 배포할 때는 Kubernetes에서 배포 객체를 사용합니다. 서비스 객체는 인터넷에서 애플리케이션에 액세스하기 위한 규칙과 로드 밸런싱을 정의합니다.
1. Deployment 생성
hello-app 컨테이너 이미지에서 새 Deployment hello-server를 생성하려면 다음 kubectl create 명령어를 실행합니다.
▼ 명령어
kubectl create deployment hello-server --image=gcr.io/google-samples/hello-app:1.0
▼ 아웃풋
deployment.apps/hello-server created
이 Kubernetes 명령어를 사용하면 hello-server를 나타내는 Deployment 객체가 생성됩니다. 여기서 --image는 배포할 컨테이너 이미지를 지정하는 옵션입니다. 해당 명령어는 Container Registry bucket에서 예시 이미지를 가져옵니다. gcr.io/google-samples/hello-app:1.0은 가져올 특정 이미지 버전을 나타냅니다. 버전이 지정되지 않은 경우 최신 버전이 사용됩니다.
2. Kubernetes Service 생성
애플리케이션을 외부 트래픽에 노출할 수 있는 Kubernetes 리소스인 Kubernetes Service를 생성하려면 다음 kubectl expose 명령어를 실행합니다.
▼ 명령어
kubectl expose deployment hello-server --type=LoadBalancer --port 8080
이 명령어에서
- --port를 통해 컨테이너가 노출될 포트가 지정됩니다.
- type="LoadBalancer"는 컨테이너의 Compute Engine 로드밸런서를 생성합니다.
▼ 아웃풋
service/hello-server exposed
3. Inspect Service
hello-server 서비스를 검사하려면 kubectl get을 실행합니다.
▼ 명령어
kubectl get service
▼ 아웃풋
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
hello-server loadBalancer 10.39.244.36 35.202.234.26 8080:31991/TCP 65s
kubernetes ClusterIP 10.39.240.1 433/TCP 5m13s
참고: 외부 IP 주소가 생성되는 데는 1분 정도 걸릴 수 있습니다 EXTERNAL-IP 열이 대기중 상태이면 위 명령어를 다시 실행하세요.
4. 웹브라우저에서 애플리케이션 보기
웹브라우저에서 애플리케이션을 보려면 새 탭을 열고 다음 주소를 입력합니다. 여기서 [EXTERNAL IP]는 hello-server의 EXTERNAL-IP로 바꿉니다.
▼ 명령어
http://[EXTERNAL-IP]:8080
▼ 아웃풋
Task 5. Deleting the cluster
클러스터를 삭제하려면 다음 명령어를 실행합니다.
▼ 명령어
gcloud container clusters delete [CLUSTER-NAME]
메시지가 표시되면 Y를 입력하여 확인합니다.
클러스터를 삭제하는 데는 몇 분이 걸릴 수 있습니다. 삭제된 GKE 클러스터에 대한 자세한 내용은 문서를 참고하세요.
Congratulations!
Kubernetes Engine에 컨테이너화된 애플리케이션을 배포했습니다.
Next steps / Learn more
This lab is part of a series of labs called Qwik Starts. These labs are designed to give you some experience with the many features available with Google Cloud. Search for "Qwik Starts" in the Google Cloud Skill Boost catalog to find the next lab you'd like to take!
'MLOps > Doker & Kubernetes' 카테고리의 다른 글
Udemy CKA 강의 정리 0: 목차 (0) | 2022.12.29 |
---|---|
[클라우드 스터디잼] Continuous Delivery with Jenkins in Kubernetes Engine (0) | 2022.07.18 |
[클라우드 스터디잼] Managing Deployments Using Kubernetes Engine (0) | 2022.07.12 |
[클라우드 스터디잼] Orchestrating the Cloud with Kubernetes (0) | 2022.07.09 |
[클라우드 스터디잼] Introduction to Docker (0) | 2022.07.07 |
댓글