체크포인트
Deploy GKE clusters
/ 30
Deploy Pods to GKE clusters
/ 35
Deploy a new pod using a Yaml file
/ 35
Cloud Shell에서 GKE Autopilot 클러스터 배포하기
개요
이 실습에서는 명령줄을 사용하여 GKE 클러스터를 빌드합니다. kubeconfig 파일을 검사하고 kubectl
을 사용하여 클러스터를 조작합니다.
목표
이 실습에서는 다음 작업을 수행하는 방법을 알아봅니다.
-
kubectl
을 사용하여 GKE 클러스터 빌드 및 조작하기 -
kubectl
및 구성 파일을 사용하여 포드 배포하기 - Container Registry를 사용하여 컨테이너를 저장하고 배포하기
실습 설정
Qwiklabs에 액세스하기
각 실습에서는 정해진 기간 동안 새 Google Cloud 프로젝트와 리소스 집합이 무료로 제공됩니다.
-
시크릿 창을 사용하여 Qwiklabs에 로그인합니다.
-
실습 사용 가능 시간(예:
1:15:00
)을 참고하여 해당 시간 내에 완료합니다.
일시중지 기능은 없습니다. 필요한 경우 다시 시작할 수 있지만 처음부터 시작해야 합니다. -
준비가 되면 실습 시작을 클릭합니다.
-
실습 사용자 인증 정보(사용자 이름 및 비밀번호)를 기록해 두세요. Google Cloud Console에 로그인합니다.
-
Google Console 열기를 클릭합니다.
-
다른 계정 사용을 클릭한 다음, 안내 메시지에 이 실습에 대한 사용자 인증 정보를 복사하여 붙여넣습니다.
다른 사용자 인증 정보를 사용하는 경우 오류가 발생하거나 요금이 부과됩니다. -
약관에 동의하고 리소스 복구 페이지를 건너뜁니다.
초기 로그인 단계를 완료하면 프로젝트 대시보드가 표시됩니다.
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에서 다음 명령어를 입력하여 영역 및 클러스터 이름의 환경 변수를 설정합니다.
- Cloud Shell에서 다음 명령어를 입력하여 Kubernetes 클러스터를 만듭니다.
이 명령 형식은 대부분의 옵션을 기본값으로 설정합니다. 가능한 옵션의 전체 세트를 보려면 gcloud container clusters create 참조 문서를 참고하세요.
GKE가 최신 버전의 Kubernetes를 채택함에 따라 도입된 기본 GKE 클러스터 설정의 변경사항을 강조하는 경고가 여러 개 표시됩니다.
배포가 완료되면 Google Cloud 콘솔 Kubernetes Engine > 클러스터 페이지가 스크린샷처럼 표시됩니다.
내 진행 상황 확인하기를 클릭하여 목표를 확인합니다.
작업 2. GKE 클러스터에 연결하기
이 작업에서는 Cloud Shell을 사용하여 GKE 클러스터에 인증한 다음, kubectl 구성 파일을 검사합니다.
Kubernetes의 인증은 마스터에서 실행되는 kube-APIserver를 통해 외부 클라이언트의 클러스터와 진행하는 통신과 클러스터 내에서 또는 외부에서 진행하는 클러스터 컨테이너 통신에 모두 적용됩니다.
Kubernetes에서 인증은 여러 형식을 취할 수 있습니다. GKE의 경우 인증은 일반적으로 OAuth2 토큰으로 처리되며 전체적으로 프로젝트 전반에서 Cloud Identity and Access Management를 통해 관리할 수 있습니다. 원하는 경우에는 각 클러스터 내에서 정의 및 구성할 수 있는 역할 기반 액세스 제어를 통해 관리할 수 있습니다.
GKE에서 클러스터 컨테이너는 서비스 계정을 사용하여 외부 리소스에 인증하고 액세스할 수 있습니다.
- 현재 사용자의 사용자 인증 정보로 kubeconfig 파일을 만들고(인증을 허용하기 위해) 특정 클러스터에 대한 엔드포인트 세부정보를 제공하려면(
kubectl
명령줄 도구를 통해 해당 클러스터와 통신하기 위해) 다음 명령어를 실행합니다.
이 명령어는 홈 디렉터리에 .kube
디렉터리를 만듭니다(아직 없는 경우). .kube
디렉터리에서 이 명령어는 인증 및 구성 정보를 저장하는 데 사용되는 config
라는 파일을 만듭니다(아직 없는 경우). 구성 파일은 일반적으로 kubeconfig 파일이라고 합니다.
- nano 텍스트 편집기로 kubeconfig 파일을 엽니다.
이제 파일에 저장된 모든 인증 및 엔드포인트 구성 데이터를 검사할 수 있습니다. 클러스터에 관한 정보가 표시되어야 합니다. 정보는 클러스터가 만들어질 때 채워졌습니다.
- Ctrl+X 키를 눌러 nano 편집기를 종료합니다.
kubectl
명령어가 조작하는 클러스터)는 current-context
속성으로 표시됩니다.
gcloud container clusters get-credentials
명령어를 실행하여 동일한 컨텍스트(동일한 환경의 동일한 사용자)에서 만든 클러스터의 kubeconfig 파일을 채울 필요는 없습니다. 이러한 클러스터의 경우 클러스터가 만들어질 때 이미 세부정보가 채워졌기 때문입니다. 그러나 다른 사용자가 만들거나 다른 환경에서 만들어진 클러스터에 연결하려면 명령어를 실행해야 합니다. 이 명령어를 사용하면 활성 컨텍스트를 다른 클러스터로 쉽게 전환할 수도 있습니다.
작업 3. kubectl을 사용하여 GKE 클러스터 검사하기
이 작업에서는 Cloud Shell 및 kubectl을 사용하여 GKE 클러스터를 검사합니다.
kubeconfig 파일이 채워지고 활성 컨텍스트가 특정 클러스터로 설정되고 나면 kubectl
명령줄 도구를 사용하여 클러스터에 대해 명령어를 실행할 수 있습니다. 이러한 명령어는 대부분 궁극적으로 마스터 API 서버에 대해 REST API 호출을 트리거하여 관련 작업을 트리거합니다.
- Cloud Shell에서 다음 명령어를 실행하여 kubeconfig 파일의 콘텐츠를 출력합니다.
민감한 인증서 데이터는 DATA+OMITTED로 대체됩니다.
- Cloud Shell에서 다음 명령어를 실행하여 활성 컨텍스트의 클러스터 정보를 출력합니다.
출력에는 활성 컨텍스트 클러스터에 대한 설명이 표시됩니다.
출력:
- Cloud Shell에서 다음 명령어를 실행하여 활성 컨텍스트를 출력합니다.
출력 행은 활성 컨텍스트 클러스터를 나타냅니다.
출력:
PROJECT_ID
는 프로젝트 ID입니다. 이 정보는 kubeconfig 파일의 current-context
속성에 있는 정보와 동일합니다.
- Cloud Shell에서 다음 명령어를 실행하여 kubeconfig 파일의 모든 클러스터 컨텍스트에 대한 일부 세부정보를 출력합니다.
여러 출력 행이 사용자가 만든 클러스터에 대한 세부정보와 활성 컨텍스트 클러스터를 나타냅니다. 일반적으로 이 명령어는 사용자가 만들거나 kubeconfig 파일에 직접 추가한 다른 클러스터를 비롯하여 사용자의 kubeconfig 파일에 있는 클러스터의 일부 세부정보를 나열합니다.
- Cloud Shell에서 다음 명령어를 실행하여 활성 컨텍스트를 변경합니다.
이 경우 클러스터가 하나뿐이므로 이 명령어로 인해 변경되는 사항은 없습니다.
그러나 앞으로는 프로젝트에 클러스터가 두 개 이상 있을 수 있습니다. kubeconfig 파일에 여러 클러스터에 대한 사용자 인증 정보 및 구성이 이미 채워져 있는 경우 이 접근 방식을 사용하여 활성 컨텍스트를 전환할 수 있습니다. 이 접근 방식을 사용하려면 gke
프리픽스, 프로젝트 ID, 위치, 표시 이름이 모두 밑줄로 연결된 클러스터의 전체 이름이 필요합니다.
- Cloud Shell에서 다음 명령어를 실행하여
kubectl
의 Bash 자동 완성을 사용 설정합니다.
이 명령어는 출력을 생성하지 않습니다.
- Cloud Shell에서 kubectl 뒤에 공백을 한 칸 입력하고 Tab 키를 두 번 누릅니다.
셸이 가능한 모든 명령어를 출력합니다.
- Cloud Shell에서 kubectl co를 입력하고 Tab 키를 두 번 누릅니다.
셸이 'co'(또는 사용자가 입력한 다른 텍스트)로 시작하는 모든 명령어를 출력합니다.
작업 4. GKE 클러스터에 포드 배포하기
이 작업에서는 Cloud Shell을 사용하여 GKE 클러스터에 포드를 배포합니다.
kubectl을 사용하여 GKE에 포드 배포하기
Kubernetes는 포드의 추상화를 도입하여 하나 이상의 관련 컨테이너를 동일한 노드의 단위로 예약 및 배포할 단일 항목으로 그룹화합니다. 단일 컨테이너 이미지의 단일 컨테이너인 포드를 배포할 수 있습니다. 또는 포드는 여러 컨테이너 이미지의 여러 컨테이너를 포함할 수 있습니다.
- Cloud Shell에서 다음 명령어를 실행하여 nginx를 nginx-1이라는 이름의 포드로 배포합니다.
이 명령어는 nginx 이미지를 실행하는 컨테이너로 nginx라는 이름의 포드를 만듭니다. 저장소가 지정되어 있지 않은 경우 기본 동작은 로컬 또는 Docker 공개 레지스트리에서 이미지를 찾는 것입니다. 이 경우 이미지는 Docker 공개 레지스트리에서 가져옵니다.
- Cloud Shell에서 다음 명령어를 실행하여 활성 컨텍스트 클러스터에 배포된 모든 포드를 확인합니다.
출력은 다음 예와 같이 표시됩니다(단, 포드 이름은 약간 다름).
출력:
- Cloud Shell에서 다음 명령어를 실행하여 클러스터 노드 전반의 리소스 사용량을 확인합니다.
출력은 다음과 같이 표시됩니다.
출력:
또 다른 top
명령어(kubectl top pods
)는 클러스터에 배포된 모든 포드에 걸쳐 유사한 정보를 표시합니다.
- 이제 이 실습에서 사용할 변수에 포드 이름을 입력합니다. 이와 같은 변수를 사용하면 긴 이름을 입력할 때 사람의 실수를 최소화할 수 있습니다.
[your_pod_name]
대신 포드의 고유한 이름을 입력해야 합니다.
예:
- 셸이 값을 동일하게 표시하도록 하여 환경 변수를 성공적으로 설정했는지 확인합니다.
출력:
- Cloud Shell에서 다음 명령어를 실행하여 방금 만든 포드의 전체 세부정보를 확인합니다.
출력은 다음과 같이 표시됩니다. 포드의 세부정보와 상태, 조건, 수명 주기의 이벤트가 표시됩니다.
출력:
컨테이너에 파일 푸시하기
nginx 웹 서버를 통해 정적 콘텐츠를 제공하려면 파일을 만들어 컨테이너에 배치해야 합니다.
- Cloud Shell에서 다음 명령어를 입력하여 nano 텍스트 편집기에서
test.html
이라는 이름의 파일을 엽니다.
- 빈
test.html
파일에 다음 텍스트(셸 스크립트)를 추가합니다.
-
Ctrl+X 키를 누른 다음, Y를 누르고 Enter 키를 눌러 파일을 저장하고 nano 편집기를 종료합니다.
-
Cloud Shell에서 다음 명령어를 실행하여 정적으로 제공될 nginx 포드의 nginx 컨테이너 내의 적절한 위치에 파일을 배치합니다.
이 명령어는 로컬 홈 디렉터리의 test.html
파일을 nginx 포드에 있는 첫 번째 컨테이너의 /usr/share/nginx/html
디렉터리에 복사합니다. 컨테이너 이름 앞에 -c
옵션을 사용하여 다중 컨테이너 포드에 다른 컨테이너를 지정할 수 있습니다.
테스트를 위해 포드 노출하기
클러스터 외부의 클라이언트에 포드를 노출하려면 서비스가 필요합니다. 서비스는 과정의 다른 곳에서 논의되며, 다른 실습에서 광범위하게 사용됩니다. 간단한 명령어를 사용하여 포드를 노출하는 서비스를 만들 수 있습니다.
- Cloud Shell에서 다음 명령어를 실행하여 nginx 포드를 외부에 노출하는 서비스를 만듭니다.
이 명령어는 클러스터 외부의 인터넷 주소에서 nginx 포드에 액세스할 수 있도록 허용하는 LoadBalancer 서비스를 만듭니다.
- Cloud Shell에서 다음 명령어를 실행하여 클러스터의 서비스에 대한 세부정보를 확인합니다.
출력은 다음과 같이 표시됩니다. 다음 단계에서는 외부 IP 주소를 사용합니다.
출력:
Kubernetes 서비스는 클러스터가 만들거나 사용하는 기본 서비스 중 하나입니다. 사용자가 만든 nginx 서비스도 표시됩니다.
외부 IP 주소가 표시될 때까지 이 명령어를 여러 번 다시 실행해야 할 수 있습니다.
출력:
내 진행 상황 확인하기를 클릭하여 목표를 확인합니다.
- Cloud Shell에서 다음 명령어를 실행하여 nginx 컨테이너가 복사된 정적 HTML 파일을 제공하는지 확인합니다.
[EXTERNAL_IP]를 이전 단계의 출력에서 얻은 서비스의 외부 IP 주소로 바꿉니다.
파일 콘텐츠가 출력에 나타납니다. 브라우저에서 동일한 주소로 이동하여 HTML로 렌더링된 파일을 확인할 수 있습니다.
예:
- Cloud Shell에서 다음 명령어를 실행하여 nginx 포드가 사용 중인 리소스를 확인합니다.
출력:
작업 5. GKE 포드 검사하기
이 작업에서는 포드에 연결하여 설정을 조정하고, 파일을 수정하고, 포드를 실시간으로 변경합니다.
환경 준비하기
포드 및 기타 리소스를 Kubernetes에 배포하려면 매니페스트 파일이라고도 하는 구성 파일을 사용하는 것이 좋습니다. 구성 파일은 일반적으로 리소스의 세부정보를 지정하는 YAML 구문으로 작성됩니다. 구성 파일을 사용하면 긴 명령줄 인수 행을 사용할 때보다 더 쉽게 복잡한 옵션을 지정할 수 있습니다.
YAML 구문은 JSON 구문과 비슷하고 동일한 객체 및 속성 계층 구조를 사용하지만, 그보다 더 간결합니다. 실습용 소스 저장소에는 준비된 샘플 YAML 파일이 포함되어 있습니다.
- Cloud Shell에서 다음 명령어를 입력하여 저장소를 실습용 Cloud Shell로 클론합니다.
- 작업 디렉터리로 연결되는 바로가기, 즉 소프트 링크를 생성합니다.
- 이 실습의 샘플 파일이 포함된 디렉터리로 이동합니다.
new-nginx-pod.yaml
이라는 포드의 샘플 매니페스트 YAML 파일이 제공되었습니다.
- 매니페스트를 배포하려면 다음 명령어를 실행합니다.
내 진행 상황 확인하기를 클릭하여 목표를 확인합니다.
- 포드의 목록을 보려면 다음 명령어를 실행합니다.
출력은 다음 예와 같이 표시됩니다.
출력:
새 nginx 포드와 실습의 앞부분에서 만든 포드를 확인할 수 있습니다.
셸 리디렉션을 사용하여 포드에 연결하기
일부 컨테이너 이미지에는 실행할 수 있는 셸 환경이 포함되어 있습니다. 이 셸 환경은 kubectl
을 사용하여 개별 명령어를 실행하는 것보다 더 편리할 수 있습니다. 예를 들어 nginx 이미지에는 bash 셸이 포함되어 있습니다. 이 작업에서는 셸 리디렉션을 사용하여 새 nginx 포드의 bash 셸에 연결해 일련의 작업을 수행합니다.
- Cloud Shell에서 다음 명령어를 실행하여 nginx 컨테이너에서 대화형 bash 셸을 시작합니다.
새로운 셸 프롬프트가 나타납니다.
출력:
new-nginx 포드의 컨테이너에서 대화형 Bash 셸을 시작했습니다. 포드에 컨테이너가 여러 개 있는 경우 -c
옵션이 포함된 이름으로 하나를 지정할 수 있습니다.
nginx 컨테이너 이미지에는 기본적으로 텍스트 편집 도구가 없기 때문에 해당 도구를 설치해야 합니다.
- Cloud Shell의 nginx bash 셸에서 다음 명령어를 실행하여 nano 텍스트 편집기를 설치합니다.
Do you want to continue (Y/n) 메시지가 표시되면 Y를 눌러 확인합니다.
nginx 컨테이너의 정적 제공 디렉터리에 test.html
파일을 만들어야 합니다.
- Cloud Shell의 nginx bash 셸에서 다음 명령어를 실행하여 정적 파일 디렉터리로 전환하고
test.html
파일을 만듭니다.
- Cloud Shell의 nginx Bash 셸 nano 세션에서 다음 텍스트를 입력합니다.
- Ctrl+X 키를 누른 다음, Y를 누르고 Enter 키를 눌러 파일을 저장하고 nano 편집기를 종료합니다.
- Cloud Shell의 nginx bash 셸에서 다음 명령어를 실행하여 nginx bash 셸을 종료합니다.
수정된 nginx 컨테이너(새 정적 HTML 파일 포함)에 연결하고 이를 테스트하기 위해 서비스를 만들 수 있습니다. 더 쉬운 방법은 포트 전달을 사용하여 Cloud Shell에서 바로 포드에 연결하는 것입니다.
- Cloud Shell에서 다음 명령어를 실행하여 Cloud Shell에서 nginx 포드로 포트 전달을 설정합니다(Cloud Shell VM의 포트 10081에서 nginx 컨테이너의 포트 80으로).
출력은 다음 예와 같이 표시됩니다.
출력:
이는 포그라운드 프로세스이므로 테스트하려면 다른 Cloud Shell 인스턴스를 열어야 합니다.
- Cloud Shell 메뉴 바에서 더하기 기호(+) 아이콘을 클릭하여 새 Cloud Shell 세션을 시작합니다.
두 번째 Cloud Shell 세션이 Cloud Shell 창에 표시됩니다. 메뉴 바에서 제목을 클릭하여 세션 간에 전환할 수 있습니다.
- 두 번째 Cloud Shell 세션에서 다음 명령어를 실행하여 포트 전달을 통해 수정된 nginx 컨테이너를 테스트합니다.
test.html
파일에 배치한 HTML 텍스트가 표시됩니다.
포드의 로그 보기
- Cloud Shell 메뉴 바에서 더하기 기호(+) 아이콘을 클릭하여 다른 Cloud Shell 세션을 새로 시작합니다.
세 번째 Cloud Shell 세션이 Cloud Shell 창에 표시됩니다. 이전과 마찬가지로 메뉴 바에서 세션을 클릭하여 전환할 수 있습니다.
- 세 번째 Cloud Shell 창에서 다음 명령어를 실행하여 로그를 표시하고 new-nginx 포드에 대한 새 로그(타임스탬프도 포함)가 도착하면 스트리밍합니다.
- 이 새 창에 로그가 표시됩니다.
- 두 번째 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의 상표입니다. 기타 모든 회사명 및 제품명은 해당 업체의 상표일 수 있습니다.