본문 바로가기
Study/Cloud Computing

[Cloud] 컨테이너 오케스트레이션과 쿠버네티스 (2) - 실습

by sumping 2024. 5. 2.

*본 포스트는 성신여자대학교 [클라우드 컴퓨팅] 강의 기반으로 작성됨을 알립니다.

 
 

목차

1. 쿠버네티스 클러스터 구축
2. 매니페스트
3. 디플로이먼트


1️⃣ 쿠버네티스 클러스터 구축

클러스터 만들기

 

실습 화면

 

//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 커맨드의 기본 구조
    1. 커맨드로 동작을 지정
    2. 리소스 타입과 이름으로 대상이 되는 오브젝트를 지정
    3. 옵션을 지정
  • 하지만 이런 식으로 매번 명령어를 입력하는 것은 번거롭다 → 해결 : 매니페스트 사용

 

매니페스트

쿠버네티스의 오브젝트를 생성하기 위한 메타 정보를 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️⃣ 디플로이먼트

  • 매니페스트는 "컨트롤러"이다.
디플로이먼트
// 디플로이먼트의 매니페스트 적용
$ 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