arrow_back

Cloud Shell에서 GKE Autopilot 클러스터 배포하기

로그인 가입
Test and share your knowledge with our community!
done
Get access to over 700 hands-on labs, skill badges, and courses

Cloud Shell에서 GKE Autopilot 클러스터 배포하기

Lab 1시간 universal_currency_alt 크레딧 1개 show_chart 입문
Test and share your knowledge with our community!
done
Get access to over 700 hands-on labs, skill badges, and courses

개요

이 실습에서는 명령줄을 사용하여 GKE 클러스터를 빌드합니다. kubeconfig 파일을 검사하고 kubectl을 사용하여 클러스터를 조작합니다.

목표

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

  • kubectl을 사용하여 GKE 클러스터 빌드 및 조작하기
  • kubectl 및 구성 파일을 사용하여 포드 배포하기
  • Container Registry를 사용하여 컨테이너를 저장하고 배포하기

실습 설정

Qwiklabs에 액세스하기

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

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

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

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

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

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

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

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

초기 로그인 단계를 완료하면 프로젝트 대시보드가 표시됩니다.

프로젝트 대시보드 탭 형식 페이지

Cloud Shell 열기

대부분의 작업은 Cloud Shell에서 수행합니다. Cloud Shell은 Google Cloud에서 실행되는 명령줄 환경입니다. 이 Debian 기반 가상 머신은 필요한 모든 관리 도구(예: docker, gcloud, gsutil, kubectl)와 함께 로드되며, 영구 5GB 홈 디렉터리를 제공합니다.

  1. Google Cloud 콘솔 제목 표시줄에서 Cloud Shell 활성화(Cloud Shell 활성화 아이콘)를 클릭합니다.
  2. 계속을 클릭합니다.

프로비저닝이 완료되면 Cloud Shell 프롬프트가 표시됩니다.

'Welcome to Cloud Shell!' 메시지가 표시되는 Cloud Shell 프롬프트 Type "help" to get started.

작업 1. GKE 클러스터 배포하기

이 작업에서는 Cloud Shell을 사용하여 GKE 클러스터를 배포합니다.

  1. Cloud Shell에서 다음 명령어를 입력하여 영역 및 클러스터 이름의 환경 변수를 설정합니다.
export my_region={{{project_0.default_region|Region}}} export my_cluster=autopilot-cluster-1
  1. Cloud Shell에서 다음 명령어를 입력하여 Kubernetes 클러스터를 만듭니다.
gcloud container clusters create-auto $my_cluster --region $my_region

이 명령 형식은 대부분의 옵션을 기본값으로 설정합니다. 가능한 옵션의 전체 세트를 보려면 gcloud container clusters create 참조 문서를 참고하세요.

GKE가 최신 버전의 Kubernetes를 채택함에 따라 도입된 기본 GKE 클러스터 설정의 변경사항을 강조하는 경고가 여러 개 표시됩니다.

참고: 클러스터 배포가 완료될 때까지 몇 분 정도 기다려야 합니다.

배포가 완료되면 Google Cloud 콘솔 Kubernetes Engine > 클러스터 페이지가 스크린샷처럼 표시됩니다.

위치, 클러스터 크기, 총 코어 수, autopilot-cluster-1의 총 메모리 같은 세부정보를 표시하는 Kubernetes 클러스터 페이지

내 진행 상황 확인하기를 클릭하여 목표를 확인합니다. GKE 클러스터 배포하기

작업 2. GKE 클러스터에 연결하기

이 작업에서는 Cloud Shell을 사용하여 GKE 클러스터에 인증한 다음, kubectl 구성 파일을 검사합니다.

Kubernetes의 인증은 마스터에서 실행되는 kube-APIserver를 통해 외부 클라이언트의 클러스터와 진행하는 통신과 클러스터 내에서 또는 외부에서 진행하는 클러스터 컨테이너 통신에 모두 적용됩니다.

Kubernetes에서 인증은 여러 형식을 취할 수 있습니다. GKE의 경우 인증은 일반적으로 OAuth2 토큰으로 처리되며 전체적으로 프로젝트 전반에서 Cloud Identity and Access Management를 통해 관리할 수 있습니다. 원하는 경우에는 각 클러스터 내에서 정의 및 구성할 수 있는 역할 기반 액세스 제어를 통해 관리할 수 있습니다.

GKE에서 클러스터 컨테이너는 서비스 계정을 사용하여 외부 리소스에 인증하고 액세스할 수 있습니다.

참고: Kubernetes 1.12 이전 버전의 경우 클라이언트 인증서 및 기본 인증이 기본적으로 사용 중지되어 있지 않습니다. 이러한 인증 방법은 보안 수준이 낮으므로 클러스터 보안을 강화하려면 사용 중지해야 합니다. (1.12 이상 버전에서는 두 가지 방법이 모두 기본적으로 사용 중지되어 있습니다.)
  1. 현재 사용자의 사용자 인증 정보로 kubeconfig 파일을 만들고(인증을 허용하기 위해) 특정 클러스터에 대한 엔드포인트 세부정보를 제공하려면(kubectl 명령줄 도구를 통해 해당 클러스터와 통신하기 위해) 다음 명령어를 실행합니다.
gcloud container clusters get-credentials $my_cluster --region $my_region

이 명령어는 홈 디렉터리에 .kube 디렉터리를 만듭니다(아직 없는 경우). .kube 디렉터리에서 이 명령어는 인증 및 구성 정보를 저장하는 데 사용되는 config라는 파일을 만듭니다(아직 없는 경우). 구성 파일은 일반적으로 kubeconfig 파일이라고 합니다.

  1. nano 텍스트 편집기로 kubeconfig 파일을 엽니다.
nano ~/.kube/config

이제 파일에 저장된 모든 인증 및 엔드포인트 구성 데이터를 검사할 수 있습니다. 클러스터에 관한 정보가 표시되어야 합니다. 정보는 클러스터가 만들어질 때 채워졌습니다.

  1. Ctrl+X 키를 눌러 nano 편집기를 종료합니다.
참고: kubeconfig 파일은 여러 클러스터에 대한 정보를 포함할 수 있습니다. 현재 활성 컨텍스트(kubectl 명령어가 조작하는 클러스터)는 current-context 속성으로 표시됩니다.

gcloud container clusters get-credentials 명령어를 실행하여 동일한 컨텍스트(동일한 환경의 동일한 사용자)에서 만든 클러스터의 kubeconfig 파일을 채울 필요는 없습니다. 이러한 클러스터의 경우 클러스터가 만들어질 때 이미 세부정보가 채워졌기 때문입니다.

그러나 다른 사용자가 만들거나 다른 환경에서 만들어진 클러스터에 연결하려면 명령어를 실행해야 합니다. 이 명령어를 사용하면 활성 컨텍스트를 다른 클러스터로 쉽게 전환할 수도 있습니다.

작업 3. kubectl을 사용하여 GKE 클러스터 검사하기

이 작업에서는 Cloud Shell 및 kubectl을 사용하여 GKE 클러스터를 검사합니다.

kubeconfig 파일이 채워지고 활성 컨텍스트가 특정 클러스터로 설정되고 나면 kubectl 명령줄 도구를 사용하여 클러스터에 대해 명령어를 실행할 수 있습니다. 이러한 명령어는 대부분 궁극적으로 마스터 API 서버에 대해 REST API 호출을 트리거하여 관련 작업을 트리거합니다.

  1. Cloud Shell에서 다음 명령어를 실행하여 kubeconfig 파일의 콘텐츠를 출력합니다.
kubectl config view

민감한 인증서 데이터는 DATA+OMITTED로 대체됩니다.

  1. Cloud Shell에서 다음 명령어를 실행하여 활성 컨텍스트의 클러스터 정보를 출력합니다.
kubectl cluster-info

출력에는 활성 컨텍스트 클러스터에 대한 설명이 표시됩니다.

출력:

Kubernetes control plane is running at https://34.133.211.75 GLBCDefaultBackend is running at https://34.133.211.75/api/v1/namespaces/kube-system/services/default-http-backend:http/proxy KubeDNS is running at https://34.133.211.75/api/v1/namespaces/kube-system/services/kube-dns:dns/proxy KubeDNSUpstream is running at https://34.133.211.75/api/v1/namespaces/kube-system/services/kube-dns-upstream:dns/proxy Metrics-server is running at https://34.133.211.75/api/v1/namespaces/kube-system/services/https:metrics-server:/proxy To further debug and diagnose cluster problems, use 'kubectl cluster-info dump'.
  1. Cloud Shell에서 다음 명령어를 실행하여 활성 컨텍스트를 출력합니다.
kubectl config current-context

출력 행은 활성 컨텍스트 클러스터를 나타냅니다.

출력:

gke_{{{project_0.project_id|Project_ID}}}_{{{project_0.default_region|Region}}}_autopilot-cluster-1

PROJECT_ID는 프로젝트 ID입니다. 이 정보는 kubeconfig 파일의 current-context 속성에 있는 정보와 동일합니다.

  1. Cloud Shell에서 다음 명령어를 실행하여 kubeconfig 파일의 모든 클러스터 컨텍스트에 대한 일부 세부정보를 출력합니다.
kubectl config get-contexts

여러 출력 행이 사용자가 만든 클러스터에 대한 세부정보와 활성 컨텍스트 클러스터를 나타냅니다. 일반적으로 이 명령어는 사용자가 만들거나 kubeconfig 파일에 직접 추가한 다른 클러스터를 비롯하여 사용자의 kubeconfig 파일에 있는 클러스터의 일부 세부정보를 나열합니다.

  1. Cloud Shell에서 다음 명령어를 실행하여 활성 컨텍스트를 변경합니다.
kubectl config use-context gke_${DEVSHELL_PROJECT_ID}_{{{project_0.default_region|Region}}}_autopilot-cluster-1

이 경우 클러스터가 하나뿐이므로 이 명령어로 인해 변경되는 사항은 없습니다.

그러나 앞으로는 프로젝트에 클러스터가 두 개 이상 있을 수 있습니다. kubeconfig 파일에 여러 클러스터에 대한 사용자 인증 정보 및 구성이 이미 채워져 있는 경우 이 접근 방식을 사용하여 활성 컨텍스트를 전환할 수 있습니다. 이 접근 방식을 사용하려면 gke 프리픽스, 프로젝트 ID, 위치, 표시 이름이 모두 밑줄로 연결된 클러스터의 전체 이름이 필요합니다.

  1. Cloud Shell에서 다음 명령어를 실행하여 kubectl의 Bash 자동 완성을 사용 설정합니다.
source <(kubectl completion bash)

이 명령어는 출력을 생성하지 않습니다.

  1. Cloud Shell에서 kubectl 뒤에 공백을 한 칸 입력하고 Tab 키를 두 번 누릅니다.

셸이 가능한 모든 명령어를 출력합니다.

가능한 모든 출력 명령어를 표시하는 Cloud Shell

  1. Cloud Shell에서 kubectl co를 입력하고 Tab 키를 두 번 누릅니다.

셸이 'co'(또는 사용자가 입력한 다른 텍스트)로 시작하는 모든 명령어를 출력합니다.

completion, convert, config, cordon처럼 &#39;co&#39;로 시작하는 모든 출력 명령어를 표시하는 Cloud Shell

작업 4. GKE 클러스터에 포드 배포하기

이 작업에서는 Cloud Shell을 사용하여 GKE 클러스터에 포드를 배포합니다.

kubectl을 사용하여 GKE에 포드 배포하기

Kubernetes는 포드의 추상화를 도입하여 하나 이상의 관련 컨테이너를 동일한 노드의 단위로 예약 및 배포할 단일 항목으로 그룹화합니다. 단일 컨테이너 이미지의 단일 컨테이너인 포드를 배포할 수 있습니다. 또는 포드는 여러 컨테이너 이미지의 여러 컨테이너를 포함할 수 있습니다.

  1. Cloud Shell에서 다음 명령어를 실행하여 nginx를 nginx-1이라는 이름의 포드로 배포합니다.
kubectl create deployment --image nginx nginx-1

이 명령어는 nginx 이미지를 실행하는 컨테이너로 nginx라는 이름의 포드를 만듭니다. 저장소가 지정되어 있지 않은 경우 기본 동작은 로컬 또는 Docker 공개 레지스트리에서 이미지를 찾는 것입니다. 이 경우 이미지는 Docker 공개 레지스트리에서 가져옵니다.

  1. Cloud Shell에서 다음 명령어를 실행하여 활성 컨텍스트 클러스터에 배포된 모든 포드를 확인합니다.
kubectl get pods

출력은 다음 예와 같이 표시됩니다(단, 포드 이름은 약간 다름).

참고: 서버가 현재 요청을 처리할 수 없다는 메시지가 표시되면 배포가 완료되어 준비될 때까지 기다립니다.

출력:

NAME READY STATUS RESTARTS AGE nginx-1-74c7bbdb84-nvwsc 1/1 Running 0 2m52s
  1. Cloud Shell에서 다음 명령어를 실행하여 클러스터 노드 전반의 리소스 사용량을 확인합니다.
kubectl top nodes

출력은 다음과 같이 표시됩니다.

출력:

NAME CPU(cores) CPU% MEMORY(bytes) MEMORY% gk3-autopilot-cluster-1-pool-2-7246ae0e-4q7s 1971m 102% 1803Mi 30%

또 다른 top 명령어(kubectl top pods)는 클러스터에 배포된 모든 포드에 걸쳐 유사한 정보를 표시합니다.

  1. 이제 이 실습에서 사용할 변수에 포드 이름을 입력합니다. 이와 같은 변수를 사용하면 긴 이름을 입력할 때 사람의 실수를 최소화할 수 있습니다. [your_pod_name] 대신 포드의 고유한 이름을 입력해야 합니다.
export my_nginx_pod=[your_pod_name]

예:

export my_nginx_pod=nginx-1-74c7bbdb84-nvwsc
  1. 셸이 값을 동일하게 표시하도록 하여 환경 변수를 성공적으로 설정했는지 확인합니다.
echo $my_nginx_pod

출력:

nginx-1-74c7bbdb84-nvwsc
  1. Cloud Shell에서 다음 명령어를 실행하여 방금 만든 포드의 전체 세부정보를 확인합니다.
kubectl describe pod $my_nginx_pod

출력은 다음과 같이 표시됩니다. 포드의 세부정보와 상태, 조건, 수명 주기의 이벤트가 표시됩니다.

출력:

Image: nginx Image: nginx Image: nginx Image ID: docker.io/library/nginx@sha256:480868e8c8c797794257e2abd88d0f9a8809b2fe956cbfbc05dcc0bca1f7cd43 Port: Host Port: State: Running Started: Wed, 17 May 2023 10:47:04 +0000 Ready: True Restart Count: 0 Limits: cpu: 500m ephemeral-storage: 1Gi memory: 2Gi Requests: cpu: 500m ephemeral-storage: 1Gi memory: 2Gi Environment: Mounts: /var/run/secrets/kubernetes.io/serviceaccount from kube-api-access-ksxxr (ro) Conditions: Type Status Initialized True Ready True ContainersReady True PodScheduled True Volumes: kube-api-access-ksxxr: Type: Projected (a volume that contains injected data from multiple sources) TokenExpirationSeconds: 3607 ConfigMapName: kube-root-ca.crt ConfigMapOptional: DownwardAPI: true QoS Class: Guaranteed Node-Selectors: Tolerations: kubernetes.io/arch=amd64:NoSchedule node.kubernetes.io/not-ready:NoExecute op=Exists for 300s node.kubernetes.io/unreachable:NoExecute op=Exists for 300s Events: Type Reason Age From Message ---- ------ ---- ---- ------- Warning FailedScheduling 5m42s gke.io/optimize-utilization-scheduler 0/2 nodes are available: 2 Insufficient cpu, 2 Insufficient memory. preemption: 0/2 nodes are available: 2 No preemption victims found for incoming pod. Normal Scheduled 4m15s gke.io/optimize-utilization-scheduler Successfully assigned default/nginx-1-6b7bff9fc7-t7fzk to gk3-autopilot-cluster-1-pool-1-242a3a6a-j9rh Normal TriggeredScaleUp 5m34s cluster-autoscaler pod triggered scale-up: [{https://www.googleapis.com/compute/v1/projects/qwiklabs-gcp-02-92c260add90a/zones/{{{project_0.default_zone|Zone}}}/instanceGroups/gk3-autopilot-cluster-1-pool-1-242a3a6a-grp 0->1 (max: 1000)}] Normal Pulling 3m30s kubelet Pulling image "nginx" Normal Pulled 3m16s kubelet Successfully pulled image "nginx" in 13.843394735s (13.843643782s including waiting) Normal Created 3m16s kubelet Created container nginx Normal Started 3m15s kubelet Started container nginx

컨테이너에 파일 푸시하기

nginx 웹 서버를 통해 정적 콘텐츠를 제공하려면 파일을 만들어 컨테이너에 배치해야 합니다.

  1. Cloud Shell에서 다음 명령어를 입력하여 nano 텍스트 편집기에서 test.html이라는 이름의 파일을 엽니다.
nano ~/test.html
  1. test.html 파일에 다음 텍스트(셸 스크립트)를 추가합니다.
This is title Hello World
  1. Ctrl+X 키를 누른 다음, Y를 누르고 Enter 키를 눌러 파일을 저장하고 nano 편집기를 종료합니다.

  2. Cloud Shell에서 다음 명령어를 실행하여 정적으로 제공될 nginx 포드의 nginx 컨테이너 내의 적절한 위치에 파일을 배치합니다.

kubectl cp ~/test.html $my_nginx_pod:/usr/share/nginx/html/test.html

이 명령어는 로컬 홈 디렉터리의 test.html 파일을 nginx 포드에 있는 첫 번째 컨테이너의 /usr/share/nginx/html 디렉터리에 복사합니다. 컨테이너 이름 앞에 -c 옵션을 사용하여 다중 컨테이너 포드에 다른 컨테이너를 지정할 수 있습니다.

테스트를 위해 포드 노출하기

클러스터 외부의 클라이언트에 포드를 노출하려면 서비스가 필요합니다. 서비스는 과정의 다른 곳에서 논의되며, 다른 실습에서 광범위하게 사용됩니다. 간단한 명령어를 사용하여 포드를 노출하는 서비스를 만들 수 있습니다.

  1. Cloud Shell에서 다음 명령어를 실행하여 nginx 포드를 외부에 노출하는 서비스를 만듭니다.
kubectl expose pod $my_nginx_pod --port 80 --type LoadBalancer

이 명령어는 클러스터 외부의 인터넷 주소에서 nginx 포드에 액세스할 수 있도록 허용하는 LoadBalancer 서비스를 만듭니다.

  1. Cloud Shell에서 다음 명령어를 실행하여 클러스터의 서비스에 대한 세부정보를 확인합니다.
kubectl get services

출력은 다음과 같이 표시됩니다. 다음 단계에서는 외부 IP 주소를 사용합니다.

참고: 새 서비스의 외부 IP가 채워질 때까지 명령어를 몇 번 반복해야 할 수 있습니다.

출력:

NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE kubernetes ClusterIP 10.11.240.1 443/TCP 1h nginx-1-7...wsc LoadBalancer 10.11.240.87 80:31695/TCP 3s

Kubernetes 서비스는 클러스터가 만들거나 사용하는 기본 서비스 중 하나입니다. 사용자가 만든 nginx 서비스도 표시됩니다.

외부 IP 주소가 표시될 때까지 이 명령어를 여러 번 다시 실행해야 할 수 있습니다.

출력:

NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE kubernetes ClusterIP 10.11.240.1 443/TCP 1h nginx-1-7...wsc LoadBalancer 10.11.240.87 104.154.177.46 80:31695/TCP 1m

내 진행 상황 확인하기를 클릭하여 목표를 확인합니다. GKE 클러스터에 포드 배포하기

  1. Cloud Shell에서 다음 명령어를 실행하여 nginx 컨테이너가 복사된 정적 HTML 파일을 제공하는지 확인합니다.

[EXTERNAL_IP]를 이전 단계의 출력에서 얻은 서비스의 외부 IP 주소로 바꿉니다.

curl http://[EXTERNAL_IP]/test.html

파일 콘텐츠가 출력에 나타납니다. 브라우저에서 동일한 주소로 이동하여 HTML로 렌더링된 파일을 확인할 수 있습니다.

예:

curl http://104.154.177.46/test.html This is title Hello World
  1. Cloud Shell에서 다음 명령어를 실행하여 nginx 포드가 사용 중인 리소스를 확인합니다.
kubectl top pods

출력:

NAME CPU(cores) MEMORY(bytes) nginx-1-74c7bbdb84-nvwsc 0m 2Mi

작업 5. GKE 포드 검사하기

이 작업에서는 포드에 연결하여 설정을 조정하고, 파일을 수정하고, 포드를 실시간으로 변경합니다.

참고: 이 프로세스는 문제를 해결하거나 실험할 때만 사용하세요. 변경사항은 포드의 소스 이미지에 적용되지 않으므로 복제본에 반영되지 않습니다.

환경 준비하기

포드 및 기타 리소스를 Kubernetes에 배포하려면 매니페스트 파일이라고도 하는 구성 파일을 사용하는 것이 좋습니다. 구성 파일은 일반적으로 리소스의 세부정보를 지정하는 YAML 구문으로 작성됩니다. 구성 파일을 사용하면 긴 명령줄 인수 행을 사용할 때보다 더 쉽게 복잡한 옵션을 지정할 수 있습니다.

YAML 구문은 JSON 구문과 비슷하고 동일한 객체 및 속성 계층 구조를 사용하지만, 그보다 더 간결합니다. 실습용 소스 저장소에는 준비된 샘플 YAML 파일이 포함되어 있습니다.

  1. Cloud Shell에서 다음 명령어를 입력하여 저장소를 실습용 Cloud Shell로 클론합니다.
git clone https://github.com/GoogleCloudPlatform/training-data-analyst
  1. 작업 디렉터리로 연결되는 바로가기, 즉 소프트 링크를 생성합니다.
ln -s ~/training-data-analyst/courses/ak8s/v1.1 ~/ak8s
  1. 이 실습의 샘플 파일이 포함된 디렉터리로 이동합니다.
cd ~/ak8s/GKE_Shell/

new-nginx-pod.yaml이라는 포드의 샘플 매니페스트 YAML 파일이 제공되었습니다.

apiVersion: v1 kind: Pod metadata: name: new-nginx labels: name: new-nginx spec: containers: - name: new-nginx image: nginx ports: - containerPort: 80
  1. 매니페스트를 배포하려면 다음 명령어를 실행합니다.
kubectl apply -f ./new-nginx-pod.yaml

내 진행 상황 확인하기를 클릭하여 목표를 확인합니다. YAML 파일을 사용하여 새로운 포드를 배포합니다.

  1. 포드의 목록을 보려면 다음 명령어를 실행합니다.
kubectl get pods

출력은 다음 예와 같이 표시됩니다.

출력:

NAME READY STATUS RESTARTS AGE new-nginx 1/1 Running 0 9s nginx-1-74c7bbdb84-nvwsc 1/1 Running 0 55m

새 nginx 포드와 실습의 앞부분에서 만든 포드를 확인할 수 있습니다.

셸 리디렉션을 사용하여 포드에 연결하기

일부 컨테이너 이미지에는 실행할 수 있는 셸 환경이 포함되어 있습니다. 이 셸 환경은 kubectl을 사용하여 개별 명령어를 실행하는 것보다 더 편리할 수 있습니다. 예를 들어 nginx 이미지에는 bash 셸이 포함되어 있습니다. 이 작업에서는 셸 리디렉션을 사용하여 새 nginx 포드의 bash 셸에 연결해 일련의 작업을 수행합니다.

  1. Cloud Shell에서 다음 명령어를 실행하여 nginx 컨테이너에서 대화형 bash 셸을 시작합니다.
kubectl exec -it new-nginx -- /bin/bash

새로운 셸 프롬프트가 나타납니다.

출력:

root@new-nginx:/#

new-nginx 포드의 컨테이너에서 대화형 Bash 셸을 시작했습니다. 포드에 컨테이너가 여러 개 있는 경우 -c 옵션이 포함된 이름으로 하나를 지정할 수 있습니다.

nginx 컨테이너 이미지에는 기본적으로 텍스트 편집 도구가 없기 때문에 해당 도구를 설치해야 합니다.

  1. Cloud Shell의 nginx bash 셸에서 다음 명령어를 실행하여 nano 텍스트 편집기를 설치합니다.
apt-get update apt-get install nano

Do you want to continue (Y/n) 메시지가 표시되면 Y를 눌러 확인합니다.

nginx 컨테이너의 정적 제공 디렉터리에 test.html 파일을 만들어야 합니다.

  1. Cloud Shell의 nginx bash 셸에서 다음 명령어를 실행하여 정적 파일 디렉터리로 전환하고 test.html 파일을 만듭니다.
cd /usr/share/nginx/html nano test.html
  1. Cloud Shell의 nginx Bash 셸 nano 세션에서 다음 텍스트를 입력합니다.
This is title Hello World
  1. Ctrl+X 키를 누른 다음, Y를 누르고 Enter 키를 눌러 파일을 저장하고 nano 편집기를 종료합니다.
  2. Cloud Shell의 nginx bash 셸에서 다음 명령어를 실행하여 nginx bash 셸을 종료합니다.
exit

수정된 nginx 컨테이너(새 정적 HTML 파일 포함)에 연결하고 이를 테스트하기 위해 서비스를 만들 수 있습니다. 더 쉬운 방법은 포트 전달을 사용하여 Cloud Shell에서 바로 포드에 연결하는 것입니다.

  1. Cloud Shell에서 다음 명령어를 실행하여 Cloud Shell에서 nginx 포드로 포트 전달을 설정합니다(Cloud Shell VM의 포트 10081에서 nginx 컨테이너의 포트 80으로).
kubectl port-forward new-nginx 10081:80

출력은 다음 예와 같이 표시됩니다.

출력:

Forwarding from 127.0.0.1:10081 -> 80 Forwarding from [::1]:10081 -> 80

이는 포그라운드 프로세스이므로 테스트하려면 다른 Cloud Shell 인스턴스를 열어야 합니다.

  1. Cloud Shell 메뉴 바에서 더하기 기호(+) 아이콘을 클릭하여 새 Cloud Shell 세션을 시작합니다.

Cloud Shell 메뉴 바에 강조 표시된 (+) 아이콘

두 번째 Cloud Shell 세션이 Cloud Shell 창에 표시됩니다. 메뉴 바에서 제목을 클릭하여 세션 간에 전환할 수 있습니다.

  1. 두 번째 Cloud Shell 세션에서 다음 명령어를 실행하여 포트 전달을 통해 수정된 nginx 컨테이너를 테스트합니다.
curl http://127.0.0.1:10081/test.html

test.html 파일에 배치한 HTML 텍스트가 표시됩니다.

This is title Hello World

포드의 로그 보기

  1. Cloud Shell 메뉴 바에서 더하기 기호(+) 아이콘을 클릭하여 다른 Cloud Shell 세션을 새로 시작합니다.

세 번째 Cloud Shell 세션이 Cloud Shell 창에 표시됩니다. 이전과 마찬가지로 메뉴 바에서 세션을 클릭하여 전환할 수 있습니다.

  1. 세 번째 Cloud Shell 창에서 다음 명령어를 실행하여 로그를 표시하고 new-nginx 포드에 대한 새 로그(타임스탬프도 포함)가 도착하면 스트리밍합니다.
kubectl logs new-nginx -f --timestamps
  1. 이 새 창에 로그가 표시됩니다.
  2. 두 번째 Cloud Shell 창으로 돌아가 curl 명령어를 다시 실행하여 포드에서 일부 트래픽을 생성합니다.
  3. 세 번째 Cloud Shell 창에 표시되는 추가 로그 메시지를 검토합니다.

추가 로그 메시지가 표시되는 세 번째 Cloud Shell 창

  1. 로그 메시지 표시를 중지하려면 세 번째 Cloud Shell 창을 닫습니다.
  2. 포트 전달 프로세스를 중지하려면 원래 Cloud Shell 창을 닫습니다.

실습 종료하기

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

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

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

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

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

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

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