Pod란?
컨테이너화된 애플리케이션의 최소 배포 단위로, 쿠버네티스의 핵심 개념 중 하나이다. Pod는 하나 이상의 컨테이너를 그룹화하여 동일한 네트워크와 스토리지 환경에서 실행하도록 설계되었다.
1. 포드 구성
1-1) 1:1 구성
일반적으로 권장하는 형태는 하나의 프로세스에 하나의 포드를 상요하는 1:1 방식이다.
1-2) 1:N 구성
아래의 사진처럼 1개의 포드에 N개의 프로세스를 구성으로 사용하는 사례는 크게 세 가지가 있다.
- 사이드카 패턴 (Sidecar Pattern):
주 프로세스가 애플리케이션을 실행하고 보조 프로세스는 로그 수집, 데이터 캐싱, 혹은 프록시 역할을 수행. - 공유 리소스 필요:
두 프로세스가 같은 데이터를 공유하거나 로컬 디스크를 함께 사용해야 할 때. - 네트워크 및 통신 최적화:
서로 긴밀히 통신해야 하는 경우 localhost를 통해 직접 연결.
2. Pod 디스크립터 생성 (yaml)
kubectl 명령어로 리소스 작성 시 제한 사항이있다. kubectl run이나 kubectl create 같은 명령은 기본적인 옵션만 제공하며, 고급 설정(예: tolerations, affinity, volumeMounts)을 적용하기 어렵다. 반면, yaml 파일로 쿠버네티스 객체를 정의하면 코드화(Infrastructure as Code)가 가능하며, Git과 같은 버전 제어 시스템에 저장하여 변경 이력을 관리할 수 있다.
2-1) YAML 파일 포드 정의
apiVersion, kind, metadata, spec은 직접 작성하지만 상태(status)는 쿠버네티스에서 넣어준다.
- apiVersion : 쿠버네티스 API 버전
- kind : 리소스 유형(포드 레플리카 컨트롤러, 서비스 등)
- metadata : 포드와 관련된 이름, 네임스페이스, 라벨 등
- spec : 컨테이너, 볼륨 등 정보
- status : 포드의 상태, 각 컨테이너 설명 및 상태, 포드 내부의 IP 등
# 파일 생성 vi go-http-pod.yaml
apiVersion: v1
kind: Pod
metadata:
name: http-go #Pod 리소스 이름
spec:
containers:
- name: http-go # 컨테이너 이름
image: gasbugs/http-go
ports:
- containerPort: 8080
Pod 리소스 이름과 컨테이너 이름을 동일하게 만들어도 상관없다.
2-2) 쿠버네티스 리소스 생성
# 파드 생성
kubectl create -f 파일이름.yaml
# 삭제
kubectl delete -f 파일이름.yaml
kubectl get pod 파드이름 -o yaml
3-3) 포트 포워드
테스트를 하기 위해 포트 포워드를 한다. 이렇게 포트 포워드를 하게 되면 해당 포트로 로컬에서 직접 접근할 수 있다.
kubectl port-forward http-go 8080:8080
반응형
'DevOps > Docker, K8s' 카테고리의 다른 글
[k8s] 쿠버네티스 레이블(Label) 설정 및 셀렉터(Selector) 방법 (0) | 2024.12.02 |
---|---|
[k8s] Pod 라이브네스(Liveness), 레디네스(Readiness), 스타트업(Startup) 프로브 구성 방법 (0) | 2024.11.28 |
[k8s] 미니큐브(MiniKube)로 쿠버네티스 설치 방법 (0) | 2024.11.18 |
[k8s] 쿠버네티스의 파드(Pod) 조회(상세조회) (0) | 2024.10.23 |
[k8s] 쿠버네티스에 컨테이너 배포 방법 (0) | 2024.10.22 |