JINIers
[PCK] Orchestrating the Cloud with Kubernetes lab(쿠버네티스로 오케스트레이션) 본문
[PCK] Orchestrating the Cloud with Kubernetes lab(쿠버네티스로 오케스트레이션)
JINIers 2022. 1. 31. 17:12※ 수정
220921
목표
1. GKE 사용하여 쿠버네티스 클러스터 프로비저닝
2. kubectl 이용 docker 컨테이너 배포 및 관리
3. 쿠버네티스 배포 및 서비스를 사용하여 어플리케이션을 마이크로서비스로 나눔
실습 시작
1. 설정 및 요구사항
#클라우드 인증목록
gcloud auth list
#클라우드 프로젝트 목록
gcloud config list project
구글 쿠버네티스 엔진
#영역설정
gcloud config set compute/zone us-central1-b
#실습에 사용할 클러스터 생성
gcloud container clusters create io
2. 샘플코드 받기
# gitjub 저장소 복제
gsutil cp -r gs://spls/gsp021/* .
#디렉터리 변경
cd orchestrate-with-kubernetes/kubernetes
ls
3. 빠른 kubernetes 데모
nginx 컨테이너의 단일 인스턴스 시작
kubectl create deployment nginx --image=nginx:1.10.0
실행중인 포드(nginx containar) 확인
kubectl get pods
컨테이너 쿠버네티스 외부에 노출하기
kubectl expose deployment nginx --port 80 --type LoadBalancer
서비스 나열
kubectl get services
nginx 컨테이너를 원격으로 하기 위한 외부 ip 추가
curl http://<nginx External IP>:80
* 대충 한 1분정도 기다리면 external ip 뜸
4. 포드
- pod는 하나 이상의 컨테이너 컬렉션을 나태고 보유함
- 일반적으로 서로에 대한 의존도가 높은 여러 컨테이너가 있는 경우, 컨테이너를 단일 포드 안에 패키징함
-volumes도 있음
* volumes : 포드가 살아있는 동안 지속되는 데이터 디스크, 해당 포드의 컨테이너에서 사용 가능
- 콘텐츠에 대한 공유 네임스페이스를 제공(
- 네트워크 네임스페이스 공유(포드 당 하나의 ip 주소가 있음을 의미)
5. 포드 생성
#포드 구성파일 출력
cat pods/monolith.yaml
#모놀리스 포드 만들기
kubectl create -f pods/monolith.yaml
#포드 나열
kubectl get pods
#모놀리스포드에 대한 추가정보 확인
kubectl describe pods monolith
6. 포드와 상호작용
두번째 터미널에서 실행, 포트 전달 설정(=로컬포트를 모놀리스 포드 내부 포트에 매핑)
kubectl port-forward monolith 10080:80
첫번째 터미널에서 실행, 포드와 대화 시작 (hello 뜨면 성공)
curl http://127.0.0.1:10080
보안 엔드포인트에 도달했을 때 어떤 일이 발생하는 지 확인
curl http://127.0.0.1:10080/secure
모놀리스 인증토큰 다시 받기
curl -u user http://127.0.0.1:10080/login
비밀번호 'password' 입력
토큰 환경변수 만들기
TOKEN=$(curl http://127.0.0.1:10080/login -u user|jq -r '.token')
다시 비밀번호 'password' 입력
복사 토큰 사용보안 끝점에 도달하기
curl -H "Authorization: Bearer $TOKEN" http://127.0.0.1:10080/secure
모노리스 로그 보기
kubectl logs monolith
세번째 터미널에서 사용, 실시간으로 발생하는 로그스트림 보기
kubectl logs -f monolith
첫번째 터미널, 로그 업데이트 명령 시
curl http://127.0.0.1:10080
monolith pod 내 대화형 셸 실행
kubectl exec monolith --stdin --tty -c monolith /bin/sh
이것저것 할 수 있음 가령 핑테스트라던가 핑테스트라던가 핑테스트 같은..(할 줄 아는게 그것뿐이라 눈물이 난다 하
ping -c 2 google.com
그럼 핑 가겠지.. exit로 빠져나옴
7. 서비스
서비스 : pod에 안정적인 엔드포인트 제공
- 레이블을 사용하여 작동하는 pod 결정
* pod에 올바른 레이블이 있으면 자동으로 선택되어 서비스에 노출됨
서비스가 포드 세트에 제공하는 유형 3가지
- ClusterIP(내부) -- 기본 유형은 이 서비스가 클러스터 내부에서만 볼 수 있음을 의미합니다.
- NodePort클러스터의 각 노드에 외부에서 액세스할 수 있는 IP를 제공하고
- LoadBalancer서비스에서 서비스 내의 노드로 트래픽을 전달하는 클라우드 공급자의 로드 밸런서를 추가합니다.
여기서는 이거 만들것임
1. 서비스 만들기
2. 레이블 선택기를 사용하여 제한된 pod 집합을 외부에 노출
8. 서비스 생성
#디렉터리 이동
cd ~/orchestrate-with-kubernetes/kubernetes
#모놀리스 서비스 구성파일 탐색
cat pods/secure-monolith.yaml
[보안 모노리스 pod 및 해당 구성 데이터 작성]
kubectl create secret generic tls-certs --from-file tls/
kubectl create configmap nginx-proxy-conf --from-file nginx/proxy.conf
kubectl create -f pods/secure-monolith.yaml
yaml파일 야물딱지게 보는 법
cat services/monolith.yaml
** 참고
app: monolith및 레이블이 있는 모든 포드를 자동으로 찾고 노출하는 데 사용되는 선택기가 있습니다 secure: enabled.
이제 포트 31000에서 nginx(포트 443)로 외부 트래픽을 전달하는 방법이기 때문에 여기에서 노드 포트를 노출해야 합니다.
#모놀리식 서비스 만들기
kubectl create -f services/monolith.yaml
#방화벽 트래픽 허용
gcloud compute firewall-rules create allow-monolith-nodeport --allow=tcp:31000
#외부 ip 가져오기
gcloud compute instances list
#보안 모놀리스 서비스 접속 시도
curl -k https://<EXTERNAL_IP>:31000
질문!!!!!
kubectl get services monolith / kubectl describe services monolith 사용 확인
- 모노리스 서비스에서 응답을 받을 수 없는 이유는 무엇입니까?
external-ip 없음
- 모놀리스 서비스에는 몇 개의 엔드포인트가 있습니까?
없음
- 모놀리스 서비스에서 Pod가 선택해야 하는 레이블은 무엇인가요?
↓ 지금 할것임
9. 포트에 레이블 추가
#포드 실행 확인
kubectl get pods -l "app=monolith"
#레이블 확인, 레이블 없음 추가할꺼야
kubectl get pods -l "app=monolith,secure=enabled"
#누락 레이블 추가
kubectl label pods secure-monolith 'secure=enabled'
# 업데이트 확인
kubectl get pods secure-monolith --show-labels
# 모놀리스 서비스에서 엔드포인트 목록 확인
kubectl describe services monolith | grep Endpoints
# Endpoints: 10.68.0.5:443
리스트 확인 후 연결하기
gcloud compute instances list
curl -k https://<EXTERNAL_IP>:31000
10. kubernetes로 애플리케이션 배포
배포(deployments) : 실행 중인 pod 수가 사용자가 지정한 원하는 pod 수와 동일하도록 하는 선언적 방법
주요 이점
- pod 관리의 낮은 수준 세부 정보를 추상화함
- 배후에서 복제본 세트를 사용하여 pod 시작 및 중지 관리
- pod를 업데이트하거나 확장해야 하는 경우에 처리함
- 다운되는 경우 pod 다시 시작 처리
* node 3 다운 시
새 포드 수동으로 생성 → node 2에서 시작
11. 배포생성
모놀리스 앱을 세 부분으로 나눕니다.
- auth - 인증된 사용자에 대한 JWT 토큰을 생성합니다.
- 안녕하세요 - 인증된 사용자를 환영합니다.
- 프론트엔드 - auth 및 hello 서비스로 트래픽을 라우팅합니다.
#인증배포 구성파일 확인
cat deployments/auth.yaml
#배포 개체 만들기
kubectl create -f deployments/auth.yaml
#인증 서비스 생성
kubectl create -f services/auth.yaml
#hello.yaml 개체 만들기
kubectl create -f deployments/hello.yaml
#hello.yaml 서비스 생성 및 노출
kubectl create -f services/hello.yaml
프론트엔드 생성 및 배포, 노출
kubectl create configmap nginx-frontend-conf --from-file=nginx/frontend.conf
kubectl create -f deployments/frontend.yaml
kubectl create -f services/frontend.yaml
외부 ip 컬링 후 프런트엔드와 상호작용
#프런트엔드 서비스 가져오기
kubectl get services frontend
#외부 ip 연결
curl -k https://<EXTERNAL-IP>
'GCP > Qwiklabs' 카테고리의 다른 글
[PCK] Building a DevOps Pipeline lab (0) | 2022.02.03 |
---|---|
[PCK] Configuring an Internal Load Balancer lab(내부 로드밸런서 구성) (0) | 2022.02.03 |
[PCK] Automating the Deployment of Infrastructure Using Terraform lab (0) | 2022.01.29 |
[PCK] Configuring an HTTP Load Balancer with Autoscaling lab (0) | 2022.01.28 |
[PCK] Storage and Database Service : Cloud SQL 구현 lab (0) | 2022.01.26 |