Container
K&S Pod
48965
2024. 3. 27. 14:27
Pod
Kubernetes의 Pod는 컨테이너화된 애플리케이션을 실행하는 가장 작은 단위이다.
Pod는 하나 이상의 컨테이너를 포함하고 있으며, 각 컨테이너는 동일한 네트워크와 저장 공간(볼륨)을 공유하고, 스케쥴링 및 실행을 동시에 처리한다. Pod의 특징을 정리하자면 다음과 같다.
- 하나 이상의 컨테이너: 각 Pod는 최소 하나 이상의 컨테이너를 실행한다. 이 컨테이너들은 서로 연결되어 있으며 함께 스케쥴링되고, 공통의 컨텍스트에서 실행됩니다.
- 동일 네트워크 : Pod 내의 모든 컨테이너는 동일한 IP 주소와 포트 공간을 공유하며, localhost를 통해 서로 통신할 수 있다.
- 공유 스토리지: Pod는 볼륨을 정의하고, 모든 컨테이너 사이에서 이를 공유할 수 있다. 때문에 컨테이너 간의 데이터 공유가 가능하다.
- 지속성 : Pod는 일반적으로 한번 사용하면 다시 사용하지 않는 일회성 엔티티로 취급된다. 때문에 Pod가 다운되거나 제거되면 시스템은 해당 Pod를 복구하지 않고 동일한 목적의 새로운 Pod를 생성한다. 이러한 이유로 배포, 작업, 복제 등의 추상화를 통해 Pod를 관리하는 것이 용이하다.
Using Pod
일반적으로 pod는 YAML파일을 통해 커맨드 라인으로 생성한다.
- apiVersion: 현재 사용 중인 쿠버네티스 API의 버전. Pod는 항상 v1 사용한다.
- kind: 리소스의 종류. 여기서는 파드(Pod)를 만들고 있으므로 Pod라고 명시한다.
- metadata: 리소스에 관한 메타데이터를 지정. 이는 파드의 이름(name)과 레이블(labels)을 포함한다.
- spec: 파드에 대한 세부 사항. 여기서는 파드가 어떤 컨테이너를 실행해야 하는지를 정의하고 있다.
- containers: 파드가 실행할 컨테이너들의 목록이다. 각 컨테이너는 name과 image를 필요로 한다.
kind 필드에서 일반적으로 사용되는 값들은 다음과 같다.
- Pod: 가장 작은 배포 단위인 pod를 정의. 하나 이상의 컨테이너를 실행할 수 있다.
- Service: 네트워크 경로를 노출하여 파드에 접근하는 방법을 정의한다. 서비스는 파드를 찾는 방법, 로드 밸런싱, 포트를 노출하는 방법 등을 지정할 수 있다.
- Deployment: 파드의 복제본(replicas)을 관리한다. 스케일링, 업데이트, 롤백 등을 수행할 수 있다.
- StatefulSet: 상태를 가진(stateful) 애플리케이션을 위한 것으로서 예를 들어, 각 파드가 고유한 식별자를 가져야 하거나 순서대로 시작해야 하는 경우에 사용된다.
- DaemonSet: 클러스터의 모든 노드에서 파드를 실행하도록 보장한다. 일반적으로 시스템 수준의 작업에 사용된다.
- Job: 한 번 실행되고 완료되는 작업을 정의한다.
- CronJob: 일정한 시간 간격으로 잡을 실행하는 작업을 정의한다.
- Namespace: 클러스터 내의 리소스를 논리적으로 그룹화 시켜준다.
- Secret: 주요 정보를 저장하는데 사용된다.
- ConfigMap: 환경설정 같은 secret을 통해 관리하지 않는 데이터를 저장하는데 사용된다.
특정 Pod를 제거하고 싶으면 다음 명령어를 사용하여 제거할 수 있다.
# Pod 이름을 알고 있는 경우
kubectl delete pod [pod-name]
# YAML 파일로 Pod를 삭제하는 경우
kubectl delete -f [filename]
# 특정 라벨을 가진 모든 Pod를 삭제하고자 하는 경우
kubectl delete pods -l [label]
# 네임스페이스 내의 모든 Pod를 삭제하고자 하는 경우
kubectl delete pods --all -n [namespace]