본문 바로가기
컨테이너 오케스트레이션

Devops Day 52 (5.18) 컨테이너 오케스트레이션_쿠버네티스 워크로드

by Jackykim 2023. 5. 19.

Devops Day 52 (5.18) 컨테이너 오케스트레이션_쿠버네티스 워크로드

 

쿠버네티스 설치 :
1. Minikube 설치 : 미니큐브는 로컬 쿠버네티스로, 쿠버네티스를 배우고 개발하기 쉽게 하는 것에 초점을 맞추고 있습니다.
Ubuntu에 설치 위해 아래 와 같은 cmd 기입 합니다.
curl -LO https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64

sudo install minikube-linux-amd64 /usr/local/bin/minikube

 

2. 클러스터 시작하기 위해 minikube start 명령 기입합니다.


3. 클러스터에 접근 할 수 있는 cmd
kubectl get po -A

4. 최초에는 스토리지 프로비저너(storage-provisioner)와 같은 일부 서비스가 아직 실행 상태가 아닐 수 있습니다. 이는 클러스터를 시작할 때 정상적인 상태이며 곧 해결될 것입니다. 클러스터 상태에 대한 추가 정보를 얻기 위해, 미니큐브는 쿠버네티스 대시보드를 번들로 제공하여 새로운 환경에 쉽게 적응할 수 있도록 도와줍니다.
“minikube dashboard” -> 기입하면 Kubernetes dashboard 페이지가 열립니다
.

5. 샘플 Deployment을 포트 8080에 표시
kubectl create deployment hello-minikube --image=kicbase/echo-server:1.0

kubectl expose deployment hello-minikube --type=NodePort --port=8080

- kubectl get services hello-minikube -> 확인 가능합니다.

6. 쉽게 웹 브라우서 열기 위해 minikube service hello-minikube 기입합니다

7. 포트 번호 변경 가능합니다. kubectl port-forward service/hello-minikube 7080:8080

Google Chrome 에서 Localhost:7080 확인

8. 연습 완료 후 minikube 삭제 하고 싶으면 “minikube delete –all” 하면 됩니다.

참고 : https://minikube.sigs.k8s.io/docs/start/

 

minikube start

minikube is local Kubernetes

minikube.sigs.k8s.io

 

쿠버네티스 워크로드

파드란?
파드(Pod)는 쿠버네티스의 배포 가능한 가장 작은 컴퓨팅 유닛입니다. 파드는 그 자체로 하나의 논리적인 호스트입니다.


파드는 다음을 포함할 수 있습니다.
- 하나 이상의 애플리케이션 컨테이너

- IP 주소

- 볼륨과 같은 공유 스토리지

쿠버네티스에서는 “워크로드 리소스”를 만들기 위해 YAML 파일과 같은 리소스 정의 파일을 사용하는 것이 보통입니다.

 

워크로드란?
쿠버네티스에서는 “쿠버네티스 상에서 작동되는 애플리케이션”을 의미하며, 클라우드 분야에서는 “어떤 애플리케이션을 실행할 때 필요한 IT 리소스의 집합”이라는 의미로 통용됩니다.

 

마찬가지로 파드를 생성하기 위해 파드를 정의할 때 다음과 같은 형태의 YAML 파일을 사용할 수 있습니다.

Minikube start -> kubectl apply -f simple-pod.yaml -> kubectl get pods


참고 https://kubernetes.io/ko/docs/reference/kubectl/cheatsheet/#%EB%A6%AC%EC%86%8C%EC%8A%A4-%EC%82%AD%EC%A0%9C

 

디플로이먼트 (Deployment)
흔히 우리는 배포라고 하면 서비스의 노출을 떠올리지만, 쿠버네티스의 Deployment는 서비스 노출의 의미가 아닙니다. 쿠버네티스에서의 Deployment는 파드의 교체/배치(placement)와 관련된 명세입니다.

 

파드의 진실 :
쿠버네티스에서는 사실 직접 사용자가 개별 파드를 만들 일이 그리 많지 않습니다. 왜냐하면 파드는 일시적이고, 언제나 삭제될 수 있음을 감안하고 만들기 때문입니다. 쿠버네티스의 핵심은 컨테이너를 오케스트레이션하는 것으로, 파드 장애 시 자동 복구하거나, 복제하거나 하는 등의 일을 자동으로 처리하는 데에 있습니다. 결론적으로, 파드는 디플로이먼트, 스테이트풀셋, 데몬셋을 이용해 관리하는 것이 바람직합니다
.

디플로이먼트 예시 :

디플로이먼트가 뭔가요? 어떤 일을 할 수 있는 리소스인가요?

디플로이먼트는 파드를 업데이트하기 위한 선언적 명세입니다.

 

디플로이먼트 리소스를 통해 다음을 할 수 있습니다.

 

- (레플리카셋, 즉 복제본 구성을 이용하여) 파드를 원하는 개수만큼 실행시킬 수 있습니다.

- (제어판 Control Plane을 이용하여) 파드를 업데이트할 수 있습니다.

- 마찬가지로, 파드를 롤백하는 것도 가능합니다.

 

리뷰: 다양한 배포 전략

애플리케이션의 여러 복제본이 존재할 경우, 이 각각의 복제본을 새 버전으로 업데이트하는 방법으로 다음과 같은 배포 전략이 있음을 배웠습니다.

 

- 재생성 (Recreate): 이전 버전을 삭제하고 새 버전 생성

- 블루/그린 배포: 한 번에 이전 버전에서 새 버전으로 연결을 전환

- 롤링 배포: 이전 버전을 scale down하고, 새 버전을 scale up 하는 방식으로 단계별로 교체, 롤아웃(rollout)이라고 부릅니다.

- 카나리 배포: 새 버전이 잘 작동한다고 판단되면, 이전 버전을 교체

 

참조 : https://kubernetes.io/ko/docs/tutorials/kubernetes-basics/deploy-app/deploy-interactive/

참조 : https://kubernetes.io/ko/docs/tasks/run-application/run-stateless-application-deployment/

 

서비스
파드를 외부로 노출시키기

파드 집합에서 실행중인 애플리케이션을 네트워크 서비스로 노출하는 추상화 방법.

쿠버네티스를 사용하면 익숙하지 않은 서비스 디스커버리 메커니즘을 사용하기 위해 애플리케이션을 수정할 필요가 없다. 쿠버네티스는 파드에게 고유한 IP 주소와 파드 집합에 대한 단일 DNS 명을 부여하고, 그것들 간에 로드-밸런스를 수행할 수 있다.

 

쿠버네티스에서 서비스는 파드의 집합에 접근할 수 있는 정책을 정의하는 추상적 개념입니다. 서비스 리소스가 정의된 YAML 파일에 selector라는 것을 이용해 서비스할 대상 타깃을 설정할 수 있습니다.

 

서비스 리소스의 예제:

우리에게 가장 익숙한 LoadBalancer로 서비스를 만들고, 백엔드에 cozserver라는 이름을 가진 파드 집합에 연결되도록 지정했습니다. 적용된 결과를 확인해 봅시다.

minikube에서는 EXTERNAL-IP가 pending 상태로 진전이 되지 않습니다.

 

minikube tunnel 명령을 이용하면, EXTERNAL-IP가 127.0.0.1로 설정되며, 그때부터 http://localhost로 접속이 가능해집니다. 접속이 원활하지 않을 경우, tunnel을 중지하고 해당 명령을 다시 시도해 봅시다. sudo 권한이 필요할 수 있습니다.

 

쿠버네티스 네트워킹은 다음의 네 가지 문제를 해결한다.

- 파드 내의 컨테이너는 루프백(loopback)을 통한 네트워킹을 사용하여 통신한다.

- 클러스터 네트워킹은 서로 다른 파드 간의 통신을 제공한다.

- 서비스 리소스를 사용하면 파드에서 실행 중인 애플리케이션을 클러스터 외부에서 접근할 수 있다.

- 또한 서비스를 사용하여 서비스를 클러스터 내부에서만 사용할 수 있도록 게시할 수 있다.