파드(Pod)는 쿠버네티스에서 생성하고 관리할 수 있는 가장 작은 단위이다
컨테이너는 파드에서 실행을 하는데 컨테이너는 개별적으로 배포하기보단 컨테이너를 가진 포드를 배포하고 운영하는 것이다
일반적으로 하나의 노드에 하나의 컨테이너만 사용하기를 권장하고 있다 또한 모든 컨테이너는 항상 하나의 워커 노드에서 실행되며 여러 워커 노드에 겹쳐서 실행되지 않는다
컨테이너는 단일 프로세스를 실행하는 것을 목적으로 설계했다 하지만 단일 컨테이너에서 관련 없는 다른 프로세스를 실행하는 경우 모든 프로세스를 실행하고 로그를 관리하는 것은 모두 사용자 책임이 된다
개별 프로세스가 실패하는 경우 자동으로 재시작하는 매커니즘을 포함해야하는데, 모든 프로세스는 동일한 표준출력으로 로그를 기록하기 때문에 어떤 프로세스가 남긴 로그 인지 파악하지 매우매우 어렵다
그래서 각 프로세스를 자체 개별 컨테이너로 실행해야한다
즉, 파드는 컨테이너를 격리하는 기술 이라고 생각하면 쉽다
만약 파드안에 컨테이너가 동일한 네트워크 네임스페이스에서 실행이 된다면, 동일한 IP 주소와 포트를 공유한다는것인데, 동일한 파드 안에서는 컨테이너에서 실행 중인 프로세스가 같은 포트번호를 사용하지 않도록 주의를 해줘야 한다 -> 그렇지 않으면 포트 충돌이 발생할수 있음
하지만 이것은 동일한 파드일때만 해당이 된다는점
다른 파드에 있는 컨테이너는 서로 다른 포트 공간을 가져서 포트 충돌이 일어날 수가 없다
또한 파드안에 있는 모든 컨테이너는 루프백 네트워크 인터페이스를 기본적으로 가지고 있어 Host에 의해 서로 통신이 가능하다는점
사진에서 보는 것과 같이 yml파일을 이용하여 Pod를 생성할 수도 잇다
yml파일은 기본적으로 apiVersion, kind, metadata, spec
은 필수적으로 들어간다
v1
kubectl api-resources
를통해서 확인이 가능하다pod
가 생성되고 1team
이라는 네임스페이스에 들어가 지게 된다일반적으로 실행하기 위해선 kubectl run test-nginx --image=nginx --port=80
이런식으로 지정을 해준다
해석: test-nginx라는 이름으로 80포트를 사용하고 이미지는 nginx최신버전의 이미지를 사용하여 컨테이너를 실행시켜 달라
새로 생성된 파드를 보기 위해선 kubectl get pod
를 사용하여 확인
위 사진은 kubectl get pod -n default
라고 적혀있는데 -n
옵션은 네임스페이스를 지정한다는 옵션이다 파드에 속하는 컨테이너를 만들때에는 네임스페이스가 지정이 되지 않으면 기본적으로 default
에 들어가게 되는데 그것을 확인하기 위해 옵션을 주어서 확인을 하엿다