arrow_back

Kubernetes 기본사항 v1.6

로그인 가입
지식을 테스트하고 커뮤니티와 공유하기
done
700개 이상의 실무형 실습, 기술 배지, 과정에 액세스

Kubernetes 기본사항 v1.6

실습 3시간 universal_currency_alt 크레딧 5개 show_chart 입문
info 이 실습에는 학습을 지원하는 AI 도구가 통합되어 있을 수 있습니다.
지식을 테스트하고 커뮤니티와 공유하기
done
700개 이상의 실무형 실습, 기술 배지, 과정에 액세스

개요

이 실습에서는 다음을 수행하는 방법에 대해 알아봅니다.

  • Google Kubernetes Engine을 사용하여 Kubernetes 프로비저닝
  • kubectl을 사용하여 Docker 컨테이너 배포 및 관리
  • Kubernetes 배포 및 서비스를 통해 애플리케이션을 마이크로서비스로 분할

Kubernetes Engine과 Kubernetes API를 사용하여 애플리케이션을 배포, 관리 및 업그레이드할 수 있습니다. 'app'이라는 예제 애플리케이션을 사용하여 실습을 완료해보세요.

설정

1단계

각 실습에서는 정해진 기간 동안 새 Google Cloud 프로젝트와 리소스 집합이 무료로 제공됩니다.

  1. 시크릿 창을 사용하여 Qwiklabs에 로그인합니다.

  2. 실습 사용 가능 시간(예: 1:15:00)을 참고하여 해당 시간 내에 완료합니다.
    일시중지 기능은 없습니다. 필요한 경우 다시 시작할 수 있지만 처음부터 시작해야 합니다.

  3. 준비가 되면 실습 시작을 클릭합니다.

  4. 실습 사용자 인증 정보(사용자 이름비밀번호)를 기록해 두세요. Google Cloud Console에 로그인합니다.

  5. Google Console 열기를 클릭합니다.

  6. 다른 계정 사용을 클릭한 다음, 안내 메시지에 실습에 대한 사용자 인증 정보를 복사하여 붙여넣습니다.
    다른 사용자 인증 정보를 사용하는 경우 오류가 발생하거나 요금이 부과됩니다.

  7. 약관에 동의하고 리소스 복구 페이지를 건너뜁니다.

2단계

다음 API가 Cloud Platform Console에서 사용 설정되어 있는지 확인합니다.

  • Kubernetes Engine API
  • Container Registry API

탐색 메뉴(탐색 메뉴)에서 API 및 서비스를 클릭합니다.

아래로 스크롤하여 API가 사용 설정되어 있는지 확인합니다.

API가 누락된 경우 상단의 API 및 서비스 사용 설정을 클릭하고, API를 이름으로 검색하여 해당 프로젝트에서 사용하도록 설정합니다.

3단계

Google Cloud Shell 활성화하기

Google Cloud Shell은 다양한 개발 도구가 탑재된 가상 머신으로, 5GB의 영구 홈 디렉터리를 제공하며 Google Cloud에서 실행됩니다.

Google Cloud Shell을 사용하면 명령줄을 통해 Google Cloud 리소스에 액세스할 수 있습니다.

  1. Cloud 콘솔의 오른쪽 상단 툴바에서 'Cloud Shell 열기' 버튼을 클릭합니다.

    강조 표시된 Cloud Shell 아이콘

  2. 계속을 클릭합니다.

환경을 프로비저닝하고 연결하는 데 몇 분 정도 소요됩니다. 연결되면 사용자가 미리 인증되어 프로젝트가 PROJECT_ID로 설정됩니다. 예:

Cloud Shell 터미널에 강조 표시된 프로젝트 ID

gcloud는 Google Cloud의 명령줄 도구입니다. Cloud Shell에 사전 설치되어 있으며 명령줄 자동 완성을 지원합니다.

  • 다음 명령어를 사용하여 사용 중인 계정 이름을 나열할 수 있습니다.
gcloud auth list

출력:

Credentialed accounts: - @.com (active)

출력 예시:

Credentialed accounts: - google1623327_student@qwiklabs.net
  • 다음 명령어를 사용하여 프로젝트 ID를 나열할 수 있습니다.
gcloud config list project

출력:

[core] project =

출력 예시:

[core] project = qwiklabs-gcp-44776a13dea667a6 참고: gcloud 전체 문서는 gcloud CLI 개요 가이드를 참조하세요.

4단계

Git 저장소에서 샘플 코드를 가져옵니다.

git clone https://github.com/googlecodelabs/orchestrate-with-kubernetes.git

5단계

앱 레이아웃을 검토합니다.

cd orchestrate-with-kubernetes/kubernetes

ls

다음과 같은 구조가 표시됩니다.

deployments/

Deployment manifests

nginx/

nginx config files

pods/

pod manifests

services/

Services manifests

tls/

TLS certificates

cleanup.sh

Cleanup script

코드를 가져왔으므로 이제 Kubernetes를 사용해 보겠습니다.

간단한 Kubernetes 데모

Kubernetes 클러스터 시작하기

1단계

영역을 프로젝트 기본 영역으로 정의합니다. 이렇게 하면 gcloud 명령어에 --zone 매개변수를 지정하지 않아도 됩니다.

gcloud config set compute/zone us-central1-a

Cloud Shell에서 다음 명령어를 실행하여 5개의 노드를 실행하는 bootcamp라는 Kubernetes 클러스터를 시작합니다.

gcloud container clusters create bootcamp --num-nodes 5 --scopes "https://www.googleapis.com/auth/projecthosting,storage-rw"

scopes 인수는 나중에 사용할 프로젝트 호스팅 및 Google Cloud Storage API에 대한 액세스 권한을 제공합니다.

내 진행 상황 확인하기를 클릭하여 목표를 확인합니다. 현재 목표는 Kubernetes 클러스터를 만드는 것입니다.

2단계

클러스터가 생성되면 kubectl version 명령어를 사용하여 Kubernetes의 설치 버전을 확인합니다.

kubectl version

3단계

kubectl cluster-info를 사용하여 클러스터에 관해 자세히 알아봅니다.

kubectl cluster-info

4단계

Cloud Platform Console에서 실행 중인 노드를 확인합니다.

탐색 메뉴를 열고 Compute Engine > VM 인스턴스로 이동합니다.

Bash 완성(선택사항)

Kubernetes에는 자동 완성 기능이 기본으로 포함되어 있습니다. kubectl completion 명령어와 내장된 source 명령어를 사용하면 이 기능을 설정할 수 있습니다.

1단계

다음 명령어를 실행합니다.

source <(kubectl completion bash)

2단계

을 눌러 사용 가능한 명령어 목록을 표시합니다.

다음 예시를 시도해봅니다.

kubectl <TAB><TAB>

35350b93c86e21bc.png

명령어를 부분 입력한 후 완성할 수도 있습니다.

kubectl co<TAB><TAB>

439b36f031f3e4ed.png

이 기능을 통해 kubectl의 사용이 더욱 쉬워집니다.

컨테이너 실행 및 배포

Kubernetes를 시작하는 가장 쉬운 방법은 kubectl create deployment 명령어를 사용하는 것입니다.

1단계

kubectl create deployment을 사용하여 nginx 컨테이너의 인스턴스 하나를 실행합니다.

kubectl create deployment nginx --image=nginx:1.10.0

2단계

kubectl get pods 명령어를 사용하여 nginx 컨테이너가 실행되고 있는 pod를 확인합니다.

kubectl get pods

3단계

kubectl expose 명령어를 사용하여 nginx 컨테이너를 Kubernetes 외부에 노출시킵니다.

kubectl expose deployment nginx --port 80 --type LoadBalancer

4단계

kubectl get 명령어를 사용하여 새 서비스를 확인합니다.

kubectl get services

nginx 컨테이너를 원격으로 테스트하고 접속하는 데 사용할 수 있는 외부 IP가 표시됩니다.

5단계

kubectl scale 명령어를 사용하여 서비스에서 실행되고 있는 백엔드 애플리케이션(pod)의 수를 늘립니다.

kubectl scale deployment nginx --replicas 3

이는 트래픽이 증가하는 웹 애플리케이션의 작업 부하를 늘리고 싶을 때 유용합니다.

6단계

pod를 한 번 더 가져와서 Kubernetes에서 pod 수를 업데이트했는지 확인합니다.

kubectl get pods

7단계

kubectl get services 명령어를 다시 사용하여 외부 IP 주소가 변경되지 않았는지 확인합니다.

kubectl get services

8단계

curl 명령어에 외부 IP 주소를 사용하여 데모 애플리케이션을 테스트합니다.

curl http://<External IP>:80

Kubernetes에서는 kubectl run, exposescale 명령어를 통해 바로 사용할 수 있는 간편한 워크플로를 지원합니다.

삭제

다음 명령어를 실행하여 nginx를 삭제합니다.

kubectl delete deployment nginx
kubectl delete service nginx

Kubernetes를 간단하게 둘러보았으니 이제 각 구성요소와 추상화에 대해 자세히 알아보겠습니다.

Pod

pod에 대해 자세히 알아보겠습니다.

pod 만들기

pod 구성 파일을 사용하여 pod를 생성할 수 있습니다.

1단계

kubectl explain 명령어를 사용하여 내장 pod 문서를 살펴봅니다.

kubectl explain pods

2단계

모놀리식 pod의 구성 파일을 살펴봅니다.

cat pods/monolith.yaml

3단계

kubectl explain 명령어를 .spec 옵션과 함께 사용하여 API 개체에 대한 자세한 내용을 확인합니다. 이 예제에서는 컨테이너를 살펴보겠습니다.

kubectl explain pods.spec.containers

계속 진행하기 전에 API의 나머지 부분도 살펴보세요.

4단계

kubectl create를 사용하여 monolith를 생성합니다.

kubectl create -f pods/monolith.yaml

내 진행 상황 확인하기를 클릭하여 목표를 확인합니다. 현재 목표는 모놀리식 pod를 만드는 것입니다.

5단계

kubectl get pods 명령어를 사용하여 기본 네임스페이스에서 실행 중인 모든 pod를 나열합니다.

kubectl get pods

6단계

pod가 실행되면 kubectl describe 명령어를 사용하여 monolith pod에 대한 자세한 정보를 가져옵니다.

kubectl describe pods monolith

pod IP 주소 및 이벤트 로그를 포함한 monolith pod에 대한 자세한 정보가 표시됩니다. 문제를 해결해야 할 때 이러한 정보를 유용하게 사용할 수 있습니다.

이와 같이 Kubernetes를 사용하면 구성 파일에 pod 관련 내용을 기술하여 간편하게 pod를 만들 수 있으며, pod가 실행 중일 때 정보를 쉽게 확인할 수 있습니다. 이제 배포에 필요한 모든 pod를 생성할 수 있을 것입니다.

pod와 상호작용

pod에는 기본적으로 비공개 IP 주소가 할당되며 클러스터 밖에서는 이에 접근할 수 없습니다. kubectl port-forward 명령어를 사용하여 로컬 포트를 monolith pod 내의 포트에 매핑합니다.

터미널을 두 개 사용합니다. 하나에서는 kubectl port-forward 명령어를 실행하고 다른 하나에서는 curl 명령어를 실행합니다.

1단계

Cloud Shell에서 + 버튼을 클릭하여 새 터미널을 엽니다.

d7448996c0310a94.png

2단계

다음 명령어를 실행하여 로컬 포트 10080에서 컨테이너가 수신하는 pod 포트 80으로 포트 전달을 설정합니다.

kubectl port-forward monolith 10080:80

3단계

pod에 액세스하려면 첫 번째 터미널 창으로 돌아가 다음 curl 명령어를 실행합니다.

curl http://127.0.0.1:10080

컨테이너로부터 'Hello' 응답을 받게 됩니다.

4단계

보안 엔드포인트에 도달하면 어떻게 되는지 확인합니다.

curl http://127.0.0.1:10080/secure

오류가 표시되어야 합니다.

5단계

로그인하여 monolith에서 인증 토큰을 가져옵니다.

curl -u user http://127.0.0.1:10080/login

로그인 메시지에서 비밀번호를 password로 입력하여 로그인합니다.

6단계

Cloud Shell은 긴 문자열을 잘 복사하지 못하므로 토큰을 환경 변수에 복사합니다.

TOKEN=$(curl http://127.0.0.1:10080/login -u user|jq -r '.token')

로그인 메시지에서 비밀번호를 password로 입력하여 로그인합니다.

7단계

인증 토큰을 포함해 다시 보안 엔드포인트에 액세스합니다.

curl -H "Authorization: Bearer $TOKEN" http://127.0.0.1:10080/secure

8단계

kubectl logs 명령어를 사용하여 monolith pod의 로그를 확인합니다.

kubectl logs monolith

9단계

다른 터미널을 열고 -f 플래그를 사용하여 실시간 로그 스트림을 가져옵니다.

세 번째 터미널을 생성하려면 Cloud Shell에서 + 버튼을 클릭하고 다음 명령어를 실행합니다.

kubectl logs -f monolith

10단계

터미널 1에서 curl을 사용하여 monolith와 상호작용합니다. 그러면 터미널 3에 로그 업데이트가 표시됩니다.

curl http://127.0.0.1:10080

11단계

kubectl exec 명령어를 사용하여 monolith pod의 대화형 셸을 실행합니다. 이는 컨테이너 내에서 문제를 해결하고 싶은 경우에 유용합니다.

kubectl exec monolith --stdin --tty -c monolith /bin/sh

12단계

선택사항: 셸에서 ping 명령어를 사용하여 외부(외부 발신) 연결을 테스트할 수 있습니다.

ping -c 3 google.com

13단계

셸에서 로그아웃합니다.

exit

이와 같이 pod와의 상호작용은 kubectl 명령어를 사용하는 것만큼 쉽습니다. 컨테이너를 원격으로 테스트하거나 로그인 셸을 가져와야 하는 경우 시작하는 데 필요한 모든 요소를 Kubernetes가 제공합니다.

14단계

터미널 2와 3에서 kubectl port-forwardkubectl logs를 종료하려면 Ctrl+C 키를 누릅니다.

모니터링 및 상태 확인

Kubernetes는 준비 상태 및 활성 여부 프로브의 형태로 애플리케이션 모니터링을 지원합니다. 상태 확인은 pod의 각 컨테이너에서 수행할 수 있습니다. 준비 상태 프로브는 pod가 트래픽을 지원할 '준비'가 된 시점을 나타냅니다. 활성 여부 프로브는 컨테이너가 '활성화'되었는지를 나타냅니다. 활성 여부 프로브에서 실패가 여러 번 반복되면 컨테이너가 다시 시작됩니다. 활성 여부 프로브에서 실패가 계속될 경우에는 pod가 비정상 종료 루프로 전환됩니다. 준비 상태 확인에 실패하면 컨테이너가 준비 안 됨으로 표시되고 모든 부하 분산기에서 제거됩니다.

이 실습에서는 healthy-monolith라는 새로운 pod를 배포해 보겠습니다. 이 pod는 대부분 monolith pod를 기반으로 하며, 준비 상태 및 활성 여부 프로브가 추가된 것입니다.

이 실습에서는 다음을 수행하는 방법에 대해 알아봅니다.

  • 준비 상태 및 활성 여부 프로브가 포함된 pod를 만듭니다.

  • 준비 상태 및 활성 여부 프로브의 실패 문제를 해결합니다.

활성 여부 및 준비 상태 프로브가 포함된 pod 만들기

1단계

healthy-monolith pod 구성 파일을 살펴봅니다.

cat pods/healthy-monolith.yaml

2단계

kubectl을 사용하여 healthy-monolith pod를 생성합니다.

kubectl create -f pods/healthy-monolith.yaml

내 진행 상황 확인하기를 클릭하여 목표를 확인합니다. 현재 목표는 healthy-monolith pod를 만드는 것입니다.

3단계

pod는 준비 상태 프로브가 HTTP 200 응답을 반환하기 전까지 준비됨으로 표시되지 않습니다. kubectl describe 명령어를 사용하여 healthy-monolith pod의 세부정보를 확인합니다.

kubectl describe pod healthy-monolith

준비 상태 프로브

Kubernetes가 실패한 준비 상태 프로브에 대해 어떻게 응답하는지 확인해 보겠습니다. monolith 컨테이너는 준비 상태 및 활성 여부 프로브를 강제로 실패하도록 할 수 있으므로, healthy-monolith pod의 실패를 시뮬레이션할 수 있습니다.

1단계

터미널 2에서 kubectl port-forward 명령어를 사용하여 로컬 포트를 healthy-monolith pod의 상태 포트로 전달합니다.

kubectl port-forward healthy-monolith 10081:81

2단계

강제적으로 monolith 컨테이너의 준비 상태 프로브가 실패하도록 합니다. 터미널 1에서 curl 명령어를 사용하여 준비 상태 프로브의 상태를 전환합니다. 이 명령어는 실행해도 아무 것도 출력하지 않습니다.

curl http://127.0.0.1:10081/readiness/status

3단계

kubectl get pods -w 명령어를 사용하여 healthy-monolith pod의 상태를 가져옵니다.

kubectl get pods healthy-monolith -w

4단계

준비된 컨테이너가 0/1개 있으면 Ctrl+C 키를 누릅니다. kubectl describe 명령어를 사용하여 준비 상태 프로브 실패에 관한 자세한 정보를 가져옵니다.

kubectl describe pods healthy-monolith

5단계

실패한 준비 상태 프로브에 관한 healthy-monolith pod 보고서 세부정보의 이벤트를 확인합니다.

monolith 컨테이너 준비 상태 프로브를 강제로 성공하게 하려면 curl 명령어를 사용하여 준비 상태 프로브의 상태를 전환합니다.

curl http://127.0.0.1:10081/readiness/status

6단계

15초 가량 기다린 후에 kubectl get pods 명령어를 사용하여 healthy-monolith pod의 상태를 가져옵니다.

kubectl get pods healthy-monolith

7단계

터미널 2에서 Ctrl+C 키를 눌러 kubectl 프록시(예: port-forward) 명령어를 닫습니다.

활성 여부 프로브

이전 가이드에서 학습한 내용을 토대로, kubectl port-forwardcurl 명령어를 사용하여 강제적으로 monolith 컨테이너의 활성 여부 프로브가 실패하도록 하고, Kubernetes가 실패한 활성 여부 프로브에 어떻게 응답하는지 관찰해 보겠습니다.

1단계

터미널 2에서 kubectl port-forward 명령어를 사용하여 로컬 포트를 healthy-monolith pod의 상태 포트로 전달합니다.

kubectl port-forward healthy-monolith 10081:81

2단계

다른 터미널에서 curl 명령어를 사용하여 준비 상태 프로브의 상태를 변경함으로써 monolith 컨테이너의 준비 상태 프로브가 강제로 성공하도록 합니다.

curl http://127.0.0.1:10081/healthz/status

3단계

kubectl get pods -w 명령어를 사용하여 healthy-monolith pod의 상태를 가져옵니다.

kubectl get pods healthy-monolith -w

4단계

활성 여부 프로브가 실패하면 컨테이너가 다시 시작됩니다. 다시 시작되면 healthy-monolith pod가 정상 상태로 돌아와야 합니다. pod가 다시 시작되면 Ctrl+C 키를 눌러 명령어를 종료합니다. 재시작 횟수를 기록합니다.

5단계

kubectl describe 명령어를 사용하여 실패한 활성 여부 프로브에 대한 자세한 정보를 가져옵니다. 활성 여부 프로브가 실패하고 pod가 다시 시작된 시점의 관련 이벤트를 볼 수 있습니다.

kubectl describe pods healthy-monolith

6단계

작업을 마치면 터미널 2에서 Ctrl+C 키를 눌러 kubectl proxy 명령어를 닫습니다.

서비스

다음 단계:

  • 서비스를 생성합니다.

  • 라벨 선택기를 사용하여 일정 수의 pod를 외부에 노출시킵니다.

서비스 만들기

서비스를 생성하기에 앞서, HTTPS 트래픽을 처리할 수 있는 secure-monolith라는 nginx 서버로 보안 pod를 생성합니다.

1단계

보안 pod가 데이터를 가져오거나 처리하는 데 사용할 볼륨 두 개를 생성합니다.

secret 유형의 첫 번째 볼륨은 nginx 서버의 TLS 인증 파일을 저장합니다.

터미널 1로 돌아온 후 다음 명령어를 사용하여 첫 번째 볼륨을 생성합니다.

kubectl create secret generic tls-certs --from-file tls/

nginx의 구성 파일을 보관할 ConfigMap 유형의 두 번째 볼륨을 생성합니다.

kubectl create configmap nginx-proxy-conf --from-file nginx/proxy.conf

2단계

nginx에서 사용할 proxy.conf 파일을 살펴봅니다.

cat nginx/proxy.conf

이 파일은 SSL 상태를 ON으로 지정하고, 컨테이너 파일 시스템에 인증 파일의 위치를 지정합니다.

3단계

secure-monolith pod 구성 파일을 살펴봅니다.

cat pods/secure-monolith.yaml

4단계

다음 명령어를 실행하여 구성 데이터로 secure-monolith pod를 생성합니다.

kubectl create -f pods/secure-monolith.yaml

보안 pod를 만들었으므로 이제 Kubernetes 서비스를 사용하여 secure-monolith pod를 외부로 노출시킵니다.

5단계

모놀리식 서비스 구성 파일을 살펴봅니다.

cat services/monolith.yaml

6단계

kubectl create 명령어를 사용하여 모놀리식 서비스 구성 파일로 모놀리식 서비스를 만듭니다.

kubectl create -f services/monolith.yaml

보통은 Kubernetes에서 이러한 포트 할당을 알아서 처리합니다. 이 실습에서 포트를 선택한 이유는 나중에 상태 확인을 구성하기가 더 편하기 때문입니다.

7단계

gcloud compute firewall-rules 명령어를 사용하여 노출된 nodeport의 모놀리식 서비스로 트래픽을 전달합니다.

gcloud compute firewall-rules create allow-monolith-nodeport --allow=tcp:31000

이제 모든 설정이 완료되었으므로, 포트 전달을 사용하지 않고도 클러스터 외부에서 secure-monolith 서비스를 테스트할 수 있습니다.

8단계

노드 하나의 IP 주소를 가져옵니다.

gcloud compute instances list

9단계

브라우저에서 URL을 열어봅니다.

https://<EXTERNAL_IP>:31000

pod에 라벨 추가

현재 모놀리식 서비스에 엔드포인트가 없는 경우, 이 문제를 해결하는 방법 중 하나는 라벨 쿼리와 함께 kubectl get pods 명령어를 사용하는 것입니다

1단계

모놀리식 라벨이 지정되어 실행되는 여러 개의 pod가 있는지 확인합니다.

kubectl get pods -l "app=monolith"

2단계

app=monolithsecure=enabled 라벨이 있나요?

kubectl get pods -l "app=monolith,secure=enabled"

3단계

kubectl label 명령어를 사용하여 secure-monolith pod에 누락된 secure=enabled 라벨을 추가합니다.

kubectl label pods secure-monolith 'secure=enabled'

내 진행 상황 확인하기를 클릭하여 목표를 확인합니다. 현재 목표는 라벨을 사용하여 보안 비밀, 서비스, 방화벽 규칙 및 pod를 만드는 것입니다.

4단계

라벨이 업데이트됐는지 확인합니다.

kubectl get pods secure-monolith --show-labels

5단계

monolith 서비스에서 엔드포인트 목록을 봅니다.

kubectl get endpoints monolith

6단계

노드 하나로 다시 테스트해 봅니다.

gcloud compute instances list | grep gke-

브라우저에서 다음 URL을 엽니다. secure-monolith가 자체 서명 인증서를 사용 중이므로 SSL 경고를 클릭해 확인해 주어야 합니다.

https://<EXTERNAL_IP>:31000

실습 종료하기

실습을 완료하면 실습 종료를 클릭합니다. Google Cloud Skills Boost에서 사용된 리소스를 자동으로 삭제하고 계정을 지웁니다.

실습 경험을 평가할 수 있습니다. 해당하는 별표 수를 선택하고 의견을 입력한 후 제출을 클릭합니다.

별점의 의미는 다음과 같습니다.

  • 별표 1개 = 매우 불만족
  • 별표 2개 = 불만족
  • 별표 3개 = 중간
  • 별표 4개 = 만족
  • 별표 5개 = 매우 만족

의견을 제공하고 싶지 않다면 대화상자를 닫으면 됩니다.

의견이나 제안 또는 수정할 사항이 있다면 지원 탭을 사용하세요.

Copyright 2020 Google LLC All rights reserved. Google 및 Google 로고는 Google LLC의 상표입니다. 기타 모든 회사명 및 제품명은 해당 업체의 상표일 수 있습니다.

현재 이 콘텐츠를 이용할 수 없습니다

이용할 수 있게 되면 이메일로 알려드리겠습니다.

감사합니다

이용할 수 있게 되면 이메일로 알려드리겠습니다.