쿠버네티스 공식문서에는 다음과 같이 소개한다.
파드(Pod) 는 쿠버네티스에서 생성하고 관리할 수 있는 배포 가능한 가장 작은 컴퓨팅 단위이다.
파드 (고래 떼(pod of whales)나 콩꼬투리(pea pod)와 마찬가지로)는 하나 이상의 컨테이너의 그룹이다. 이 그룹은 스토리지 및 네트워크를 공유하고, 해당 컨테이너를 구동하는 방식에 대한 명세를 갖는다. 파드의 콘텐츠는 항상 함께 배치되고, 함께 스케줄되며, 공유 콘텍스트에서 실행된다. 파드는 애플리케이션 별 "논리 호스트"를 모델링한다. 여기에는 상대적으로 밀접하게 결합된 하나 이상의 애플리케이션 컨테이너가 포함된다. 클라우드가 아닌 콘텍스트에서, 동일한 물리 또는 가상 머신에서 실행되는 애플리케이션은 동일한 논리 호스트에서 실행되는 클라우드 애플리케이션과 비슷하다.
컨테이너: ‘Docker의 컨테이너’를 뜻함

💡 참고:
파드에서 컨테이너를 다시 시작하는 것과 파드를 다시 시작하는 것을 혼동해서는 안된다. 파드는 프로세스가 아니라 컨테이너를 실행하기 위한 환경이다. 파드는 삭제될 때까지 유지된다.

❗️파드는 쿠버네티스에서는 하나의 프로그램을 실행시키는 단위
파드(Pod)를 생성할 때 CLI를 활용하는 방법이 있고, yaml 파일을 활용하는 방법이 있다.
실제 현업에서는 yaml 파일을 활용하는 경우가 많다. 따라서 yaml 파일을 활용해서 파드(Pod)를 생성해볼 것이다.
0. 로컬에 Docker Desktop와 kubectl를 설치 (생략)
[Mac] Docker Desktop 설치 / Docker Desktop에서 Kubernetes 활성화
[Mac] kubectl 설치
1. yaml 파일 생성
nginx-pod.yaml
apiVersion: v1 # Pod를 생성할 때는 v1이라고 기재한다. (공식 문서)
kind: Pod # Pod를 생성한다고 명시
metadata:
name: nginx-pod # Pod에 이름 붙이는 기능
spec:
containers:
- name: nginx-container # 생성할 컨테이너의 이름
image: nginx # 컨테이너를 생성할 때 사용할 Docker 이미지
ports:
- containerPort: 80 # 해당 컨테이너가 어떤 포트를 사용하는 지 명시적으로 표현
spec.containers.ports.containerPort는 실제 작동에는 영향을 미치지 않는다. 단순히 컨테이너가 어떤 포트를 사용하는지 명시적으로 나타내기 위한 문서화용이다.2. yaml 파일을 기반으로 파드 생성
kubectl apply -f nginx-pod.yaml # yaml 파일에 적혀져있는 리소스(파드)를 생성

3. 파드 확인
kubectl get pods # 파드(Pod) 조회

NAME : Pod의 이름READY : (파드 내 준비 완료된 컨테이너 수)/(파드 내 총 컨테이너 수)STATUS : 파드의 상태 (Running : 정상적으로 실행 중)RESTARTS : 해당 파드의 컨테이너가 재시작된 횟수AGE : 파드가 생성되어 실행된 시간4. Nginx에 정상적으로 접속이 되는 지 확인


Nginx에 접근하는 방법은 2가지 있다.
1. 파드 내부로 들어가서 접근
2. 파드 내부 네트워크를 외부에서도 접속할 수 있도록 포트 포워딩(포트연결)
# kubectl exec -it [파드명] -- bash
# 도커에서 컨테이너로 접속하는 명령어(docker exec -it [컨테이너 ID] bash)와 비슷하다.
$ kubectl exec -it nginx-pod -- bash # nginx-pod 내부 환경으로 접속
# ---Pod 내부---
$ curl localhost:80 # Nginx로 요청보내기


# kubectl port-forward pod/[파드명] [로컬에서의 포트]/[파드에서의 포트]
$ sudo kubectl port-forward pod/nginx-pod 80:80 # sudo mac 기준


쿠버네티스에서는 위에서 작성한 yaml 파일을 보고 매니페스트 파일(Manifest File)이라고 부른다. 이 매니페스트 파일은 쿠버네티스에서 다양한 리소스(파드, 서비스, 볼륨 등)를 생성하고 관리하기 위해 사용하는 파일이라고 기억하자.(Docker로 치면 Dockerfile과 같은 역할을 하는 파일이다.)