본문 바로가기
IT Knowledge/Kubernetes

kubernetes의 포드(Pod) 소개

by Seok. 2020. 12. 28.
반응형

쿠버네티스에서는 Pod라는 단위로 컨테이너를 묶어서 관리한다.

1개의 Pod 1개의 컨테이너 or 2 이상의 컨테이너를 포함한다. (일반적으로는 단일 컨테이너를 포함해서 사용한다)

다수의 컨테이너를 포함할 경우, 항상 포드 전체가 단일 워커노드에서 실행된다.

(다시 말해, 1개의 포드가 여러 워커노드에 걸쳐있을 없다는 말이다)

 

 

여러 개의 컨테이너를 Pod단위로 묶어서 배포할까?

여러개의 프로세스를 하나의 컨테이너로 묶으면 안되기 때문에, 컨테이너를 단일 단위로 관리할 있는 상위 레벨 구조가 필요하다. 이를 통해, 마치 하나의 컨테이너에서 실행되는것 처럼 환경을 제공하면서 다소 격리된 상태로 유지할 있다.

 

 

Pod 특성

  1. Pod 자체IP주소를 가지며, pod내의 컨테이너는 IP Port 공유한다.
    1. 2 이상의 컨테이너가 하나의 Pod 통해 배포되었을 , 다른컨테이너화 Localhost 통신 가능하다.
    2. 동일한 Pod 컨테이너에서 실행중인 프로세스는 동일한 포트번호에 바인딩 되지 않도록 주의해야 한다.
  2. Pod내에 배포된 컨테이너 간에는 디스크 볼륨을 공유할 있음.
    1. Ex. 어플리케이션 로그 수집기와같은 다른 솔루션과 함께 배포되는 케이스도 가능하다.
  3. 포드간에 통신은 항상 단순하다. 모든 포드는 1개의 플랫 네트워크에 위치하며, 다른 모든 포드에 액세스할 있다.

 

컨테이너를 포드 전체에 적절하게 구성하려면,

 - 다수의 pod 어플리케이션 분할하기

Ex. 웹서버와 DB 실제로 같은 머신에서 실행되어야 할까? 답은 아니다.

포드를 2개로 구분한다면, 하나의 노드에서 프론트엔드(웹서버) 다른 노드에서 백엔드(DB) 스케줄링 있으므로 인프라의 활용도가 높다.

 - 각각 사이즈 스케일링이 가능한 포드로 분할해야한다.

Ex. 프론트엔드 웹서버와 백엔드 DB서버의 경우, 이를 개별적으로 구성해서 스케일업 등의 요구가 있을때 개별적로 대응해야한다.

 

 

[Yaml or JSON으로 pod 생성]

$ Kubectl create -f kubia-manual.yaml


kubia-manual.yaml

더보기

apiVersion: v1

Kind: Pod

Metadata:

  name: kubia-manual

  annotations : kubernetes.io/createby=testuser

Spec:

  containers:

   - image : luksa/kubia

  name: kubia

  ports:

   - containerPort: 8080

   - protocol: TCP

디스크립터를 읽어보면, 쿠버네티스 API v1버전을 준수한다.

Kubia-manual이라는 이름의 Pod 생성한다.

luksa/kubia 이미지를 기반으로 하는 컨테이너로 구성되며, 8080포트를 대기중(listening)이다.

 

위에서 포트를 지정하지 않아도 연결되는데는 문제되지 않는다. 명시적으로 나열되지 않더라도 다른 포트가 연결될 있다. 그러나, 클러스터를 사용하는 모든 사용자가 포트를 빠르게 확인할 있도록 명시적으로 정의하는것이 좋습니다.

 

실행중인 포드 정의 검색

$ kubectl get po kubia-manual -o yaml
$ kubectl get po kubia-manual -o json

 

포드에 주석달기

포드와 그밖의 객체에도 주석을 넣을 있습니다. Annotation 이라고 하는데, 비교적 용량(256KB)까지 포함될 있습니다.

포드 생성시에 yaml이나 json 포함해서 생성할 있지만, 생성 후에 추가하거나 수정할 있습니다.

$ kubectl annotate pod kubia-manual mycompany.com/annote="test"

 

 

포드의 삭제

먼저 이름으로 삭제하는 방법

$ kubectl  delete po kubia-manual


네임스페이스로
삭제

$ kubectl delete ns custom-namespace

 

반응형

댓글