DevOps & SRE/Docker & kubernetes

[쿠버네티스 공부] Pod란 무엇일까?

반응형
그저 사이드 플젝에서 한 번 써보고 싶어서... 쿠버네티스를 공부를 하면서 정리하는 글입니다.

쿠버네티스

Pod

k8s에서의 최소 배포 단위

Container

  • 파드안에는 여러 컨테이너들이 있을 수 있다. (1개 or n개)
  • 파드 안의 각 컨테이너들은 각각 포트를 가지고 있으며, 파드 내의 컨테이너들은 한 호스트로 묶여있음.
  • 이러한 이유로 같은 파드 내의 하나의 컨테이너(A 컨테이너 - port:8000)에서 다른 컨테이너(B 컨테이너 - port:8001)로 localhost:8001로 접근할 수 있다.
  • 또한 파드 생성시, 쿠버네티스 클러스터 내부에서만 파드에 접속할 수 있는 IP가 할당됨 (외부에서는 접속할 수 없음)
  • 이 IP는 파드가 다시 생성되거나 하면 IP가 변경된다 (IP가 고정되지 않음)


Label

  • k8s의 모든 오브젝트에 라벨을 달 수 있음.
  • 라벨을 다는 이유는 오브젝트들을 기능에 따라 구분할 수 있게 하기 위해서이다.
    ex) production, dev, test 등등.
apiVersion: v1
kind: Pod
metadata:
  name: pod-1
  labels:
    env: dev
spec:
  containers:
    - name: ...
      image: ...

---
apiVersion: v1
kind: Pod
metadata:
  name: pod-2
  labels:
    env: prod
spec:
  containers:
    - name: ...
      image: ...
  • 이 라벨들을 이용해서 아래와 같이 Service 특정 오브젝트들만을 위한 서비스를 만드는 등 이용될 수 있음.
---
apiVersion: v1
kind: Service
metadata:
  name: service-1
spec:
  selector:
    env: prod
  ports:
    - port: 9000
      targetPort: 8000
  type: NodePort


Node Schedule

파드는 결국 여러 노드 중에 하나의 노드에 올라가져아 하는데, 이를 결정하는 방법은 두 가지 방법이 있다.

  1. 노드를 직접 선택하는 방법
  2. 아래의 경우 kubernetes.io/hostname: docker-desktop 이라는 노드를 직접 선택하여서 파드를 띄움.
apiVersion: v1
kind: Pod
metadata:
  name: ...
spec:
  nodeSelector:
    kubernetes.io/hostname: docker-desktop
  containers:
    - name: ...
      image: ...
  1. 쿠버네티스가 알아서 선택해주는 방법
  2. 아래의 경우 해당 스펙에 따라 k8s가 적절한 노드를 선택해서 파드를 띄워줌.
apiVersion: v1
kind: Pod
metadata:
  name: ...
spec:
  containers:
    - name: ...
      image: ...
      resources:
        requests:
          memory: 0.5Gi
        limits:
          memory: 0.5Gi

출처) www.inflearn.com/course/%EC%BF%A0%EB%B2%84%EB%84%A4%ED%8B%B0%EC%8A%A4-%EA%B8%B0%EC%B4%88

반응형