Pods

Watermelon·2025년 12월 12일

CKA 학습 과정

목록 보기
15/35

pod 상황가정 1(Assumptions)

  • 애플리케이션이 이미 개발되어 도커 이미지에 빌드되어있음
  • 도커 허브와 같은 도커 리포지토리에서 K8s가 docker image 받아올 수 있음
  • K8s 클러스터가 이미 설정되어 작동 중 - 단일 노드 설정 또는 다중 노드

가정 기반 pod

  • 목적: 클러스터의 워커 노드로 구성된 머신 세트에 컨테이너 형태로 애플리케이션 배포
  • K8s는 워커 노드에 컨테이너를 직접 배포하지 않음
  • 컨테이너 -> pod(K8s 오브젝트로 캡슐화)
  • pod는 애플리케이션의 단일 인스턴스, K8s에서 생성할 수 있는 가장 작은 오브젝트

단일 노드 클러스터: 간단한 경우

  • 애플리케이션의 단일 인스턴스가 파드에 캡슐화된 단일 docker 컨테이너에서 실행
  1. 애플리케이션에 엑세스하는 사용자 수가 증가하여 애플리케이션을 확장해야하는 경우
  • 부하를 공유하려면 웹 애플리케이션의 인스턴스를 추가해야함
  • 추가 인스턴스를 어디에 스핀업?
  • 동일한 포드내에서 새 컨테이너 인스턴스 불러오기? NO
  • 동일한 애플리케이션의 새 인스턴스와 함께 새 파드 생성
  • 애플리케이션의 두 인스턴스가 동일한 K8s 시스템 또는 노드에서 두 개의 별도 경로에서 실행
  1. 사용자 수가 더더 증가하여 현재 노드에 충분한 용량이 없다면?
  • 언제든지 클러스터의 새 노드에 추가 파드를 배포
  • 클러스터의 물리적 용량을 확장하기 위해 클러스터에 새 노드 추가
  • 애플리케이션을 실행하는 컨테이너와 파드가 1대1 관계
  1. 정리
  • 스케일업 -> 새 파드 생성
  • 스케일 다운 -> 기존 파드 삭제
  • 즉, 애플리케이션을 확장하기 위해 기존 파드에 컨테이너를 추가하지 않음

구현 방법과 컨테이너 간 로드 밸런싱 추후 강의에서 설명

멀티 컨테이너 pods

  • pod는 일반적으로 컨테이너와 1:1 관계
  • 하나의 포드에는 여러 개의 컨테이너가 있을 수 있음, 보통 다른 종류의 컨테이너로 이루어짐
  • helper 컨테이너와 어플리케이션 컨테이너가 존재할 때 helper 컨테이너가 죽으면 같은 파드에 속한 컨테이너도 죽음(일심동체)
  • 두 컨테이너는 동일한 네트워크 공간을 공유하기 때문에 서로를 로컬호스트라고 지칭(직접 통신 가능), 동일한 저장공간 공유 가능

pod 상황가정 2(Assumptions)

Dodcker host에 application을 배포하기 위한 프로세스 또는 스크립트를 개발 중이라 가정하자

! application 첫 배포

docker run python-app
## docker로 간단하게 python app 명령을 사용하여 application 배포
## application <- access -> user

! 부하 발생

docker run python-app
docker run python-app
docker run python-app
docker run python-app
docker run python-app

## 부하 발생 시 명령어를 여러번 입력하여 부하 분산

! application 진화하면?

docker run python-app
docker run python-app
docker run python-app
docker run python-app
docker run python-app

docker run helper -link app1
docker run helper -link app2
docker run helper -link app3
docker run helper -link app4
docker run helper -link app5
  • helper 컨테이너는 application 컨테이너와 1:1 관계를 유지하므로 갯수 맞춰줘야함
  • 링크와 사용자 지정 네트워크를 사용하여 직접 네트워크 연결 설정 필요
  • 공유 가능한 볼륨 생성, 컨테이너 간 공유 필요
  • app 컨테이너 필요 없어지면 helper 컨테이너도 필요 없으므로 종료해야함
  • 이러한 작업은 K8s가 자동으로 수행함

Pod 배포 방법

kubectl run nginx
## 파드 생성, docker 컨테이너 배포 명령어
## K8s는 자동으로 파드 생성 -> nginx 도커 이미지 인스턴스 배포
  • 이미지는 어디서 가져오나요?
  • : 이미지 매개변수를 사용하여 이미지 이름 지정 필요
kubectl run nginx --image nginx
  • 위 경우는 docker hub 리포지토리에서 다운로드
  • 퍼블릭 docker hub 또는 조직내의 프라이빗 리포지토리에서 이미지를 가져오도록 K8s 구성 가능

Pod 목록 확인

kubectl get pods
  • 클러스터의 파드 목록 확인하는데에 도움
  • 생성 상태, 실행 상태 등 확인 가능
  • 추후 네트워킹과 서비스에 대해 배우면 해당 서비스에 액세스할 수 있도록 설정 가능
profile
많은 경험을 해보고자 하는

0개의 댓글