Pod

ny0011·2022년 9월 27일
0

k8s

목록 보기
3/3

셋업 가정

  • 앱이 이미 개발되어 docker image 안에 빌드 되어 있음
  • image가 docker hub 같은 docker registry에 저장되어 있어서 k8s가 다운로드 받을 수 있음
  • k8s cluster 가 이미 설치되어 실행됨
  • 단일 node, 다수의 node 환경이든 상관 없음

Pod

  • k8s로 앱을 배포하는 것이 주 목적임
    • cluster안의 worker node로 구성된 머신에 컨테이너 형태
  • k8s는 worker node에 직접 container를 배포하지 않음
  • pod라는 감싸진 형태로 k8s 안에 있게 됨
    • pod
      • 앱의 단일 인스턴스, 가장 작은 단위

ex) k8s cluster 내부 상태

  • 1개 node
  • 1개 docker container
  • 1개 앱
  • 1개 Pod
  1. 이런 상태에서 사용자가 많아져 scale up 해야한다면?

    • 부하 분산을 위해 앱 인스턴스를 추가하게 됨
  2. 어디에 앱을 추가해야 할까?

    • Pod 1개를 새로 만들자
    • node 1개 안에 분리된 Pod가 2개 생성됨
  3. 사용자가 더 늘어나서 현재 node에 pod를 더 추가할 수 없다면?

    • 새 node를 만들어서 거기에 pod를 배포!
    • cluster의 물리적인 용량이 충분하다면 cluster 안에 새 node를 만들 수 있음
    • pod 안에 앱을 추가하는 게 아님

multi-container Pod

  • pod 안에 무조건 앱 하나만 들어가야 하는 건 아님
  • 서로 다른 기능을 하는 앱이라면 여러개의 container가 만들어질 수 있음
  • ex) 어떤 앱을 도와주는 helper container가 필요할 수 있음
    • 사용자가 입력한 데이터 처리, 사용자가 업로드 한 파일 처리 등
    • 이런 경우 pod 안에 container를 더 생성할 수 있음
    • 앱이 실행되면 helper도 실행되고 앱이 죽으면 helper도 죽음
    • 두 container는 localhost처럼 같은 network namespace를 공유해서 서로 통신함.
    • 저장 공간도 공유 가능함

pod의 장점

  • docker run으로 일일이 앱을 배포하고 나중에 helper 앱까지 배포하게 되는 경우
    • 앱 - helper앱의 1대1 매칭을 기록하는 곳이 있어야 함
    • 앱 간 네트워크, 스토리지 공유를 일일이 설정해야 함
    • 만약 앱이 죽으면 helper를 수동으로 다운시켜야 함
  • pod는 이런 일들을 알아서 해준다~

kubectl

명령어로 pod를 배포하는 방법을 알아보자

kubectl run nginx --image nginx
  • 사실 이 명령어는 pod를 만들고 거기에 container를 배포하는 것임
  • 앱의 이미지는 어디서 가져옴?
    • 이미지 이름을 --image 옵션을 통해 이름을 적어야 함
    • 그래서 dockerhub registry에서 nginx 이미지를 다운로드함
  • pod가 만들어졌는데 pod의 목록은 어떻게 봄?
kubectl get pods
  • pod의 이름과 상태를 확인
  • status : ContainerCreating -> Running 으로 변경되어야 pod가 실행된 것
  • 위의 명령어로 nginx를 만들었다면 node 밖의 사용자는 nginx에 접근할 수 없음(port 안뚫렸음)

0개의 댓글