티스토리 뷰

Web/Kubernetes

Kubernetes ReplicaSet

tose33 2024. 1. 5. 21:54

https://subicura.com/k8s/guide/replicaset.html

 

ReplicaSet

ReplicaSet(복제셋)이 무엇인지 알아보고 ReplicaSet을 이용하여 Pod을 관리하는 방법을 살펴봅니다.

subicura.com

 

 

이전에 Pod을 직접 만들어 봤는데 (https://tose33.tistory.com/1351), 이렇게 pod 만 만들면 pod 에 어떤 문제가 생겨 죽었을때 자동으로 복구되지 않는다.

 

그런데 쿠버네티스를 쓰는 가장 큰 이유 중 하나는 이렇게 죽은 컨테이너를 자동으로 복구 해주는 것인데 왜 pod 이 자동으로 되살아나지 않을까?

 

그건 그 일을 담당하는게 ReplicaSet 이기 때문이다.

 

ReplicaSet 내부에 Pod 이 존재한다

 

 

ReplicaSet

apiVersion: apps/v1
kind: ReplicaSet
metadata:
  name: echo-rs
spec:
  replicas: 1
  selector:
    matchLabels: # app은 echo이고 tier는 app 인 pod 을 체크하는 레플리카셋 생성 
      app: echo
      tier: app
  template: # 만약 위와 같은 pod 이 없다면 template 에 정의된 스펙대로 pod 생성한다 
    metadata:
      labels:
        app: echo
        tier: app
    spec:
      containers:
        - name: echo
          image: ghcr.io/subicura/echo:v1

 

apply

 

apply 후 get 으로 pod 와 replicaset 을 조회해 보면

echo-rs 가 원하는것(Desired)=1 이고 현재(CURRENT) 1개 가 만들어진것을 볼 수 있다.

 

그리고 replicaset 이외에도 pod 이 하나 만들어져 있다.

이는 replicaSet이 자동으로 만든 pod 이다.

 

DESIRED 는 원하는 상태가 1, 즉 원하는 pod 의 갯수가 1 이라는 의미다.

 

--show-labels

 

yml 파일에 정의한대로 app=echo, tier=app 을 label 을 갖는 pod 이 만들어졌다.

 

yml의 matchLabels에 정의한대로 레플리카셋은 app=echo, tier=app 을 레이블로 갖는 pod 이 1개 있는 상태를 유지한다.

 

 

label 삭제

 

kubectl label pod/echo-rs-9gmwr app-

 

위 커맨드는 해당하는 pod 의 레이블중 app 을 제거하는 명령어다.

이렇게 app 레이블을 제거하면 어떻게 될까?

 

  • 레플리카셋은 app=echo,tier=app 을 갖는 pod 를 1개 갖는 상태를 유지하려고 한다.
  • 그런데 기존에 만들어진 해당하는 두개의 레이블을 갖는 pod 에서 app 레이블을 제거 했기 때문에 해당 상태가 유지 되지 않는다.
  • 따라서 새로운 pod 을 하나 더 만들게 된다.

label 복원

 

kubectl label pod/echo-rs-9gmwr app=echo

 

위 커맨드로 이전에 app 레이블을 제거했던 pod 에 다시 app 레이블을 붙였다.

그리고 pod 들을 확인했더니 내가 지우지 않았는데 다시 pod 이 1개가 됐다.

 

레플리카셋이 상태를 유지하기 위해 pod 하나를 제거한것이다.

 

 

스케일 아웃

ReplicaSet을 이용하면 손쉽게 pod 를 여러개 복제 할 수 있다.

 

apiVersion: apps/v1
kind: ReplicaSet
metadata:
  name: echo-rs
spec:
  replicas: 4 # 1 에서 4로 변경
  selector:
    matchLabels:
      app: echo
      tier: app
  template:
    metadata:
      labels:
        app: echo
        tier: app
    spec:
      containers:
        - name: echo
          image: ghcr.io/subicura/echo:v1

 

기존에 replicas: 1 을 4로 변경했다.

 

 

apply 한 후에 pods 를 보면, pod 이 4개가 됐다.

 

 


ReplicaSet은 pod 의 갯수를 사용자가 원하는 상태로 유지한다.

label 을 이용해 pod 을 체크하기 때문에 label 이 겹치지 않도록 정의해야 한다.

 

'Web > Kubernetes' 카테고리의 다른 글

Kubernetes Service (ClusterIP, NodePort, Load Balanacer)  (0) 2024.01.06
Kubernetes Deployment  (0) 2024.01.06
Kubernetes Pod  (0) 2024.01.05
kubectl 명령어  (0) 2024.01.05
Kubernetes cluster (Minikube), kubectl 설치  (0) 2024.01.05
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/06   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30
글 보관함