본문 바로가기
Cloud/Kubernates

Pod, NameSpace

by 민휘 2023. 10. 29.

파드

 

파드가 뭐에요

  • 쿠버네티스의 리소스 오브젝트
  • 1개 이상의 컨테이너로 구성된 컨테이너 집합
  • 컨테이너 애플리케이션을 배포하기 위한 기본 단위이다. 그래서 하나의 파드는 하나의 완전한 애플리케이션이다.
  • 파드는 애플리케이션을 여러 컨테이너로 분리해야 할 때, 이러한 컨테이너들이 공유해야 하는 리소스를 관리하면서도 하나의 논리적인 단위로 사용된다.

 

 

파드 생성부터 접속, 삭제까지

 

🌱 파드 생성을 위한 yaml 파일 작성

apiVersion: v1 # 오브젝트 api 버전
kind: Pod # 리소스 종류
metadata: # 리소스의 부가정보
  name: my-nginx-pod
spec: # 리소스 생성을 위한 정보
  containers: # 컨테이너 정보
  - name: my-nginx-container # 컨테이너 이름
    image: nginx:latest # 이미지
    ports: # 컨테이너가 사용할 포트
    - containerPort: 80
      protocol: TCP

 

🌱 파드 생성

  • yaml 파일로 리소스(파드) 생성 : kubectl apply -f nginx-pod.yaml
  • 오브젝트(파드) 목록 확인 : kubectl get pods
  • 특정 리소스 정보 확인 : kubectl describe pods my-nginx-pod

 

🌱 파드 접속

  • 파드 내부로 들어가기 : kubectl exec -it my-nginx-pod bash
  • 파드가 잘 동작하는지 확인 : curl <IP>

이 IP는 외부에서 접근할 수 없으므로, 노드 내부로 접속해서 curl 날려야 파드 실행을 확인할 수 있다.

 

 

🌱 파드 삭제

  • 파드만 삭제되는 것이지 파일이 삭제되는 것은 아님!
  • kubectl delete -f nginx-pod.yaml
  • kubectl delete pod <파드이름>

 

 

파드에 여러개의 컨테이너 올리기

 

실제 쿠버네티스 환경에서는 앞에서 살펴본 것처럼 1개의 컨테이너로 구성된 파드를 사용하는 경우가 많다. 왜냐하면 하나의 파드는 하나의 완전한 애플리케이션이기 때문에, 완전한 애플리케이션인 컨테이너를 두개 이상 올리는 것은 바람직하지 않기 때문이다. 그렇다면 파드를 사용하나 도커 컨테이너를 사용하나 차이가 없지 않은가?

 

 

하지만 때로는 여러개의 컨테이너를 파드에 함께 올려야 하는 경우도 있다. 메인 컨테이너가 설정 리로드나 로그 수집 같은 부가 기능을 수행하는 컨테이너를 필요로 할 때이다. 이렇게 같은 파드에 정의된 여러 개의 컨테이너는 하나의 완전한 애플리케이션으로 동작하며, 네트워크 환경 등을 공유한다. 부가 기능을 하는 컨테이너를 사이드카 컨테이너라고 한다.

 

 

🌱 사이드카 컨테이너 생성

  • yaml 파일에 컨테이너 추가 설정
apiVersion: v1
kind: Pod
metadata:
  name: my-nginx-pod
spec:
  containers:
  - name: my-nginx-container
    image: nginx:latest
    ports:
    - containerPort: 80
      protocol: TCP

  **- name: ubuntu-sidecar-container
    image: alicek106/rr-test:curl
    command: ["tail"]
    args: ["-f", "/dev/null"]**
  • 파드 생성 : kubectl apply -f nginx-pod.yaml
  • 파드 확인 : kubectl get pods
  • 파드의 특정 컨테이너 접속 : kubectl exec -it my-nginx-pod -c ubuntu-sidecar-container bash

 

 

🤔 네임 스페이스

쿠버네티스가 단순 컨테이너가 아닌 파드를 기본 관리 단위로 사용하는 이유 중 하나는 파드는 여러 리눅스 네임스페이스를 공유하는 여러 컨테이너를 추상화된 집합으로 사용하기 위함이다. 뭔 소리야?

 

리눅스 네임스페이스는 운영체제 커널에서 여러 프로세스 그룹에게 독립적인 자원 공간을 제공하기 위해 사용되는 기술입니다. 예를 들어, 각각의 프로세스 그룹은 독립적인 파일 시스템, 네트워크 인터페이스, 프로세스 ID, 호스트 이름 등의 리소스를 가지고 있는 것처럼 보일 수 있습니다.
파드는 이러한 리눅스 네임스페이스를 공유하는 여러 개의 컨테이너로 구성됩니다. 이것은 
파드 내의 컨테이너들이 서로 독립적인 프로세스 그룹처럼 보이지만 실제로는 하나의 논리적인 애플리케이션으로 작동
할 수 있도록 하는 것입니다. 예를 들어, 파드 내의 여러 컨테이너가 같은 네트워크 인터페이스를 공유하고 서로의 파일 시스템에 접근할 수 있습니다.

 

→ 그니까 서로 다른 자원을 사용하는(듯한) 컨테이너들이 하나의 애플리케이션에서 동작할 수 있도록 컨테이너 자원(달라지는 부분)을 공유한다는 말이군 ~ 이때 네임스페이스를 공유하니까 컨테이너가 localhost로 요청을 보내면 같은 파드 안에 있는 다른 컨테이너가 이 요청을 받을 수 있군 ~

 

결국 파드는 애플리케이션을 여러 컨테이너로 분리해야 할 때, 이러한 컨테이너들이 공유해야 하는 리소스를 관리하면서도 하나의 논리적인 단위로 사용할 수 있게한다. 그래서 컨테이너만 사용할 때와는 다르게 여러 컨테이너를 한 단위로 사용할 수 있고, 자원을 공유하기 때문에 통신 비용을 줄일 수 있다.

'Cloud > Kubernates' 카테고리의 다른 글

Service  (0) 2023.10.29
ReplicaSet, Deployment  (0) 2023.10.29
쿠버네티스 시작하기 : 내부 구조  (0) 2023.10.29
GKE 설치  (0) 2023.10.29
쿠버네티스란?  (0) 2023.10.29