*본 포스트는 성신여자대학교 [클라우드 컴퓨팅] 강의 기반으로 작성됨을 알립니다.
목차
1. 쿠버네티스 클러스터 구축
2. 매니페스트
3. 디플로이먼트
1️⃣ 쿠버네티스 클러스터 구축
- Google Kubernetes Engine에서 클러스터 만들기
- https://console.cloud.google.com/kubernetes/list/overview?hl=ko&project=cloud-computing-418218
- GKE Standard로 만들기 (아래 이미지는 최소사양으로 설정)
- Google Cloud SDK 설치
- https://cloud.google.com/sdk/docs/install?hl=ko#deb
- wsl에 설치하면 Ubuntu 운영체제로 설치 (실습하는 pc에 따라 설치)
- K8s 클러스터 연결
- PC에 kubectl 설치 : https://kubernetes.io/ko/docs/tasks/tools/install-kubectl-linux/
- kubectl 설치 후, 앞서 만든 클러스터에 연결 (클러스터 - 연결 - 명령어 복붙)
//GKE k8s 클러스터 컨텍스트를 확인
$ kubectl config get-contexts
//GKE K8s 클러스터의 컨텍스트 이름 변경
$ kubectl config rename-context [기존이름] [바꿀이름]
//GKE K8s 클러스터의 노드 목록 확인
$ kubectl get node
//클러스터 크기 조절하여 과금 줄이기
$ gcloud container clusters resize k8s --num-nodes=0 --region=asia-northeast3-a
2️⃣ 매니페스트
kubectl 커맨드
kubectl <(1) 커맨드> <(2) 리소스 타입> [이름] [(3) 옵션]
- kubectl 커맨드의 기본 구조
- 커맨드로 동작을 지정
- 리소스 타입과 이름으로 대상이 되는 오브젝트를 지정
- 옵션을 지정
- 하지만 이런 식으로 매번 명령어를 입력하는 것은 번거롭다 → 해결 : 매니페스트 사용
매니페스트
쿠버네티스의 오브젝트를 생성하기 위한 메타 정보를 YAML이나 JSON으로 기술한 파일
- 파드 API
- apiVersion : 쿠버네티스에서 제공하는 API 버전으로, 계속 API가 업그레이드/업데이트가 된다.
- Kind : 어떤 오브젝트를 만들지 명시한다.
- metadata : 만들 오브젝트에 매핑되는메타데이터
- spec : 파드 안에 실행할 컨테이너의 스펙 작성
- 파드의 사양
- containers : 컨테이너의 사용을 배열로 기술
- initContainers : 초기화 전용 컨테이너의 사양
- nodeSelector : 어떤 노드에서 파드가 배포되는지 레이블을 지정
- volumes : 파드 내 컨테이너 간에 공유할 수 있는 볼륨을 설정
- 컨테이너 설정
- image
- name : 컨테이너 이름
- livenessProbe : 활성 프로브, 정상적으로 동작 중인지 검사
- readinessProbe : 준비 프로브, 요청을 받을 준비가 되었는지 검사
- ports : 외부로부터 요청을 전달받기 위한 포트 목록
- resources : CPU와 메모리 요구량과 상한치
- volumeMounts : 파드에 정의한 볼륨을 컨테이너의 파일 시스템에 마운트하는 설정
- command : 컨테이너 기동 시 실행할 커맨드. args가 인자로 적용
- args : command의 실행 인자
- env : 컨테이너 내 환경변수 설정
매니페스트 적용 방법
- apply: 동일한 이름 오브젝트가 있을 때 매니페스트 내용 적용
- create와 다른 점은 동일한 오브젝트가 있을 때, create는 안된다고 하지만 apply는 해당 오브젝트를 업데이트
- delete: 오브젝트 삭제
//오브젝트 생성. -f는 file명을 명시 또는 URL도 사용 가능
kubectl apply -f nginx-pod.yml
//오브젝트 삭제
kubectl delete -f nginx-pod.yml
- 매니페스트 적용 및 확인
// 파드의 IP 주소와 파드가 배포된 노드 표시
$ kubectl get all -o wide
// IP주소를 지정해서 접근 테스트
// → 클러스터 내부 IP이므로 클러스터 외부에서 접근 불가능
// 즉, 클러스터 접근이 가능한지 확인하고 싶으면 서비스 이용
$ curl -m 3 http://10.108.1.9/
// 대화형 파드를 기동해 nginx 파드에 접근
// (1) 대화형 파드 busybox 기동
$ kubectl run busybox --image=busybox --restart=Never --rm -it sh
// (2) Busybox에 있는 wget 명령어로 URL 접근 테스트
/ # wget -q -O - http://10.108.1.9/
3️⃣ 디플로이먼트
- 매니페스트는 "컨트롤러"이다.
- 파드의 개수를 관리
- 레플리카셋과 함께 동작
- 매니페스트 작성법은 URL 참조
// 디플로이먼트의 매니페스트 적용
$ kubectl apply -f deployment.yml
// 디플로이먼트 상태
$ kubectl get deply
// 레플리카셋 상태
$ kubectl get rs
// 파드의 상태 IP 주소와 노드
$ kubectl get all -o wide
// 스케일 기능 - 레플리카의 값을 변경하여 파드의 개수 조절
// (1) 매니페스트 변경
$ kubectl apply -f deployment2.yml
// (2) 명령어로 변경
$ kubectl scale --replicas=10 deployment.extensions/web-deploy
// 스케일 업 결과
$ kubectl get deploy
'Study > Cloud Computing' 카테고리의 다른 글
Monitor and Manage Google Cloud Resources (6) | 2024.09.22 |
---|---|
[Cloud] 쿠버네티스 실습 (0) | 2024.05.13 |
[Cloud] 컨테이너 오케스트레이션과 쿠버네티스 (1) (0) | 2024.05.02 |
[Cloud] 마이크로서비스 간의 통신 (2) (0) | 2024.03.29 |
[Cloud] 마이크로서비스 간의 통신 (1) (1) | 2024.03.29 |