Pod란??
- Pod는 쿠버네티스가 만들 수 있는 가장 작은 오브젝트이며, 기본이 되는 배포 단위 이다.
- 한 개 이상의 컨테이너 그룹이다.
Pod의 필요성
- 컨테이너는 단일 프로세스를 실행하는 것을 목적으로 설계되었다.
- 이런 단일 컨테이너를 직접 관리하는 것이 아닌 파드라는 한 개의 단위로 통합하면 효율적으로 관리할 수 있다.
Pod의 특징
- 한 개 또는 여러 개의 container를 가질 수 있다.
- 동일한 Pod 내의 container들은 volume을 공유할 수 있다.
- 동일한 Pod 내의 conainter 들은 network를 공유하여 localhost 통신이 가능하다.
Pod의 생성 방법
Kubernetes의 Object 생성에는 Kubectl cli를 이용하는 방법과 yaml 파일을 이용하는 방법이 있다.
kubectl를 이용하는 방법은 편리하지만 세부 옵션 설정이 불가능한 경우가 있다.
CLI 명령으로 배포하기
- kubectl run [파드] --image=[이미지]
- 위의 명령은 image를 가져와 파드를 생성하고 구동시키는 명령이다.
YAML 파일로 배포하기
Ex) 한 개의 container를 가진 Pod를 생성하는 방법
apiVersion: v1
kind: Pod
metadata:
name: test-pod
spec:
containers:
- name: ubuntu
image: ubuntu
command: ["/bin/sh"]
args: ["-c", "while true; do echo hello; sleep 1; done"]
apiVersion
- Pod 생성에 사용할 API version을 의미
kind
- 어떤 종류의 object를 생성할 것인지 명시
metadata
- object에서 사용되는 name, namespace 등등의 다양한 정보를 여기에서 지정한다.
spec
- Pod가 가질 수 있는 고유의 spec을 명시한다.
- ex) 해당 예시에서는 1초마다 ubuntu에서 hello를 출력
위의 코드를 yaml 파일로 저장하고 명령어를 통해 Pod를 배포한다.
apply -f 명령
- test-container.yaml 파일로부터 리소스의 구성 변경 사항을 적용한다.
- pod/이름 created가 뜨면 적용 완료.
get pods 명령
- 현재 쿠버네티스에 존재하는 pod의 리스트를 출력한다.
- tes-container-pod가 생성된 것을 확인할 수 있다. ubuntu 이미지가 없기 때문에 해당 STATUS는 ErrImagePull이 출력된다.
Ex) 여러 개의 container를 가진 Pod를 생성하는 방법
apiVersion: v1
kind: Pod
metadata:
name: test2-pod
spec:
containers:
- name: ubuntu1
image: ubuntu
command: ["/bin/sh"]
args: ["-c", "while true; do echo hello1; sleep 1; done"]
- name: ubuntu2
image: ubuntu
command: ["/bin/sh"]
args: ["-c", "while true; do echo hello2; sleep 1; done"]
Pod를 생성하는 기본적인 yaml 파일의 내용은 한 개의 container를 만들 때와 동일하다.
여러 개의 container를 한 개의 Pod에서 사용하고 싶을 때는 containers에 여러 개의 container를 명시해준다.
apply -f 명령
get pods 명령
- test2-containers-pod의 READY 부분을 확인해보면 파드가 2개 생성된 것을 확인할 수 있다.
파드 배포의 활용
- --dry-run=client, -o yaml 옵션을 통해 해당 명령으로 적용될 YAML 명세의 기본 구조를 파일 형태로 저장할 수 있다.
- 또한 YAML파일이 생성 될 뿐 클러스터에 바로 적용되는 것이 아니므로 사전 검토를 할 때 유용하다.
# test 파드 명세를 yaml 파일로 생성
$ kubectl run test --image=redis --dry run=client -o yaml > test.yaml
# 생성된 yaml 파일로 파드 구동 (선언형 방식)
$ kubectl apply -f test.yaml
# 생성된 yaml 파일로 파드 구동 (명령형 방식)
$ kubectl create -f test.yaml
파드의 생명 주기
쿠버네티스에서 파드의 생명 주기는 크게 네 가지 단계로 구분된다.
- Pending: 클러스터 내 파드 생성이 승인되었지만 아직 내부 컨테이너가 완전히 시작되기 전, 아직 노드에 배치되지 않은 상태.
- Running: 파드가 클러스터의 특정 노드에 배치되었으며 내부의 모든 컨테이너가 생성 완료된 상태, 하나 이상의 컨테이너가 구동되기 시작했거나 시작 중인 상태.
- Succeeded: 파드 안의 컨테이너가 유한한 수의 작업을 실행한 후 종료되도록 설계되었을 때 발생, 파드에 있는 모든 컨테이너가 해당 작업을 정상적으로 마치고 종료된 상태.
- Failed: 파드 안의 컨테이너가 유한한 수의 작업을 실행한 후 종료되도록 설계되었을 때 발생, 파드에 있는 컨테이너 중 하나 이상의 컨테이너가 비정상적으로 종료된 상태.
- unknown: 파드의 상태 확인이 불가능한 상태.
- terminating: 파드를 삭제했을 때 발생.
파드 생명 주기 모니터링
- 파드의 생명 주기와 현재 상태는 kubelet이 주기적으로 모니터링하고, 모니터링 된 상태는 kubectl get pods 명령어 결과 중 status 필드에서 확인할 수 있다.
- 해당 파드 오브젝트의 .status.phase 필드에서도 확인 가능하다.
그 외의 파드 명령
# 클러스터 내 파드 목록 조회
kubectl get pods
# 특정 네임스페이스 파드 목록 조회
kubectl get pods -n [네임스페이스 명]
# 파드 목록 상세 조회
kubectl get pods -o wide
# 특정 파드의 상태를 YAML 형식으로 조회하기
kubectl get pod [파드 명] -o yaml
# 특정 파드의 상태를 output.yaml 파일에 저장하기
kubectl get pod [파드 명] -o yaml > output.yaml
# 특정 파드 수정
kubectl edit pod [파드 명]
# 특정 파드의 삭제 정보 확인
kubectl describe pod [파드 명]
특정 파드 내에 구동 중인 컨테이너의 로그 확인
kubectl logs [파드 명]
# 특정 파드 삭제
kubectl delete [파드 명]
728x90
반응형
'DevOps > Kubernetes' 카테고리의 다른 글
[kubernetes] Pod 외부 접속 연결하기 (0) | 2024.07.09 |
---|---|
[kubernetes] Deployment란? (0) | 2024.07.08 |
[kubernetes] ReplicaSet이란? (0) | 2024.07.03 |
[Kubernetes] Kubernetes란? (0) | 2024.07.02 |
Docker, Container and Kubernetes (0) | 2024.07.01 |