본문 바로가기
INFRA/DevOps

Pod

by BTC_룰루랄라 2022. 4. 21.

반갑습니다! BTC 룰루랄라 입니다 :)

이번 포스팅에서는 Kubernetes의 Pod에 대해서 간략하게 설명해 드리겠습니다.

그럼 시작해 보도록 하겠습니다. 룰루랄라~♬

 

Pod는 쿠버네티스에서 관리하는 가장 작은 배포 단위입니다.

쿠버네티스와 도커의 차이점은 도커는 컨테이너를 만들지만, 쿠버네티스는 컨테이너 대신 Pod를 만듭니다. Pod은 한 개 또는 여러 개의 컨테이너를 포함합니다.

컨테이너가 아니라 Pod을 사용하고 여러개의 컨테이너를 포함할 수 있다고...? 🤔 무슨말인지 확인해봅시다.

 

빠르게 Pod 만들기

docker run에 익숙한 분들을 위해 kubectl run 명령어를 소개합니다.

kubectl run echo --image ghcr.io/subicura/echo:v1

주의

kubernetes v1.18 이상은 run명령어가 Pod을 만들지만 v1.17 이하는 Deployment를 만듭니다.

echo라는 이름의 Pod이 잘 생성되었는지 확인합니다.

# Pod 목록 조회
kubectl get pod

실행 결과

 
NAME   READY   STATUS              RESTARTS   AGE
echo   0/1     ContainerCreating   0          10s

생성된 Pod의 상태를 간략하게 확인할 수 있습니다. 상태STATUS는 컨테이너가 정상적으로 생성되면 Running으로 바뀌고 오류가 있다면 에러 상태를 표시합니다.

그럼 더 상세하게 Pod의 상태를 확인해봅니다.

# 단일 Pod 상세 확인
kubectl describe pod/echo

실행 결과

 
Name:         echo
Namespace:    default
Priority:     0
Node:         minikube/192.168.64.5

...(생략)...

Events:
  Type    Reason     Age   From               Message
  ----    ------     ----  ----               -------
  Normal  Scheduled  68s   default-scheduler  Successfully assigned default/echo to minikube
  Normal  Pulling    68s   kubelet            Pulling image "ghcr.io/subicura/echo:v1"
  Normal  Pulled     35s   kubelet            Successfully pulled image "ghcr.io/subicura/echo:v1" in 33.176019499s
  Normal  Created    35s   kubelet            Created container echo
  Normal  Started    35s   kubelet            Started container echo

describe 명령어는 해당 리소스의 상세한 정보를 알려줍니다. 쿠버네티스를 운영하면서 가장 많이 확인하는 부분은 Events입니다. 현재 Pod의 상태를 이벤트별로 확인할 수 있습니다.

Pod 생성 분석

Pod은 다음과 같이 구성되어있습니다. minikube 클러스터 안에 Pod이 있고 Pod 안에 컨테이너가 있습니다.

kubectl run을 실행하고 Pod이 생성되는 과정을 살펴봅니다.

  1. Scheduler는 API서버를 감시하면서 할당되지 않은unassigned Pod이 있는지 체크
  2. Scheduler는 할당되지 않은 Pod을 감지하고 적절한 노드node에 할당 (minikube는 단일 노드)
  3. 노드에 설치된 kubelet은 자신의 노드에 할당된 Pod이 있는지 체크
  4. kubelet은 Scheduler에 의해 자신에게 할당된 Pod의 정보를 확인하고 컨테이너 생성
  5. kubelet은 자신에게 할당된 Pod의 상태를 API 서버에 전달

잘 디자인된 모듈이 각자 역할을 충실하게 수행하고 있는 모습입니다. 현재 테스트는 단일 노드지만 노드가 수십, 수백 개가 되어도 Scheduler만 열심히 일하면 문제없는 구조입니다.

Pod 제거

다음 실습을 진행하기 전에 이전에 생성한 Pod을 제거합니다.

kubectl delete pod/echo

 

실습이 끝나면 delete 명령어로 리소스를 제거해주세요.

 

이상 Kubernetes의 pod에 대해서 간단히 알아보았습니다.

다음 시간에는 Kubernetes의 또 다른 기능에 대해서 알아보겠습니다.

감사합니다 :) 

'INFRA > DevOps' 카테고리의 다른 글

kubectl 명령어 구조  (0) 2022.04.27
DevOps의 핵심 CI/CD란?  (0) 2022.04.22
kubernetes 설치 방법  (0) 2022.04.20
애자일 소프트웨어 개발 방법론  (0) 2022.04.14
쿠버네티스 환경  (0) 2022.04.13

댓글