쿠버네티스 - Pod, ReplicaSet, Deployment

유현수·2024년 2월 6일

Kubernetes

목록 보기
1/1
post-thumbnail

Udemy CKA 강의 내용을 정리하였습니다.

Pod

Pod

  • 애플리케이션의 단일 인스턴스 (애플리케이션과 1:1 관계)
  • 하나의 Pod에 여러 컨테이너를 띄울 수도 있습니다. (일반적이지는 않습니다.)
  • k8s에서 생성할 수 있는 가장 작은 단위입니다.
  • 스케일 업, 다운 시 컨테이너가 아닌 Pod 수를 조절합니다.

YAML in Kubernetes

k8s 오브젝트(Pod, Replica, Deployment, Service 등) 생성 시 yaml 파일을 사용할 수 있습니다.

k8s definition 파일에는 다음 4가지 필드를 반드시 포함해야 합니다.

# pod-definition.yaml
apiVersion: 
kind:
metadata:


spec:

  1. apiVersion: 사용할 k8s API 버전을 명시합니다. 어떤 오브젝트를 생성할지에 따라 사용하는 API 버전이 달라집니다. 다음은 대표적인 오브젝트들이 사용하는 API 버전입니다.

    KindVersion
    Podv1
    Servicev1
    ReplicaSetapps/v1
    Deploymentapps/v1
  2. kind: 어떤 오브젝트를 생성할 것인지 명시합니다. Pod, ReplicaSet 등이 있습니다. 대소문자를 구별하기 때문에 유의해서 작성합니다.

  3. metadata: 오브젝트에 대한 정보를 명시합니다. 오브젝트의 이름, 라벨 등을 작성합니다. label 하위에는 원하는 정보를 key-value 형태로 자유롭게 작성합니다. 수많은 Pod가 생성되었을 때 이 label에 작성한 값을 해시태그처럼 활용하여 Pod들을 선택하고 원하는 기능을 적용하게 됩니다.
    1

  4. spec: 오브젝트를 생성하기 위해 필요한 정보들을 작성합니다. spec 하위 내용은 오브젝트의 종류에 따라 달라집니다. 우선 단일 컨테이너를 실행하는 Pod의 spec은 다음과 같이 작성합니다.

# pod-definition.yaml

apiVersion: v1
kind: Pod
metadata:
  name: myapp-pod
  labels:
    app: myapp
    type: front-end
spec:
  containers:  # 실행할 컨테이너 목록
    - name: nginx-container  # 컨테이너 목록의 시작에 '-'를 붙인다.
      image: nginx  # 컨테이너에서 실행할 이미지

Commands

Pod를 생성하고 조회하기 위해 다음과 같은 명령어를 사용합니다. create 이외에도 apply 등의 명령어를 자주 사용하지만 해당 부분에 대해서는 추후 명령형과 선언형 파트에서 알아봅시다.

# yaml 파일로 pod 생성
$ kubectl create -f pod-definition.yaml

# pod 목록 조회
$ kubectl get pods

# pod 상세 정보 조회
$ kubectl describe pod myapp-pod

ReplicaSet

k8s에는 뇌 역할을 담당하는 controller 오브젝트들이 있습니다. 이 중에서도 Replica를 관리하는 ReplicaSet 대해 알아봅시다.

Replica Set과 Replication Controller는 비슷하지만 다른 개념입니다.
기본적으로 같은 역할을 수행하긴 하지만 Replica Set이 더욱 최신 기술이며 권장되는 방식입니다.
현재는 Replica Set이 Replication Controller를 대체한 상태입니다.

ReplicaSet의 역할과 필요성

High Availability

ReplicaSet은 선언한 Pod 개수를 유지하는 역할을 합니다. 일부 Pod가 실행이 중단되어도 ReplicaSet이 다시 선언한 Pod 개수만큼 실행되도록 Pod를 새로 띄워줍니다.

Load Balancing & Scaling

ReplicaSet은 여러 노드에 걸쳐 로드 밸런싱과 스케일링을 수행할 수 있습니다. 유저 요청이 급증하면 다른 노드에 Pod를 띄울 수 있고 여러 노드에 걸져 로드 밸런싱을 수행합니다.

YAML

2

  • template: ReplicaSet에서 생성할 Pod 템플릿을 작성합니다.
    • Pod 박스: 해당 ReplicaSet에서 새로 Pod를 생성하게 되면 이 영역에 작성한 정보를 바탕으로 Pod를 생성합니다.
    • replicas: 유지할 Pod 개수를 지정합니다.
    • selector: 해당 ReplicaSet이 관리할 Pod를 matchLabels에서 지정합니다. (즉, 기존 실행 중이던 Pod도 ReplicaSet이 관리할 수 있습니다.)

Commands

아래와 같은 명령어로 Replica Set을 생성, 수정할 수 있습니다. 물론 아래와 같은 명령어 외에도 선언적으로 다룰 수 있는 방법이 있습니다. 해당 부분 역시 명령형과 선언형 파트에서 알아보겠습니다.

# Replica Set 생성
$ kubectl create -f replicaset-definition.yml

# Replica Set 조회
$ kubectl get replicaset

# Scale - yml 파일에서 replicas 조정 후 replace
$ kubectl replace -f replicaset-definition.yml

# Scale - scale 명령어로 replica 수 조정
$ kubectl scale --replicas=6 -f replicaset-definition.yml

Deployment

Deployment가 제공하는 기능

  • 애플리케이션을 여러 인스턴스로 배포
  • 무중단 배포 or 롤백
  • 변경사항을 여러 인스턴스에 한 번에 적용

3

위 그림을 보면 Deployment 안에 ReplicaSet이 있는걸 볼 수 있습니다. Deployment를 생성하면 ReplicaSet이 자동으로 생성됩니다. 이 내용은 바로 다음 부분에서 한 번 더 살펴보겠습니다.

YAML

Deployment를 정의하는 yaml 파일은 ReplicaSet을 정의하는 yaml 파일과 동일합니다.
차이점은 kindReplicaSet이 아닌 Deployment를 작성하는 것 뿐입니다.

4

Commands

Deployment를 실행하고 조회하는 명령어입니다.

5

위 명령어로 나온 결과물을 보면 Deployment를 생성했을 때 Deployment에 지정한 이름을 바탕으로 ReplicaSet, Pod가 생성된 것을 확인할 수 있습니다.

profile
"Life isn't about finding yourself. Life is about creating yourself."

0개의 댓글