빠른 시작

이 빠른 시작에서는 Google Kubernetes Engine으로 컨테이너화된 애플리케이션을 배포하는 방법을 보여줍니다.

이 페이지의 단계를 따르거나 Google Cloud 교육 실습으로 이 빠른 시작을 사용할 수 있습니다.

실습에 사용해보기

시작하기 전에

다음 단계에 따라 Kubernetes Engine API를 사용 설정합니다.
  1. Google Cloud Platform 콘솔에서 Kubernetes Engine 페이지로 이동합니다.
  2. 프로젝트를 만들거나 선택합니다.
  3. API 및 관련 서비스가 사용 설정될 때까지 기다립니다. 몇 분 정도 걸릴 수 있습니다.
  4. 프로젝트에 결제가 사용 설정되어 있는지 확인하세요.

    결제 사용 설정 방법 알아보기

셸 선택

이 빠른 시작을 완료하기 위해서는 Google Cloud Shell 또는 로컬 셸을 사용할 수 있습니다.

Google Cloud Shell은 GCP(Google Cloud Platform)에 호스팅된 리소스를 관리하기 위한 셸 환경입니다. Cloud Shell에는 gcloudkubectl 명령줄 도구가 미리 설치되어 있습니다. gcloud는 GCP를 위한 기본 명령줄 인터페이스를 제공하고, kubectl은 Kubernetes 클러스터에 대해 명령어를 실행하기 위한 명령줄 인터페이스를 제공합니다.

로컬 셸을 사용하길 원하는 경우에는 해당 환경에 gcloudkubectl 명령줄 도구를 설치해야 합니다.

Cloud Shell

Cloud Shell을 시작하려면 다음 단계를 수행하세요.

  1. Google Cloud Platform 콘솔로 이동합니다.

    Google Cloud Platform 콘솔

  2. 콘솔의 오른쪽 상단에서 Google Cloud Shell 활성화 버튼 을 클릭합니다.

Cloud Shell 세션이 콘솔 아래쪽 프레임 안에서 열립니다. 이 셸을 사용하여 gcloudkubectl 명령어를 실행합니다.

로컬 셸

gcloudkubectl을 설치하려면 다음 단계를 수행하세요.

  1. gcloud 명령줄 도구가 포함된 Google Cloud SDK를 설치합니다.
  2. Cloud SDK를 설치한 후 다음 명령어를 실행하여 kubectl 명령줄 도구를 설치합니다.

    gcloud components install kubectl

gcloud 기본 설정 구성

시작하기 전에 gcloud를 사용해서 2개의 기본 설정인 기본 프로젝트컴퓨팅 영역을 구성해야 합니다.

프로젝트에는 고유 식별자인 프로젝트 ID가 있습니다. 프로젝트를 처음 만들 때 자동 생성되는 프로젝트 ID를 사용하거나 사용자 고유의 ID를 만들 수 있습니다.

컴퓨팅 영역은 클러스터 및 해당 리소스가 존재하는 대략적인 지역적 위치입니다. 예를 들어 us-west1-aus-west 지역의 영역입니다.

이러한 기본 설정을 구성하면 gcloud 명령어를 더 쉽게 실행할 수 있습니다. gcloud에서는 사용자가 작업하려는 프로젝트 및 컴퓨팅 영역을 지정해야 합니다. 또한 --project, --zone, --cluster와 같은 작업 플래그를 gcloud 명령어에 전달하여 이러한 설정을 지정하거나 기본 설정을 재정의할 수 있습니다.

기본 프로젝트 및 컴퓨팅 영역을 구성한 후 GKE 리소스를 만들면 해당 프로젝트 및 영역에 리소스가 자동으로 생성됩니다.

기본 프로젝트 설정

기본 프로젝트를 설정하려면 Cloud Shell에서 다음 명령어를 실행하세요.

gcloud config set project [PROJECT_ID]

[PROJECT_ID]를 프로젝트 ID로 바꿉니다.

기본 컴퓨팅 영역 설정

기본 컴퓨팅 영역을 설정하려면 다음 명령어를 실행합니다.

gcloud config set compute/zone [COMPUTE_ZONE]

여기서 [COMPUTE_ZONE]은 원하는 지리적 위치의 컴퓨팅 영역입니다(예: us-west1-a).

GKE 클러스터 만들기

클러스터는 하나 이상의 클러스터 마스터 머신노드라는 다수의 작업자 머신으로 구성됩니다. 노드는 클러스터를 구성하기 위해 필요한 Kubernetes 프로세스를 실행하는 Compute Engine VM(가상 머신) 인스턴스입니다. 클러스터에 애플리케이션을 배포하고 애플리케이션은 노드에서 실행됩니다.

클러스터를 만들려면 다음 명령어를 실행하세요.

gcloud container clusters create [CLUSTER_NAME]

여기서 [CLUSTER_NAME]은 선택한 클러스터 이름입니다.

클러스터의 사용자 인증 정보 얻기

클러스터를 만든 후 클러스터와 상호작용하려면 사용자 인증 정보를 얻어야 합니다.

클러스터를 인증하려면 다음 명령어를 실행합니다.

gcloud container clusters get-credentials [CLUSTER_NAME]

이 명령어는 생성된 클러스터를 사용하도록 kubectl을 구성합니다.

클러스터에 애플리케이션 배포

클러스터가 생성되었으므로 이제 컨테이너화된 애플리케이션을 배포할 수 있습니다. 이 빠른 시작에서는 예시 웹 애플리케이션인 hello-app을 배포할 수 있습니다.

GKE는 Kubernetes 객체를 사용하여 클러스터의 리소스를 만들고 관리합니다. Kubernetes는 웹 서버와 같은 상태 비추적 애플리케이션을 배포하기 위한 배포 객체를 제공합니다. 서비스 객체는 인터넷에서 애플리케이션에 액세스하기 위한 규칙과 부하 분산을 정의합니다.

배포 만들기

클러스터에서 hello-app을 실행하려면 다음 명령어를 실행하세요.

kubectl run hello-server --image gcr.io/google-samples/hello-app:1.0 --port 8080

이 Kubernetes 명령어 kubectl runhello-server라는 새로운 배포를 만듭니다. 이 배포의 포드는 해당 컨테이너에서 hello-app 이미지를 실행합니다.

이 명령어에서

  • --image는 배포할 컨테이너 이미지를 지정합니다. 이 경우에는 명령어가 Google Container Registry 버킷 gcr.io/google-samples/hello-app에서 예시 이미지를 가져옵니다. :1.0은 가져올 특정 이미지 버전을 나타냅니다. 버전이 지정되지 않은 경우, 최신 버전이 사용됩니다.
  • --port는 컨테이너가 노출되는 포트를 지정합니다.

배포 노출

애플리케이션을 배포한 후에는 사용자가 액세스할 수 있도록 이를 인터넷에 노출해야 합니다. 애플리케이션을 외부 트래픽에 노출하는 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의 부하 분산기 가격 책정에 따라 요금이 청구됩니다.

애플리케이션 조사 및 보기

  1. kubectl get을 실행하여 hello-server 서비스를 조사합니다.

    kubectl get service hello-server

    이 명령어 출력에서 EXTERNAL-IP 열의 서비스 외부 IP 주소를 복사합니다.

  2. 외부 IP 주소와 노출된 포트를 사용하여 웹 브라우저에서 애플리케이션을 확인합니다.

    http://[EXTERNAL_IP]/

지금까지 GKE에 컨테이너화된 웹 애플리케이션을 배포했습니다.

삭제

이 빠른 시작에서 사용한 리소스 비용이 GCP 계정에 청구되지 않도록 다음을 수행합니다.

  1. kubectl delete를 실행하여 애플리케이션의 서비스를 삭제합니다.

    kubectl delete service hello-server

    그러면 배포를 노출할 때 만든 Compute Engine 부하 분산기가 삭제됩니다.

  2. gcloud container clusters delete를 실행하여 클러스터를 삭제합니다.

    gcloud container clusters delete [CLUSTER_NAME]

선택사항: hello-app 코드 검토

hello-appmain.goDockerfile의 두 파일로 구성된 간단한 웹 서버 애플리케이션입니다.

hello-appDocker 컨테이너 이미지로 패키징됩니다. 컨테이너 이미지는 Google Container Registry와 같은 Docker 이미지 레지스트리에 저장됩니다. gcr.io/google-samples/hello-app이라는 Container Registry 버킷에 hello-app을 호스팅합니다.

main.go

main.goGo 프로그래밍 언어로 작성된 웹 서버 구현입니다. 서버는 모든 HTTP 요청에 'Hello, world!'라는 메시지로 응답합니다.

package main

import (
	"fmt"
	"log"
	"net/http"
	"os"
)

func main() {
	// use PORT environment variable, or default to 8080
	port := "8080"
	if fromEnv := os.Getenv("PORT"); fromEnv != "" {
		port = fromEnv
	}

	// register hello function to handle all requests
	server := http.NewServeMux()
	server.HandleFunc("/", hello)

	// start the web server on port and accept requests
	log.Printf("Server listening on port %s", port)
	err := http.ListenAndServe(":"+port, server)
	log.Fatal(err)
}

// hello responds to the request with a plain-text "Hello, world" message.
func hello(w http.ResponseWriter, r *http.Request) {
	log.Printf("Serving request: %s", r.URL.Path)
	host, _ := os.Hostname()
	fmt.Fprintf(w, "Hello, world!\n")
	fmt.Fprintf(w, "Version: 1.0.0\n")
	fmt.Fprintf(w, "Hostname: %s\n", host)
}

Dockerfile

Dockerfile은 모든 리소스와 종속 항목을 비롯하여 Docker가 빌드할 이미지를 설명하고 앱이 노출해야 하는 네트워크 포트를 지정합니다. 이 파일의 작동 방식에 관한 자세한 내용은 Docker 문서의 Dockerfile 참조를 참조하세요.

FROM golang:1.8-alpine
ADD . /go/src/hello-app
RUN go install hello-app

FROM alpine:latest
COPY --from=0 /go/bin/hello-app .
ENV PORT 8080
CMD ["./hello-app"]

다음 단계

이 페이지가 도움이 되었나요? 평가를 부탁드립니다.

다음에 대한 의견 보내기...

Kubernetes Engine 문서