kubernertes - Pod

FromCloud·2023년 6월 21일
0

Kubernetes & Docker

목록 보기
9/12

파드(Pod)

파드(Pod)는 쿠버네티스에서 생성하고 관리할 수 있는 가장 작은 단위이다

컨테이너는 파드에서 실행을 하는데 컨테이너는 개별적으로 배포하기보단 컨테이너를 가진 포드를 배포하고 운영하는 것이다

일반적으로 하나의 노드에 하나의 컨테이너만 사용하기를 권장하고 있다 또한 모든 컨테이너는 항상 하나의 워커 노드에서 실행되며 여러 워커 노드에 겹쳐서 실행되지 않는다

파드가 필요한이유

컨테이너는 단일 프로세스를 실행하는 것을 목적으로 설계했다 하지만 단일 컨테이너에서 관련 없는 다른 프로세스를 실행하는 경우 모든 프로세스를 실행하고 로그를 관리하는 것은 모두 사용자 책임이 된다

개별 프로세스가 실패하는 경우 자동으로 재시작하는 매커니즘을 포함해야하는데, 모든 프로세스는 동일한 표준출력으로 로그를 기록하기 때문에 어떤 프로세스가 남긴 로그 인지 파악하지 매우매우 어렵다

그래서 각 프로세스를 자체 개별 컨테이너로 실행해야한다
즉, 파드는 컨테이너를 격리하는 기술 이라고 생각하면 쉽다

컨테이너가 동일한 IP와 포트공간을 공유하는 법

만약 파드안에 컨테이너가 동일한 네트워크 네임스페이스에서 실행이 된다면, 동일한 IP 주소와 포트를 공유한다는것인데, 동일한 파드 안에서는 컨테이너에서 실행 중인 프로세스가 같은 포트번호를 사용하지 않도록 주의를 해줘야 한다 -> 그렇지 않으면 포트 충돌이 발생할수 있음
하지만 이것은 동일한 파드일때만 해당이 된다는점

다른 파드에 있는 컨테이너는 서로 다른 포트 공간을 가져서 포트 충돌이 일어날 수가 없다

또한 파드안에 있는 모든 컨테이너는 루프백 네트워크 인터페이스를 기본적으로 가지고 있어 Host에 의해 서로 통신이 가능하다는점

YAML(yml) 파일로 파드 생성

사진에서 보는 것과 같이 yml파일을 이용하여 Pod를 생성할 수도 잇다

yml파일은 기본적으로 apiVersion, kind, metadata, spec 은 필수적으로 들어간다

  • apiVersion: yaml파일에서 실행할 kind에 따라서 api버전이 바뀐다
    Pod는 v1
    확인을 하기 위해선 kubectl api-resources 를통해서 확인이 가능하다
  • kind: 쿠버네티스 오브젝트/ 리소스 유형이다
  • metadata: 이름, 네임스페이스, 라벨 및 파드에 관한 기타 정보를 저장한다
    • 위 사진의 yaml파일을 실행하면 apache 라는 이름의 pod가 생성되고 1team이라는 네임스페이스에 들어가 지게 된다
  • spec: 파드 컨테이너, 볼륨, 기타데이터 등 파드 자체에 관한 실제 명제를 가진다
    • 위 설정에서는 containers의 이름과 어떤 이미지 파일을 쓸것인지 어떤 포트로 애플리케이션이 수신되는지를 나타낸다

일반적으로 실행하기 위해선 kubectl run test-nginx --image=nginx --port=80 이런식으로 지정을 해준다
해석: test-nginx라는 이름으로 80포트를 사용하고 이미지는 nginx최신버전의 이미지를 사용하여 컨테이너를 실행시켜 달라

새로 생성된 파드를 보기 위해선 kubectl get pod를 사용하여 확인

위 사진은 kubectl get pod -n default라고 적혀있는데 -n옵션은 네임스페이스를 지정한다는 옵션이다 파드에 속하는 컨테이너를 만들때에는 네임스페이스가 지정이 되지 않으면 기본적으로 default에 들어가게 되는데 그것을 확인하기 위해 옵션을 주어서 확인을 하엿다

profile
매일 발전하는 Cloud Engineer

0개의 댓글