레플리카셋 (ReplicaSet)

niyu·2022년 7월 22일
0

쿠버네티스 기초

목록 보기
4/15
post-thumbnail
post-custom-banner

컨트롤러는 파드들을 관리하는 역할을 한다. 컨트롤러에는 ReplicaSet, DeamonSet, Job, CronJob, Deployment, StatefulSet 등이 있다.

ReplicaSet

파드를 단독으로 만들면 파드에 문제가 생겼을 때 자동으로 복구되지 않는다. 이러한 파드를 정해진 수만큼 복제하고 관리하는 것이 레플리카셋이다. 레플리카셋은 원하는 개수의 파드를 유지한다.

ReplicaSet
ReplicaSet (출처: blog.knoldus.com/opsinit-replicaset-vs-daemonset-in-kubernetes/)

일반적으로 레플리카셋을 직접 생성하지는 않는다. 그 대신 상위 수준의 디플로이먼트 리소스를 만들 때 자동으로 생성한다.

🧩 레플리카셋 작성

# frontend.yaml
apiVersion: apps/v1
kind: ReplicaSet
metadata:
  name: frontend
  labels:
    app: guestbook
    tier: frontend
spec:
  replicas: 3 # 원하는 파드 개수. 기본값은 1
  selector: # 라벨 체크 조건. 어떤 레이블의 파드를 선택해서 관리할지 설정
    matchLabels:
      tier: frontend
  template: # 생성할 파드 명세
    metadata:
      labels:
        tier: frontend
    spec:
      containers: # 컨테이너 명세
      - name: php-redis
        image: gcr.io/google_samples/gb-frontend:v3

라벨을 체크해서 원하는 수의 파드가 없으면 새로운 파드를 생성한다.

🧩 레플리카셋 생성
이 매니페스트를 frontend.yaml에 저장하고 쿠버네티스 클러스터에 적용하면 정의되어 있는 레플리카셋이 생성되고 레플리카셋이 관리하는 파드가 생성된다.

# 레플리카셋 생성
$ kubectl apply -f frontend.yaml

🧩 레플리카셋 확인
현재 배포된 레플리카셋을 확인할 수 있으며 생성된 frontend를 볼 수 있다.

# 리소스 확인
$ kubectl get rs

NAME       DESIRED   CURRENT   READY   AGE
frontend   3         3         3       6s
  • DISIRED : 레플리카셋 설정에 지정한 파드 개수
  • CURRENT : 레플리카셋을 이용해 현재 클러스터에서 동작하는 실제 파드 개수
  • READY : 사용할 준비가 완료된 파드의 개수

또한 레플리카셋의 상태를 확인할 수 있다. 출력은 다음과 유사할 것이다.

$ kubectl describe rs/frontend
Name:         frontend
Namespace:    default
Selector:     tier=frontend
Labels:       app=guestbook
              tier=frontend
Annotations:  kubectl.kubernetes.io/last-applied-configuration:
                {"apiVersion":"apps/v1","kind":"ReplicaSet","metadata":{"annotations":{},"labels":{"app":"guestbook","tier":"frontend"},"name":"frontend",...
Replicas:     3 current / 3 desired
Pods Status:  3 Running / 0 Waiting / 0 Succeeded / 0 Failed
Pod Template:
  Labels:  tier=frontend
  Containers:
   php-redis:
    Image:        gcr.io/google_samples/gb-frontend:v3
    Port:         <none>
    Host Port:    <none>
    Environment:  <none>
    Mounts:       <none>
  Volumes:        <none>
Events:
  Type    Reason            Age   From                   Message
  ----    ------            ----  ----                   -------
  Normal  SuccessfulCreate  117s  replicaset-controller  Created pod: frontend-wtsmm
  Normal  SuccessfulCreate  116s  replicaset-controller  Created pod: frontend-b2zdv
  Normal  SuccessfulCreate  116s  replicaset-controller  Created pod: frontend-vcmts

🧩 파드 확인
현재 파드 정보를 확인한다.

# 파드 확인
$ kubectl get pods

NAME             READY   STATUS    RESTARTS   AGE
frontend-b2zdv   1/1     Running   0          6m36s
frontend-vcmts   1/1     Running   0          6m36s
frontend-wtsmm   1/1     Running   0          6m36s

.spec.replicas를 3으로 설정했기 때문에 frontend-b2zdv, frontend-vcmts, frontend-wtsmm라는 파드가 실행되는 것을 확인할 수 있다.

🧩 레플리카셋 삭제
레플리카셋을 삭제한다. 레플리카셋을 삭제하면 관련 파드도 모두 삭제된다.

$ kubectl delete rs frontend

References

post-custom-banner

0개의 댓글