파드

홍준식·2024년 4월 21일

쿠버네티스

목록 보기
5/5

파드는 쿠버네티스에서 생성하고 관리할 수 있는 배포 가능한 가장 작은 컴퓨팅 단위로 어플리케이션 컨테이너와 볼륨의 집합이다.
한 파드는 하나의 노드에 배치되고 즉 파드의 모든 컨테이너 또한 같은 노드에 존재하게 된다.
파드 내의 모든 컨테이너는 자체 cgroup에서 실행되지만 다른 리눅스 네임스페이스를 공유한다.
파드의 컨테이너들은 네트워크 네임스페이스를 공유하여 동일한 IP와 포트를 가지고, UTS 네임스페이스를 통해 동일한 호스트 명을 가지며 IPC 네임스페이스를 통해 통신할 수 있다.

여러 컨테이너를 동일한 파드에 속하게 하는 기준은 컨테이너가 각기 다른 머신에서 동작해도 정상적으로 동작하는가를 통해 판별할 수 있다.
만약 다른 머신에서 동작할 수 있다면 한 단위로 스케일링할 필요나 상호 의존할 필요가 없어지며 다른 파드에 속하는 것이 효율적이다.

일반적으로 한 파드에 여러 컨테이너가 속하는 경우는 디버깅을 위한 로깅 및 모니터링을 위함이다.
이러한 패턴을 사이드카 패턴이라고 한다.

파드 매니페스트

쿠버네티스는 선언형 컨피규레이션을 사용하기에 파드는 파드 매니페스트라는 텍스트 파일 형태로 구성되게 된다.
쿠버네티스 API는 파드 매니페스트를 먼저 처리한 후에 etcd에 저장한다.
이후 스케줄러가 생성된 노드를 파드에 배치하게 된다.

파드 생성

파드를 생성하는 방법은 kubectl run을 사용하는 것이다.

$ kubectl run nginx --image=nginx

이후 다음 명령어를 통해 파드를 확인할 수 있다.

$ kubectl get pods

또한 다음 명령어를 통해 현재 매니페스트 파일을 확인하거나 수정할 수 있다.

$ kubectl edit pods nginx

다음과 같이 생성한 파드를 삭제할 수 있다.

$ kubectl delete pods nginx

매니페스트 생성

파드 매니페스트는 YAML이나 JSON을 통해 작성할 수 있다.

# nginx-pod.yaml
apiVersion: v1
kind: Pod
metadata:
  name: nginx
spec:
  containers:
  - name: nginx
    image: nginx:1.14.2
    ports:
    - containerPort: 80

다음과 같이 nginx 파드의 매니패스트를 생성할 수 있다.

$ kubectl apply -f nginx-pod.yaml

파드 조회

$ kubectl get pods
NAME    READY   STATUS    RESTARTS   AGE
nginx   0/1     Pending   0          3s
$ kubectl get pods
NAME    READY   STATUS    RESTARTS   AGE
nginx   1/1     Running   0          60s

위 명령어를 통해 default 네임스페이스에 생성된 모든 파드를 확인할 수 있다.
준비된 컨테이너 수와 상태 등을 확인할 수 있고 PENDING은 파드가 제출되었지만 아직 스케줄링되지 않은 것을 의미한다.

더 자세한 파드에 대한 정보는 kubectl describe를 통해 확인할 수 있다.

$ kubectl describe pods nginx

여기선 파드의 기본 정보와 컨테이너 정보, 파드와 관련된 이벤트 정보를 확인할 수 있다.

$ kubectl delete -f nginx-pod.yaml

다음과 같이 파드를 삭제할 수 있다.

파드 접근

$ kubectl exec -it nginx -- /bin/bash

다음과 같이 파드에 접근하여 명령을 실행할 수 있다.

0개의 댓글