DevOps/Docker, K8s

[k8s] 포트(POD) 개념 및 디스크립터 yaml 생성 방법

cob 2024. 11. 26. 20:25
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

 

 

 

반응형