개요
이 실습에서는 명령줄을 사용하여 GKE 클러스터를 빌드합니다. kubeconfig 파일을 검사하고 kubectl
을 사용하여 클러스터를 조작합니다.
목표
이 실습에서는 다음 작업을 수행하는 방법을 알아봅니다.
-
kubectl
을 사용하여 GKE 클러스터 빌드 및 조작하기
-
kubectl
및 구성 파일을 사용하여 포드 배포하기
- Container Registry를 사용하여 컨테이너를 저장하고 배포하기
실습 설정
Qwiklabs에 액세스하기
각 실습에서는 정해진 기간 동안 새 Google Cloud 프로젝트와 리소스 집합이 무료로 제공됩니다.
-
실습 시작 버튼을 클릭합니다. 실습 비용을 결제해야 하는 경우 결제 수단을 선택할 수 있는 팝업이 열립니다.
왼쪽에는 다음과 같은 항목이 포함된 실습 세부정보 패널이 있습니다.
-
Google Cloud 콘솔 열기 버튼
- 남은 시간
- 이 실습에 사용해야 하는 임시 사용자 인증 정보
- 필요한 경우 실습 진행을 위한 기타 정보
-
Google Cloud 콘솔 열기를 클릭합니다(Chrome 브라우저를 실행 중인 경우 마우스 오른쪽 버튼으로 클릭하고 시크릿 창에서 링크 열기를 선택합니다).
실습에서 리소스가 가동되면 다른 탭이 열리고 로그인 페이지가 표시됩니다.
팁: 두 개의 탭을 각각 별도의 창으로 나란히 정렬하세요.
참고: 계정 선택 대화상자가 표시되면 다른 계정 사용을 클릭합니다.
-
필요한 경우 아래의 사용자 이름을 복사하여 로그인 대화상자에 붙여넣습니다.
{{{user_0.username | "Username"}}}
실습 세부정보 패널에서도 사용자 이름을 확인할 수 있습니다.
-
다음을 클릭합니다.
-
아래의 비밀번호를 복사하여 시작하기 대화상자에 붙여넣습니다.
{{{user_0.password | "Password"}}}
실습 세부정보 패널에서도 비밀번호를 확인할 수 있습니다.
-
다음을 클릭합니다.
중요: 실습에서 제공하는 사용자 인증 정보를 사용해야 합니다. Google Cloud 계정 사용자 인증 정보를 사용하지 마세요.
참고: 이 실습에 자신의 Google Cloud 계정을 사용하면 추가 요금이 발생할 수 있습니다.
-
이후에 표시되는 페이지를 클릭하여 넘깁니다.
- 이용약관에 동의합니다.
- 임시 계정이므로 복구 옵션이나 2단계 인증을 추가하지 않습니다.
- 무료 체험판을 신청하지 않습니다.
잠시 후 Google Cloud 콘솔이 이 탭에서 열립니다.
참고: Google Cloud 제품 및 서비스 목록이 있는 메뉴를 보려면 왼쪽 상단의 탐색 메뉴를 클릭하거나 검색창에 제품 또는 서비스 이름을 입력합니다.
초기 로그인 단계를 완료하면 프로젝트 대시보드가 표시됩니다.

Cloud Shell 열기
대부분의 작업은 Cloud Shell에서 수행합니다. Cloud Shell은 Google Cloud에서 실행되는 명령줄 환경입니다. 이 Debian 기반 가상 머신은 필요한 모든 관리 도구(예: docker
, gcloud, gsutil
, kubectl
)와 함께 로드되며, 영구 5GB 홈 디렉터리를 제공합니다.
- Google Cloud 콘솔 제목 표시줄에서 Cloud Shell 활성화(
)를 클릭합니다.
-
계속을 클릭합니다.
프로비저닝이 완료되면 Cloud Shell 프롬프트가 표시됩니다.

작업 1. GKE 클러스터 배포하기
이 작업에서는 Cloud Shell을 사용하여 GKE 클러스터를 배포합니다.
- Cloud Shell에서 다음 명령어를 입력하여 영역 및 클러스터 이름의 환경 변수를 설정합니다.
export my_region={{{project_0.default_region|Region}}}
export my_cluster=autopilot-cluster-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 > 클러스터 페이지가 스크린샷처럼 표시됩니다.

내 진행 상황 확인하기를 클릭하여 목표를 확인합니다.
GKE 클러스터 배포하기
작업 2. GKE 클러스터에 연결하기
이 작업에서는 Cloud Shell을 사용하여 GKE 클러스터에 인증한 다음, kubectl 구성 파일을 검사합니다.
Kubernetes의 인증은 마스터에서 실행되는 kube-APIserver를 통해 외부 클라이언트의 클러스터와 진행하는 통신, 클러스터 안팎에서 진행하는 클러스터 컨테이너 통신에 모두 적용됩니다.
Kubernetes에서 인증은 여러 형식을 취할 수 있습니다. GKE의 경우 인증은 일반적으로 OAuth2 토큰으로 처리되며 전체적으로 프로젝트 전반에서 Cloud Identity and Access Management를 통해 관리할 수 있습니다. 원하는 경우에는 각 클러스터 내에서 정의 및 구성할 수 있는 역할 기반 액세스 제어를 통해 관리할 수 있습니다.
GKE에서 클러스터 컨테이너는 서비스 계정을 사용하여 외부 리소스에 인증하고 액세스할 수 있습니다.
참고: Kubernetes 1.12 이전 버전의 경우 클라이언트 인증서 및 기본 인증이 기본적으로 사용 중지되어 있지 않습니다. 이러한 인증 방법은 보안 수준이 낮으므로 클러스터 보안을 강화하려면 사용 중지해야 합니다. (1.12 이상 버전에서는 두 가지 방법이 모두 기본적으로 사용 중지되어 있습니다.)
- 현재 사용자의 사용자 인증 정보로 kubeconfig 파일을 만들고(인증을 허용하기 위해) 특정 클러스터에 대한 엔드포인트 세부정보를 제공하려면(
kubectl
명령줄 도구를 통해 해당 클러스터와 통신하기 위해) 다음 명령어를 실행합니다.
gcloud container clusters get-credentials $my_cluster --region $my_region
이 명령어는 홈 디렉터리에 .kube
디렉터리를 만듭니다(아직 없는 경우). .kube
디렉터리에서 이 명령어는 인증 및 구성 정보를 저장하는 데 사용되는 config
라는 파일을 만듭니다(아직 없는 경우). 구성 파일은 일반적으로 kubeconfig 파일이라고 합니다.
- nano 텍스트 편집기로 kubeconfig 파일을 엽니다.
nano ~/.kube/config
이제 파일에 저장된 모든 인증 및 엔드포인트 구성 데이터를 검사할 수 있습니다. 클러스터에 관한 정보가 표시되어야 합니다. 정보는 클러스터가 만들어질 때 채워졌습니다.
- 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 호출을 트리거하여 관련 작업을 트리거합니다.
- Cloud Shell에서 다음 명령어를 실행하여 kubeconfig 파일의 콘텐츠를 출력합니다.
kubectl config view
민감한 인증서 데이터는 DATA+OMITTED로 대체됩니다.
- 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'.
- 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
속성에 있는 정보와 동일합니다.
- Cloud Shell에서 다음 명령어를 실행하여 kubeconfig 파일의 모든 클러스터 컨텍스트에 대한 일부 세부정보를 출력합니다.
kubectl config get-contexts
여러 출력 행이 사용자가 만든 클러스터에 대한 세부정보와 활성 컨텍스트 클러스터를 나타냅니다. 일반적으로 이 명령어는 사용자가 만들거나 kubeconfig 파일에 직접 추가한 다른 클러스터를 비롯하여 사용자의 kubeconfig 파일에 있는 클러스터의 일부 세부정보를 나열합니다.
- Cloud Shell에서 다음 명령어를 실행하여 활성 컨텍스트를 변경합니다.
kubectl config use-context gke_${DEVSHELL_PROJECT_ID}_{{{project_0.default_region|Region}}}_autopilot-cluster-1
이 경우 클러스터가 하나뿐이므로 이 명령어로 인해 변경되는 사항은 없습니다.
그러나 앞으로는 프로젝트에 클러스터가 두 개 이상 있을 수 있습니다. kubeconfig 파일에 여러 클러스터에 대한 사용자 인증 정보 및 구성이 이미 채워져 있는 경우 이 접근 방식을 사용하여 활성 컨텍스트를 전환할 수 있습니다. 이 접근 방식을 사용하려면 gke
프리픽스, 프로젝트 ID, 위치, 표시 이름이 모두 밑줄로 연결된 클러스터의 전체 이름이 필요합니다.
- Cloud Shell에서 다음 명령어를 실행하여
kubectl
의 Bash 자동 완성을 사용 설정합니다.
source <(kubectl completion bash)
이 명령어는 출력을 생성하지 않습니다.
- Cloud Shell에서 kubectl 뒤에 공백을 한 칸 입력하고 Tab 키를 두 번 누릅니다.
셸이 가능한 모든 명령어를 출력합니다.

- Cloud Shell에서 kubectl co를 입력하고 Tab 키를 두 번 누릅니다.
셸이 'co'(또는 사용자가 입력한 다른 텍스트)로 시작하는 모든 명령어를 출력합니다.

작업 4. GKE 클러스터에 포드 배포하기
이 작업에서는 Cloud Shell을 사용하여 GKE 클러스터에 포드를 배포합니다.
kubectl을 사용하여 GKE에 포드 배포하기
Kubernetes는 포드의 추상화를 도입하여 하나 이상의 관련 컨테이너를 동일한 노드의 단위로 예약 및 배포할 단일 항목으로 그룹화합니다. 단일 컨테이너 이미지의 단일 컨테이너인 포드를 배포할 수 있습니다. 또는 포드는 여러 컨테이너 이미지의 여러 컨테이너를 포함할 수 있습니다.
- Cloud Shell에서 다음 명령어를 실행하여 nginx를 nginx-1이라는 이름의 포드로 배포합니다.
kubectl create deployment --image nginx nginx-1
이 명령어는 nginx 이미지를 실행하는 컨테이너로 nginx라는 이름의 포드를 만듭니다. 저장소가 지정되어 있지 않은 경우 기본 동작은 로컬 또는 Docker 공개 레지스트리에서 이미지를 찾는 것입니다. 이 경우 이미지는 Docker 공개 레지스트리에서 가져옵니다.
- Cloud Shell에서 다음 명령어를 실행하여 활성 컨텍스트 클러스터에 배포된 모든 포드를 확인합니다.
kubectl get pods
출력은 다음 예와 같이 표시됩니다(단, 포드 이름은 약간 다름).
참고: 서버가 현재 요청을 처리할 수 없다는 메시지가 표시되면 배포가 완료되어 준비될 때까지 기다립니다.
출력:
NAME READY STATUS RESTARTS AGE
nginx-1-74c7bbdb84-nvwsc 1/1 Running 0 2m52s
- Cloud Shell에서 다음 명령어를 실행하여 클러스터 노드 전반의 리소스 사용량을 확인합니다.
kubectl top node
출력은 다음과 같이 표시됩니다.
출력:
NAME CPU(cores) CPU% MEMORY(bytes) MEMORY%
gk3-autopilot-cluster-1-pool-2-7246ae0e-4q7s 1971m 102% 1803Mi 30%
참고: metrics not available yet
오류가 표시되면 위의 명령어를 다시 실행합니다.
또 다른 top
명령어(kubectl top pods
)는 클러스터에 배포된 모든 포드에 걸쳐 유사한 정보를 표시합니다.
- 이제 이 실습에서 사용할 변수에 포드 이름을 입력합니다. 이와 같은 변수를 사용하면 긴 이름을 입력할 때 사람의 실수를 최소화할 수 있습니다.
[your_pod_name]
대신 포드의 고유한 이름을 입력해야 합니다.
export my_nginx_pod=[your_pod_name]
예:
export my_nginx_pod=nginx-1-74c7bbdb84-nvwsc
- 셸이 값을 동일하게 표시하도록 하여 환경 변수를 성공적으로 설정했는지 확인합니다.
echo $my_nginx_pod
출력:
nginx-1-74c7bbdb84-nvwsc
- 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 웹 서버를 통해 정적 콘텐츠를 제공하려면 파일을 만들어 컨테이너에 배치해야 합니다.
- Cloud Shell에서 다음 명령어를 입력하여 nano 텍스트 편집기에서
test.html
이라는 이름의 파일을 엽니다.
nano ~/test.html
- 빈
test.html
파일에 다음 텍스트(셸 스크립트)를 추가합니다.
Hello World
-
Ctrl+X 키를 누른 다음, Y를 누르고 Enter 키를 눌러 파일을 저장하고 nano 편집기를 종료합니다.
-
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
옵션을 사용하여 다중 컨테이너 포드에 다른 컨테이너를 지정할 수 있습니다.
테스트를 위해 포드 노출하기
클러스터 외부의 클라이언트에 포드를 노출하려면 서비스가 필요합니다. 서비스는 과정의 다른 곳에서 논의되며, 다른 실습에서 광범위하게 사용됩니다. 간단한 명령어를 사용하여 포드를 노출하는 서비스를 만들 수 있습니다.
- Cloud Shell에서 다음 명령어를 실행하여 nginx 포드를 외부에 노출하는 서비스를 만듭니다.
kubectl expose pod $my_nginx_pod --port 80 --type LoadBalancer
이 명령어는 클러스터 외부의 인터넷 주소에서 nginx 포드에 액세스할 수 있도록 허용하는 LoadBalancer 서비스를 만듭니다.
- 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 클러스터에 포드 배포하기
- Cloud Shell에서 다음 명령어를 실행하여 nginx 컨테이너가 복사된 정적 HTML 파일을 제공하는지 확인합니다.
[EXTERNAL_IP]를 이전 단계의 출력에서 얻은 서비스의 외부 IP 주소로 바꿉니다.
curl http://[EXTERNAL_IP]/test.html
파일 콘텐츠가 출력에 나타납니다. 브라우저에서 동일한 주소로 이동하여 HTML로 렌더링된 파일을 확인할 수 있습니다.
예:
Hello World
- Cloud Shell에서 다음 명령어를 실행하여 nginx 포드가 사용 중인 리소스를 확인합니다.
kubectl top pods
출력:
NAME CPU(cores) MEMORY(bytes)
nginx-1-74c7bbdb84-nvwsc 0m 2Mi
작업 5. GKE 포드 검사하기
이 작업에서는 포드에 연결하여 설정을 조정하고, 파일을 수정하고, 포드를 실시간으로 변경합니다.
참고: 이 프로세스는 문제를 해결하거나 실험할 때만 사용하세요. 변경사항은 포드의 소스 이미지에 적용되지 않으므로 복제본에 반영되지 않습니다.
환경 준비하기
포드 및 기타 리소스를 Kubernetes에 배포하려면 매니페스트 파일이라고도 하는 구성 파일을 사용하는 것이 좋습니다. 구성 파일은 일반적으로 리소스의 세부정보를 지정하는 YAML 구문으로 작성됩니다. 구성 파일을 사용하면 긴 명령줄 인수 행을 사용할 때보다 더 쉽게 복잡한 옵션을 지정할 수 있습니다.
YAML 구문은 JSON 구문과 비슷하고 동일한 객체 및 속성 계층 구조를 사용하지만, 그보다 더 간결합니다. 실습용 소스 저장소에는 준비된 샘플 YAML 파일이 포함되어 있습니다.
- Cloud Shell에서 다음 명령어를 입력하여 저장소를 실습용 Cloud Shell로 클론합니다.
git clone https://github.com/GoogleCloudPlatform/training-data-analyst
- 작업 디렉터리로 연결되는 바로가기, 즉 소프트 링크를 생성합니다.
ln -s ~/training-data-analyst/courses/ak8s/v1.1 ~/ak8s
- 이 실습의 샘플 파일이 포함된 디렉터리로 이동합니다.
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
- 매니페스트를 배포하려면 다음 명령어를 실행합니다.
kubectl apply -f ./new-nginx-pod.yaml
참고: 포드 배포가 완료되고 실행 상태로 변경될 때까지 몇 분 정도 기다려야 할 수 있습니다.
내 진행 상황 확인하기를 클릭하여 목표를 확인합니다.
YAML 파일을 사용하여 새로운 포드를 배포합니다.
- 포드의 목록을 보려면 다음 명령어를 실행합니다.
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 셸에 연결해 일련의 작업을 수행합니다.
- Cloud Shell에서 다음 명령어를 실행하여 nginx 컨테이너에서 대화형 bash 셸을 시작합니다.
kubectl exec -it new-nginx -- /bin/bash
새로운 셸 프롬프트가 나타납니다.
출력:
root@new-nginx:/#
new-nginx 포드의 컨테이너에서 대화형 Bash 셸을 시작했습니다. 포드에 컨테이너가 여러 개 있는 경우 -c
옵션이 포함된 이름으로 하나를 지정할 수 있습니다.
nginx 컨테이너 이미지에는 기본적으로 텍스트 편집 도구가 없기 때문에 해당 도구를 설치해야 합니다.
- Cloud Shell의 nginx bash 셸에서 다음 명령어를 실행하여 nano 텍스트 편집기를 설치합니다.
apt-get update
apt-get install nano
Do you want to continue (Y/n) 메시지가 표시되면 Y를 눌러 확인합니다.
nginx 컨테이너의 정적 제공 디렉터리에 test.html
파일을 만들어야 합니다.
- Cloud Shell의 nginx bash 셸에서 다음 명령어를 실행하여 정적 파일 디렉터리로 전환하고
test.html
파일을 만듭니다.
cd /usr/share/nginx/html
nano test.html
- Cloud Shell의 nginx Bash 셸 nano 세션에서 다음 텍스트를 입력합니다.
Hello World
- Ctrl+X 키를 누른 다음, Y를 누르고 Enter 키를 눌러 파일을 저장하고 nano 편집기를 종료합니다.
- Cloud Shell의 nginx bash 셸에서 다음 명령어를 실행하여 nginx bash 셸을 종료합니다.
exit
수정된 nginx 컨테이너(새 정적 HTML 파일 포함)에 연결하고 이를 테스트하기 위해 서비스를 만들 수 있습니다. 더 쉬운 방법은 포트 전달을 사용하여 Cloud Shell에서 바로 포드에 연결하는 것입니다.
- 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 인스턴스를 열어야 합니다.
- Cloud Shell 메뉴 바에서 더하기 기호(+) 아이콘을 클릭하여 새 Cloud Shell 세션을 시작합니다.

두 번째 Cloud Shell 세션이 Cloud Shell 창에 표시됩니다. 메뉴 바에서 제목을 클릭하여 세션 간에 전환할 수 있습니다.
- 두 번째 Cloud Shell 세션에서 다음 명령어를 실행하여 포트 전달을 통해 수정된 nginx 컨테이너를 테스트합니다.
curl http://127.0.0.1:10081/test.html
test.html
파일에 배치한 HTML 텍스트가 표시됩니다.
Hello World
포드의 로그 보기
- Cloud Shell 메뉴 바에서 더하기 기호(+) 아이콘을 클릭하여 다른 Cloud Shell 세션을 새로 시작합니다.
세 번째 Cloud Shell 세션이 Cloud Shell 창에 표시됩니다. 이전과 마찬가지로 메뉴 바에서 세션을 클릭하여 전환할 수 있습니다.
- 세 번째 Cloud Shell 창에서 다음 명령어를 실행하여 로그를 표시하고 new-nginx 포드에 대한 새 로그(타임스탬프도 포함)가 도착하면 스트리밍합니다.
kubectl logs new-nginx -f --timestamps
- 이 새 창에 로그가 표시됩니다.
- 두 번째 Cloud Shell 창으로 돌아가 curl 명령어를 다시 실행하여 포드에서 일부 트래픽을 생성합니다.
- 세 번째 Cloud Shell 창에 표시되는 추가 로그 메시지를 검토합니다.

- 로그 메시지 표시를 중지하려면 세 번째 Cloud Shell 창을 닫습니다.
- 포트 전달 프로세스를 중지하려면 원래 Cloud Shell 창을 닫습니다.
실습 종료하기
실습을 완료하면 실습 종료를 클릭합니다. Google Cloud Skills Boost에서 사용된 리소스를 자동으로 삭제하고 계정을 지웁니다.
실습 경험을 평가할 수 있습니다. 해당하는 별표 수를 선택하고 의견을 입력한 후 제출을 클릭합니다.
별점의 의미는 다음과 같습니다.
- 별표 1개 = 매우 불만족
- 별표 2개 = 불만족
- 별표 3개 = 중간
- 별표 4개 = 만족
- 별표 5개 = 매우 만족
의견을 제공하고 싶지 않다면 대화상자를 닫으면 됩니다.
의견이나 제안 또는 수정할 사항이 있다면 지원 탭을 사용하세요.
Copyright 2020 Google LLC All rights reserved. Google 및 Google 로고는 Google LLC의 상표입니다. 기타 모든 회사명 및 제품명은 해당 업체의 상표일 수 있습니다.