Search

Pods

Created
2023/09/29 00:26
Tags
k8s
CKA
Mumshad Mannambeth
Core Concept

1) About

쿠버네티스는 Container를 바로 노드에 배포하는 형식으로 동작하지 않고, 쿠버네티스의 객체인 Pod를 이용하여 Container를 한 번 감싸서 배포
Pod는 어플리케이션과 1:1로 매칭되는 단일 인스턴스라고 볼 수 있고, 쿠버네티스에서 다루는 가장 작은 단위
트래픽이 증가하여 추가적인 인스턴스를 늘려야한다면, Pod 내에 인스턴스를 늘리는 방식이 아니라 Pod 자체를 늘리는 방식으로 동작
만일 노드 자체가 꽉 차서 충분히 자원을 가용할 수 없다면, 물리적으로 새로운 노드를 추가하여 새로운 노드에 Pod를 생성하도록 만들어 볼 수 있음
만일 트래픽이 감소하여 자원이 남는 경우 Pod를 줄이면서 불필요한 자원 점유를 방지할 수 있음
Pod와 매칭되는 단위가 어플리케이션인데, 이 어플리케이션은 1개의 Container 일 수도 있고 여러 Container일 수 있음
이 때 여러 Container가 대상이 되는 경우라면, 동일한 종류의 Container가 아니라 서로 다른 종류의 Container가 하나의 어플리케이션으로 묶인 것이라고 볼 수 있음
예를 들면 1개의 어플리케이션 단위가 WAS라는 Container와 이를 보조하는 Helper Container들로 묶여 있다면, 이들이 모두 Pod내에 위치하게 되며 Scale-Up과 Scale-Down을 반복할 때 이들이 모두 엮여서 동작하게 됨
1개의 어플리케이션 단위 동일한 Pod에 위치하기 때문에 서로 같은 네트워크 공간을 사용하므로 localhost로 통신을 할 수 있음

2) Why Pod?

쿠버네티스의 Pod라는 개념이 없다면, 이를 Docker를 이용한 Container 운용으로 시나리오를 비교해볼 수 있음
WAS 1개를 만듦 → 트래픽이 늘어서 WAS를 3개 증설 → 서비스 개선으로 아키텍쳐 변경 (WAS/Helper 엮음) → 4개의 WAS를 대상으로 4개의 Helper를 만듦 → 각 Helper를 WAS와 동일한 네트워크 구성으로 설정
이와 같은 오케스트레이션 공수가 들어가게 되는데, 변화에 대처하기 여간 난감한 것이 아님
쿠버네티스의 Pod라는 개념이 이와 같은 것들을 자동으로 수행하여, 동일한 어플리케이션으로 간주되는 Container들의 라이프 사이클을 모두 동일하게 맞춤

3) How to

kubectl이라는 CLI를 이용하여 Pod를 생성할 수 있는데, 별도의 설정이 없다면 DockerHub이라는 레포지토리에서 이미지를 읽어와서 생성하게 되며, 별도의 옵션으로 어떤 이미지를 사용할 것인지 명시하는 것이 필요
kubectl run nginx —image nginx
kubectl get pod
이와 같이 생성된 Pod는 별도의 설정이 없다면 외부로 공개되지 않은 상태로 구동되는데, 노드 내부에서는 접근할 수 있는 상태라고 볼 수 있음

4) YAML

apiVersion: v1, kind: Pod
spec에는 containers라는 배열 형태의 이미지와 이름을 기재
apiVersion: v1 kind: Pod metadata: name: nginx labels: app: nginx type: ws spec: containers: - name: nginx image: nginx
YAML
복사

5) Commands

kubectl create -f ${FILE_NAME}
-f 옵션을 통해 YAML 파일을 읽도록 만들어 쿠버네티스 객체를 생성할 수 있음
kubectl get pod
위 명령어를 이용하여 생성된 Pod들을 볼 수 있음
kubectl get pods -o wide
라는 추가 옵션을 주게 되면, Pod 확인 시 노드의 정보도 확인할 수 있음
kubectl describe pod ${POD_NAME}
위 명령어를 통해 Pod의 구체적인 정보를 확인할 수 있음
kubectl run ${NAME} —image=${IMAGE_NAME} —dry-run=client -o yaml
—dry-run 옵션 덕분에 실제 객체 생성으로 동작하지 않음
-o 옵션 덕분에 실행 결과물을 yaml 형태로 얻게 됨
** yaml 형태로 얻은 결과는 표준 출력으로 흘러가므로 별도의 리다이렉션을 통해 파일로 저장할 수 있음

6) Abbreviation

Pod == po