모음/[쿠버네티스 인 액션]

[쿠버네티스 인 액션] 2장. 도커와 쿠버네티스 첫걸음 - 쿠버네티스에 첫 애플리케이션 실행

ttoance 2024. 8. 25. 07:28

1. node.js 애플리케이션 구동 : 래플리케이션 컨트롤러 생성 

1) 레플리케이션 컨트롤러 생성 

책에서는 이렇게 나오지만 deprecated 된 거라고 한다. 

 kubectl run kubia --image=sootoance/kubia --port=8080 --generator=run/v1

--generator : 레플리케이션 컨트롤러 생성 

 

kubectl run | Kubernetes

 

kubectl run

Synopsis Create and run a particular image in a pod. kubectl run NAME --image=image [--env="key=value"] [--port=port] [--dry-run=server|client] [--overrides=inline-json] [--command] -- [COMMAND] [args...] Examples # Start a nginx pod kubectl run nginx --im

kubernetes.io

 

 

아래처럼 실행하면 된다고 한다. 

kubectl run kubia --image=sootoance/kubia --port=8080 --restart=Never

kubectl run 명령어가 기본적으로 배포되도록 설계되어 있는데 --restart=Never 플래그를 사용하면 배포하지 않고 단일 pod를 생성 

 

2) 포드

- 하나 이상의 밀접하게 연관된 컨테이너의 그룹으로 같은 워커 노드에서 같은 리눅스 네임스페이스로 함께 실행 

- 논리적으로 분리된 머신으로, 단일 컨테이너로 실행되는 단일 프로세스이거나 개변 컨테이너에서 실행되는 주 애플리케이션 프로세스와 부가적으로 도와주는 프로세스로 이루어져 있을 수도 있음. 

 

 

3) 파드 조회하기 

kubectl get pods
kubectl describe pods

kubectl get pods

 

4) 내부 동작 

 

 

1️⃣ 2️⃣ 로컬에 빌드한 이미지는 로컬에서만 사용할 수 있기 때문에, 먼저 이미지를 빌드해 도커 허브에 푸시

3️⃣ kubectl 명령어를 실행하면 쿠버네티스 API 서버로 REST HTTP 요청을 전달

4️⃣ 클러스터에 새로운 레플리케이션컨트롤러 오브젝트 생성  

5️⃣ 레플리케이션컨트롤러는 새 파드를 생성하고 스케줄러에 의해 워커 노드 중 하나에 스케일링 

6️⃣ 7️⃣ 이미지가 도컬에 없기 때문에 도커에게 레지스토리에서 특정 이미지 풀하도록 지시하고 이미지 다운로드 후 도커는 컨테이너 생성하고 실행, 다른 두 개의 노드에서는 스케일링되지 않았기 때문에 특별한 역할 하지 않음 

 

 


2. node.js 애플리케이션 배포 : 서비스 오브젝트 

1) 웹 애플리케이션 접근 

- 각 피드는 자체 IP주고를 가지고 있지만, 클러스터 내부에 있어서 외부에서 접근 불가능함. 

- 외부에서 파드에 접근 가능하게 하려면 서비스 오브젝트 통해 노출 

ㄴ LoadBalancer 유형의 특별한 서비스를 생성해야함. 

 

2) 서비스 오브젝트 생성 

kubectl expose rc kubia --type=LoadBalancer --name=kubia-http

책과 다르게 아래 명령어로 실행해야 한다 

kubectl expose pod kubia --type=LoadBalancer --name=kubia-http

 

 

3) 서비스 조회하기 

kubectl get services
kubectl get svc

 

- 파드 이름을 호스트 이름 처럼 사용하는데, 애플리케이션이 워커 노드 운영 체제에서 실행 중이라 할지라도 애플리케이션은 다른 프로세스와 함께 실행중인 상태가 아니며 애플리케이션 전용으로 분리된 버전에서 실행중이다 

 


3. 시스템의 논리적인 부분 

1) 래플리케이션컨트롤러, 파드, 서비스가 서로 동작하는 방식 이해 

- kubectl run 명령을 수행하면 레플리케이션컨트롤러를 생성하고 레플리케이션컨트롤러가 실제 파드를 생성 

- 클러스터 외부에서 파드에 접근케 하기 위해 모든 파드를 단일 서비스로 노출하도록 명령 

 

2) 레플리케이션 컨트롤러 

- 항상 정확히 하나의 파드 인스턴스를 실행하도록 지정 

- 파드를 복제하고 항상 실행 상태를 만듬

- 어떤 이유로 파드가 사라진다면 래플리케이션컨트롤러는 사라진 파드를 대체하기 위해 새로운 파드를 생성 

 

3) 서비스가 필요한 이유 

- 파드는 언제든 사라질 수 있고, 실패될 수 있다. 이 때 파드는 새로운 IP를 할당 받음. 

- 서비스는 정적 IP를 할당하고 서비스가 존속되는 동안 변경되지 않음. 대신 클라이언트는 서비스의 IP 주소 통해 연뎔해야 함. 

 

 


4. 애플리케이션 수평 확장 

kubectl scale | Kubernetes

 

kubectl scale

Synopsis Set a new size for a deployment, replica set, replication controller, or stateful set. Scale also allows users to specify one or more preconditions for the scale action. If --current-replicas or --resource-version is specified, it is validated bef

kubernetes.io

kubectl get pods --all-namespaces

 

 

책과 다르게 --restart=Never 으로 실행했기 때문에, replicationcontrollers이 없었다. 

아래로 다시 삭제하고 시작한다. 

kubectl delete pod kubia  # 기존의 단일 Pod 삭제
kubectl delete service kubia-http
kubectl create deployment kubia --image=sootoance/kubia
kubectl expose deployment kubia --type=LoadBalancer --name=kubia-http --port=8080

 

 

kubectl scale deployment kubia --replicas=3

 

 

 


5. 애플리케이션 실행중인 노드 검사 

kubectl get pods -o wide

 

 


6. 쿠버네티스 대시보드 

kubectl cluster-info

minikube dashboard

반응형