본문 바로가기
INFRA/Operation

쿠버네티스 STEP2 Pod & Deployment

by BTC_김쿼카 2022. 7. 20.

ABTCEFG♪  안녕하세요, 여러분!

BTC_김쿼카입니다.

 

쿠버네티스 명령어를 잘 사용하기 위해서라면 기본 개념을 알아두는 것이 좋겠죠? 쿠버네티스의 가장 기본이 되는 Pod에 대해서 간단하게 알아볼게요!

 


 

1. Pod

  • kubernetes의 최소 실행 단위
  • 스토리지 및 네트워킹 리소스를 공유하는 단일 컨테이너 또는 관련 컨테이너 그룹 (상황에 따라 2개)
  • Pod 내에 실행되는 컨테이너는 동일한 노드에 할당되며 동일한 생명 주기를 가짐
  • 고유의  IP를 할당받고 Pod 안의 컨테이너들은 서로 IP를 공유

 

쿠버네티스의 모든 리소스는 YAML 형태의 선언형 명령 정의서로 표현될 수 있는데 이때 아래의 명령어 사용 시 Pod를 실제로 생성하지 않고도 템플릿 파일을 생성할 수 있다는 점 참고해주세요 

kubectl run nginx –image nginx –dry-run=client -o yaml > nginx.yaml
kubectl apply -f nginx.yaml

 

 

 

* Pod 생성 과정

1. 사용자가 kubectl 명령을 통해 Pod 정의를 쿠버네티스 마스터에 전달함

2. 쿠버네티스 마스터는 YAML 정의의 유효성 체크 후 특정 노드에 사용자의 요청에 따라 컨테이너를 실행하도록 명령을 내림

3. 명령을 전달받은 노드는 요청 사항에 맞게 실제 컨테이너를 노드에 실행함

 

 


2. Deployment

  • Stateless 앱을 배포할 때 사용되는 가장 기본이 되는 컨트롤러
  • Pod에 대한 기준 스펙을 정의한 Object이자, 성능을 관리하고  Pod의 원하는 동작이나 특성을 지정하는 도구
  • replicaset을 관리하며 배포를 위한 기능 제공
  • 롤링업데이트, 배포 중단, 롤백이 가능함

→ 지속적으로 배포된 인스턴스들을 모니터링하기 때문에 노드가 다운되거나 삭제되면 deployment 컨트롤러가 인스턴스를 클러스터 내부의 다른 노드 인스턴스로 교체해줍니다.

 

 

*Templates

ReplicaSet과 Pod를 담을 수 있는 구조로 되어있음

apiVersion: apps/v1beta1
kind: Deployment
metadata:
  # Deployment 객체의 Unique한 명칭
  name: deployment-example
spec:
  # Deployment label selector for pod
  selector:
    matchLabels:
      app: nginx
  # 3 Pods should exist at all times.
  replicas: 3
  template:
    metadata:
      labels:
        # Pod의 라벨
        app: nginx
    spec:
      containers:
      - name: nginx
        # Run this image
        image: nginx:1.10

 

 

- apiVersion apps/v1 → 쿠버네티스의 apps/v1 API를 사용 합니다.

- kind: Deployment → Deployment의 작업으로 명시 합니다.

- spec.selector → 어떤 레이블의 파드를 선택하여 관리할지에 대한 설정 입니다. 앱 컨테이너의 test-deployment 레이블을 식별하여 해당되는 파드들을 관리하며, 이 필드가 없을 경우 spec.template.metadata.labels에 설정된 내용들을 기본값으로 사용 합니다.

- spec.replicas → 파드의 개수를 몇개 유지할 것 인지 설정 합니다. 기본값은 1 입니다.

- spec.template.metadata.labels.app:nginx → 식별하는 레이블이 앱 컨테이너이며 nginx 로 식별 합니다.

 

 

 

댓글