GKE 클러스터에 앱 배포
이 빠른 시작에서는 Google Kubernetes Engine(GKE) 클러스터에 간단한 웹 서버 컨테이너식 애플리케이션을 배포합니다. 클러스터를 만드는 방법과 사용자가 액세스할 수 있도록 애플리케이션을 클러스터에 배포하는 방법을 설명합니다.
이 빠른 시작에서는 대상 독자가 Kubernetes에 대한 기본적인 지식이 있다고 가정합니다.
시작하기 전에
다음 단계에 따라 Kubernetes Engine API를 사용 설정합니다.- Google Cloud 계정에 로그인합니다. Google Cloud를 처음 사용하는 경우 계정을 만들고 Google 제품의 실제 성능을 평가해 보세요. 신규 고객에게는 워크로드를 실행, 테스트, 배포하는 데 사용할 수 있는 $300의 무료 크레딧이 제공됩니다.
-
Google Cloud Console의 프로젝트 선택기 페이지에서 Google Cloud 프로젝트를 선택하거나 만듭니다.
-
Google Cloud 프로젝트에 결제가 사용 설정되어 있는지 확인합니다. 프로젝트에 결제가 사용 설정되어 있는지 확인하는 방법을 알아보세요.
-
API Artifact Registry and Google Kubernetes Engine 사용 설정
-
Google Cloud Console의 프로젝트 선택기 페이지에서 Google Cloud 프로젝트를 선택하거나 만듭니다.
-
Google Cloud 프로젝트에 결제가 사용 설정되어 있는지 확인합니다. 프로젝트에 결제가 사용 설정되어 있는지 확인하는 방법을 알아보세요.
-
API Artifact Registry and Google Kubernetes Engine 사용 설정
Cloud Shell 실행
이 튜토리얼에서는 Google Cloud에서 호스팅되는 리소스를 관리하기 위한 셸 환경인 Cloud Shell을 사용합니다.
Cloud Shell에는 Google Cloud CLI 및 kubectl 명령줄 도구가 사전 설치되어 있습니다. gcloud 도구는 Google Cloud의 기본 명령줄 인터페이스를 제공하며, kubectl
은 Kubernetes 클러스터를 대상으로 명령어를 실행할 수 있는 기본 명령줄 인터페이스를 제공합니다.
Cloud Shell 시작:
Google Cloud 콘솔로 이동합니다.
콘솔의 오른쪽 상단에서 Cloud Shell 활성화 버튼을 클릭합니다.
콘솔 하단의 프레임에서 Cloud Shell 세션이 열립니다.
이 셸을 사용하여 gcloud
및 kubectl
명령어를 실행합니다.
명령어를 실행하기 전에 다음 명령어를 사용하여 Google Cloud CLI에서 기본 프로젝트를 설정합니다.
gcloud config set project PROJECT_ID
여기서 PROJECT_ID
를 프로젝트 ID로 바꿉니다.
GKE 클러스터 만들기
클러스터는 클러스터 제어 영역 머신 최소 한 개 이상과 노드라는 작업자 머신 여러 개로 구성됩니다. 노드는 클러스터를 구성하기 위해 필요한 Kubernetes 프로세스를 실행하는 Compute Engine 가상 머신(VM) 인스턴스입니다. 클러스터에 애플리케이션을 배포하고 애플리케이션은 노드에서 실행됩니다.
hello-cluster
라는 Autopilot 클러스터를 만듭니다.
gcloud container clusters create-auto hello-cluster \
--region=COMPUTE_REGION
COMPUTE_REGION
을 Compute Engine 리전(예:us-west1
)으로 바꿉니다.
클러스터의 사용자 인증 정보 가져오기
클러스터를 만든 후 클러스터와 상호작용하려면 사용자 인증 정보를 가져와야 합니다.
gcloud container clusters get-credentials hello-cluster \
--region COMPUTE_REGION
이 명령어는 생성한 클러스터를 사용하도록 kubectl
을 구성합니다.
클러스터에 애플리케이션 배포
클러스터가 생성되었으므로 이제 컨테이너식 애플리케이션을 배포할 수 있습니다. 이 빠른 시작에서는 예시 웹 애플리케이션(hello-app
)을 배포 할 수 있습니다.
GKE는 Kubernetes 객체를 사용하여 클러스터의 리소스를 만들고 관리합니다. Kubernetes는 웹 서버와 같은 스테이트리스(Stateless) 애플리케이션을 배포하기 위한 배포 객체를 제공합니다. 서비스 객체는 인터넷에서 애플리케이션에 액세스하기 위한 규칙과 부하 분산을 정의합니다.
배포 만들기
클러스터에서 hello-app
을 실행하려면 다음 명령어를 실행하여 애플리케이션을 배포해야 합니다.
kubectl create deployment hello-server \
--image=us-docker.pkg.dev/google-samples/containers/gke/hello-app:1.0
이 Kubernetes 명령어 kubectl create deployment
는 hello-server
라는 배포를 만듭니다. 배포의 포드는 hello-app
컨테이너 이미지를 실행합니다.
이 명령어에서
--image
는 배포할 컨테이너 이미지를 지정합니다. 이 경우 명령어는 Artifact Registry 저장소us-docker.pkg.dev/google-samples/containers/gke/hello-app
에서 예시 이미지를 가져옵니다.:1.0
은 가져올 특정 이미지 버전을 나타냅니다. 버전을 지정하지 않으면 기본 태그latest
의 이미지가 사용됩니다.
배포 노출
애플리케이션을 배포한 후에는 사용자가 액세스할 수 있도록 이를 인터넷에 노출해야 합니다. 애플리케이션을 외부 트래픽에 노출하는 Kubernetes 리소스인 서비스를 만들어 애플리케이션을 노출할 수 있습니다.
애플리케이션을 노출하려면 다음 kubectl expose
명령어를 실행합니다.
kubectl expose deployment hello-server --type LoadBalancer --port 80 --target-port 8080
--type LoadBalancer
플래그를 전달하면 컨테이너의 Compute Engine 부하 분산기가 생성됩니다. --port
플래그는 인터넷에 공개 포트 80을 초기화하고 --target-port
플래그는 트래픽을 애플리케이션의 포트 8080으로 라우팅합니다.
부하 분산기는 Compute Engine의 부하 분산기 가격 책정에 따라 요금이 청구됩니다.
애플리케이션 검사 및 보기
kubectl get pods
를 사용하여 실행 중인 포드를 검사합니다.kubectl get pods
클러스터에서 하나의
hello-server
포드가 실행 중임을 볼 수 있을 것입니다.kubectl get service
를 사용하여hello-server
서비스를 검사합니다.kubectl get service hello-server
이 명령어의 출력에서
EXTERNAL-IP
열에 있는 서비스의 외부 IP 주소를 복사합니다.외부 IP 주소와 노출된 포트를 사용하여 웹브라우저에서 애플리케이션을 확인합니다.
http://EXTERNAL_IP
GKE에 컨테이너식 웹 애플리케이션을 배포했습니다.
삭제
이 페이지에서 사용한 리소스 비용이 Google Cloud 계정에 청구되지 않도록 하려면 다음 단계를 수행합니다.
kubectl delete
를 실행하여 애플리케이션의 서비스를 삭제합니다.kubectl delete service hello-server
이 명령어는 배포를 노출할 때 만든 Compute Engine 부하 분산기를 삭제합니다.
gcloud container clusters delete
를 실행하여 클러스터를 삭제합니다.gcloud container clusters delete hello-cluster \ --region COMPUTE_REGION
선택사항: hello-app
코드 검토
hello-app
은 간단한 웹 서버 애플리케이션으로 main.go
와 Dockerfile
, 두 파일로 구성됩니다.
hello-app
은 Docker 컨테이너 이미지로 패키징됩니다. 컨테이너 이미지는 Artifact Registry와 같은 Docker 이미지 레지스트리에 저장됩니다. hello-app
은 us-docker.pkg.dev/google-samples/containers/gke/hello-app
의 Artifact Registry 저장소에서 호스팅됩니다.
main.go
main.go
는 Go 프로그래밍 언어로 작성된 웹 서버 구현입니다.
서버는 모든 HTTP 요청에 'Hello, world!'라는 메시지로 응답합니다.
Dockerfile
Dockerfile
은 모든 리소스와 종속 항목을 비롯하여 Docker가 빌드할 이미지를 설명하고 앱이 노출해야 하는 네트워크 포트를 지정합니다. 이 파일의 작동 방식에 대한 자세한 내용은 Docker 문서의 Dockerfile 참조를 확인하세요.
다음 단계
- 클러스터 만드는 방법 자세히 알아보기
- Kubernetes에 대해 알아보기
kubectl
참조 문서 읽어보기- 간단한 웹 서버 애플리케이션을 패키징, 호스팅, 배포하는 방법 알아보기
- Redis 및 PHP로 Guestbook 애플리케이션 만들기
- 영구 디스크 및 Cloud SQL로 GKE에서 WordPress 배포하기
- VS Code용 Cloud Code 또는 IntelliJ용 Cloud Code로 Kubernetes 애플리케이션 배포
직접 사용해 보기
Google Cloud를 처음 사용하는 경우 계정을 만들어 실제 시나리오에서 GKE의 성능을 평가할 수 있습니다. 신규 고객에게는 워크로드를 실행, 테스트, 배포하는 데 사용할 수 있는 $300의 무료 크레딧이 제공됩니다.
GKE 무료로 사용해 보기