✔️ 실습에 앞서
실습 목표
- Kubernetes Engine 을 사용하여 완전한 Kubernetes 클러스터를 프로비저닝하기
- kubectl을 사용하여 Docker 컨테이너를 배포하고 관리하기
- Kubernetes의 배포 및 서비스를 사용하여 애플리케이션을 마이크로서비스로 나누기
✔️ GKE 환경 설정
Cloud Shell 환경에서 다음 명령을 입력하여 영역을 설정한다.
gcloud config set compute/zone us-central1-b
영역을 설정한 후 이 실습에서 사용할 클러스터를 시작한다.
gcloud container clusters create io
✔️ 샘플 코드 받기
Cloud Shell 명령줄에서 GitHub 저장소를 복제한다.
gsutil cp -r gs://spls/gsp021/* .
실습에 필요한 디렉토리로 변경한다.
cd orchestrate-with-kubernetes/kubernetes
파일을 나열해 작업 중인 항목을 확인한다.
ls
쿠버네티스 사용 가능 !
✔️ Quick Kubernetes Demo
Kubernetes를 시작하는 가장 쉬운 방법은 kubectl create명령을 사용하는 것이다.
이를 사용하여 nginx 컨테이너의 단일 인스턴스를 시작한다.
kubectl create deployment nginx --image=nginx:1.10.0
Kubernetes는 Deployment를 만들었다.
Deployment는 실행하는 노드가 실패할 때에도 포드를 계속 가동시키고 있다.
쿠버네티스에서는 모든 컨테이너가 포드로 움직인다.
kubectl get pods 명령을 사용하여 실행중인 nginx 컨테이너를 확인한다.
kubectl get pods
nginx 컨테이너가 실행 상태가 되면 kubectl 노출 명령을 사용하여 Kubernetes 외부에 노출할 수 있다. (로드밸런서 사용)
kubectl expose deployment nginx --port 80 --type LoadBalancer
Kubernetes는 공용 IP 주소가 첨부된 외부로드 밸런서를 만들었다.
그 공공 IP 주소를 건드리는 모든 클라이언트는 서비스 뒤에 있는 포드로 라우팅될 것이다.
이 경우에는 nginx pod가 될 것이다.
kubectl get 서비스 명령을 사용하여 현재 서비스를 나열한다.
kubectl get services
Nginx 컨테이너를 원격으로 접근하기
curl http://<External IP>:80
✔️ Pod
✔️ Creating Pods
포드 구성 파일을 사용하여 포드를 만들 수 있다. 모노리스 포드 구성 파일을 탐색하는 데 잠시 시간이 걸린다.
cat pods/monolith.yaml
apiVersion: v1
kind: Pod
metadata:
name: monolith
labels:
app: monolith
spec:
containers:
- name: monolith
image: kelseyhightower/monolith:1.0.0
args:
- "-http=0.0.0.0:80"
- "-health=0.0.0.0:81"
- "-secret=secret"
ports:
- name: http
containerPort: 80
- name: health
containerPort: 81
resources:
limits:
cpu: 0.2
memory: "10Mi"
다음 .yaml 파일을 보고 알 수 있는 것
- pod가 하나의 컨테이너로 이루어져 있다는 것
- 컨테이너가 시작될 때 몇개의 argument를 전달한다는 것
- HTTP 트래픽을 위해 포트 80을 연다는 것
kubectl을 사용해 monolith pod를 생성한다.
kubectl create -f pods/monolith.yaml
포드를 정보를 확인한다. 기본 네임스페이스에서 실행되고 있는 모든 포드를 나열하려면 다음 명령을 사용한다.
kubectl get pods
일단 pod가 실행되면 kubectl을 사용하는 것은 monolith pod에 대한 더 많은 정보를 얻는 명령이다.
kubectl describe pods monolith
포드 IP 주소 및 이벤트 로그를 포함해 monolith 포드에 대한 많은 정보를 볼 수 있다.
이 정보는 트러블 슈팅에 도움이 된다.
Kubernetes는 구성 파일에 포드를 기술함으로써 포드를 쉽게 만들 수 있으며 실행 중일 때 포드에 대한 정보를 쉽게 볼 수 있습니다. 이 시점에서 Deployment가 필요로 하는 모든 포드를 작성할 수 있다.
✔️ Interacting Pods
기본적으로 포드에는 Priavte IP 주소가 할당되며 클러스터 외부에서 연결할 수 없다.
로컬 포트를 monolith 포드 내의 포트에 매핑하려면 kubectl port-forward 명령을 사용한다.
이 시점부터 실습에서는 여러 클라우드 셸 탭에서 작업하여 포드 간의 통신을 설정하도록 요청한다.
두 번째 또는 세 번째 명령 셸에서 실행되는 모든 명령은 command's instructions에 표시된다.
두번째 Cloud Shell terminal을 연다. 이제 2개의 터미널을 가지고 하나의 터미널에는 kubectl port-forward command를 실행하고 다른 하나에는 curl 명령을 실행한다.
두번째 터미널에서 다음 명령을 실행해 포트 포워딩을 설정한다.
kubectl port-forward monolith 10080:80
이제 첫번째 터미널에서 curl을 사용해 pod와 대화한다.
curl http://127.0.0.1:10080
컨테이너에서 "hello"를 받는다.
이제 curl 명령어를 사용하여 secure endpoint에 도달했을 때 어떤 일이 일어나는지 확인한다.
curl http://127.0.0.1:10080/secure
로그인하여 monolith에서 인증 토큰을 받는다.
curl -u user http://127.0.0.1:10080/login
로그인 프롬프트에서 super-secret 비밀번호 "password"를 사용하여 로그인합니다.
로그인하면 JWT 토큰이 출력된다. Cloud Shell은 긴 문자열 복사를 잘 처리하지 않으므로 토큰에 대한 환경 변수를 생성한다.
TOKEN=$(curl http://127.0.0.1:10080/login -u user|jq -r '.token')
호스트 암호를 입력하라는 메시지가 표시되면 super-secret password "password"를 다시 입력합니다.
다음 명령을 사용하여 복사한 후 토큰을 사용하고 curl을 이용해 secure enpoint에 접근한다.
curl -H "Authorization: Bearer $TOKEN" http://127.0.0.1:10080/secure
이제부터 어플리케이션으로부터 응답을 얻을 수 있다. 어플리케이션은 정상적으로 돌아가고 있다는 것을 알려준다.
monolith pod의 로그를 보려면 kubectl logs 명령을 사용한다.
kubectl logs monolith
세번째 터미널을 열고 -f 플래그를 사용해 실시간으로 발생하는 로그 스트림을 가져온다.
kubectl logs -f monolith
첫 번째 터미널에서 monolith와 상호 작용하기위해 curl을 사용한다면 로그가 업데이트되는 것을 볼 수 있다.(세 번째 터미널에서)
curl http://127.0.0.1:10080
monolith pod 내부에서 interactive shell을 실행하려면 kubectl exec 명령을 사용한다.
이것은 컨테이너 내에서 트러블 슈팅을 실시할 때 편리하다.
kubectl exec monolith --stdin --tty -c monolith /bin/sh
예를 들어. 셸을 monolith 컨테이너에 삽입하면 ping 명령을 사용해 외부 연결을 테스트할 수 있다.
ping -c 3 google.com
이 interactive shell이 끝나면 로그아웃 해야한다.
exit
파드간 상호작용 하는 것은 kubectl 명령을 사용하는 것 만큼이나 쉽다.
컨테니어네 원격으로 접근해야 할 필요가 있거나 로그인 셸을 취득할 필요가 있는 경우 쿠버네티스가 기동 및 운용에 필요한 모든 것을 제공한다.
'Study > Study Jam' 카테고리의 다른 글
[Study Jam] Introduce to Docker (도커 입문) - 2. Debug, Publish (0) | 2022.03.24 |
---|---|
[Study Jam] Introduce to Docker (도커 입문) - 1. Build, Run (0) | 2022.03.24 |
[Study Jam] Orchestrating the Cloud with Kubernetes - 2 (0) | 2022.03.24 |
[Study Jam] 네트워크 및 로드밸런서 설정하기 (0) | 2022.03.23 |
[Study Jam] GKE(Google Kubernetes Engine)로 어플리케이션 배포해보기 (0) | 2022.03.23 |
영차영차 성장 블로그
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!