본문 바로가기
킷도우의 클라우드, 쿠버네티스/쿠버네티스(kubernetes)

[쿠버네티스] 레플리카셋(replicaset)이란? 개념과 정의, 생성 방법( + 레이블과 셀렉터)

by 킷도우 2023. 2. 23.
반응형

 안녕하세요. IT Window 킷도우입니다.

날씨가 점점 풀리고 있습니다. 봄이 오는 것 같습니다. 새해 목표를 계획하고 벌써 2달이 지났네요... 여러분들은 새해 계획 잘 지키고 계신가요? ㅎㅎ 봄맞이 기념 다시 마음을 가다듬고 오늘도 포스팅해봅니다!

 

 오늘 여러분들에게 설명드릴 내용은 바로 쿠버네티스에서 컨테이너 실행과 관련된 리소스 중 하나인 레플리카셋입니다. 레플리카셋이란 무엇이고 어떻게 정의해서 사용하는 것인지 간략히 설명드려볼까 합니다. 설명에 앞서 파드란 무엇인가에 대해서 반드시 알고 넘어가야 합니다. 아래 링크를 참조하시면 간략히 파악할 수 있으니 참조바랍니다.

https://kitdow.tistory.com/35

 

[쿠버네티스] pod란? pod 생성, 매니페스트(yaml) 파일 파헤치기

안녕하세요. IT Window 킷도우입니다. 오늘 여러분들에게 설명드릴 내용은 바로 쿠버네티스에서 컨테이너 실행과 관련된 리소스 중 하나인 파드입니다. 파드란 무엇이며 이 파드의 근본이라고 할

kitdow.tistory.com

 

1. 레플리카셋이란? 왜 레플리카셋을 쓸까?

 레플리카셋, replicas의 사전적 정의는 모의품, 복제품입니다. 무엇을 복제품으로 만드는 것 일까요?  바로 파드입니다. yaml 형태의 매니페스트 파일에 [replicas : 3] 과 같은 형태로 정의하면 복제품 즉 파드 3개가 프로세스 상에 올라오게 됩니다.

 그럼 굳이 파드 3개를 각각 만들어주면 되는데 왜 레플리카셋을 쓸까요? 레플리카셋은 단순히 파드를 3개를 만드는 것 뿐만 아니라 항상 파드의 갯수를 3개로 유지하는 속성을 가지고 있습니다. 예를들어 3개의 파드 중 한개의 파드가 과부하나 기타 이유로 내려가 운영 중인 파드의 갯수가 2개가 됐다고 가정해 봅시다. 레플리카셋은 이를 인지하고 3개를 맞추기 위해 파드 하나를 재생성합니다. 장애 복구에 굉장히 유용하게 쓰일 수 있는 기능이라고 볼 수 있습니다.

 

2. 어떻게 레플리카셋은 상시 파드 갯수를 일정하게 유지할 수 있을까?

(about 레이블)

 어떻게 레플리카셋은 상시 파드 갯수를 유지할 수 있을까요? 아 물론 원론적인, 기술적인 부분에 관해서 말씀드리는 것은 아닙니다. 레이블에 대해 말씀드리려 합니다. 콩글리쉬로 하면 라벨이죠. 이름표, 표제 정도로 해석할 수 있겟는데요. 이 레플리카셋에 레이블을 붙입니다. nginx-pod라는 명칭을 갖는 레이블을 붙입니다. 그리고 레플리카셋에 의해 생성될 파드에도 똑같이 nginx-pod라는 라벨딱지를 붙입니다. 그럼 레플리카셋은 파드 중 nginx-pod라는 라벨을 가진 것의 갯수를 지속 카운팅하다가 숫자가 많거나 적으면 상시성을 유지하도록 하는 것입니다. 앞서 말씀드린 것처럼 파드 갯수가 줄어들었다면 파드 하나를 더 만들고, 갯수가 많아졌다면 기존 파드 중 하나를 삭제합니다. 

 

3. 레플리카셋 정의하기(yaml 형태)

그러면 거두절미하고 레플리카셋을 하나 정의하면서 위에 말씀드린 부분이 무엇을 의미하는지를 살펴보겠습니다. 그리고 각 속성들에 대해 설명드려 보겠습니다.

kitdow_on@cloudshell:~ (gke-cloud-nexacro)$ cat test-rs.yaml
apiVersion: apps/v1
kind: ReplicaSet
metadata:
  name: test-rs
spec:
  replicas: 3
  selector:
    matchLabels:
      app: nginx-pod
  template:
    metadata:
      labels:
        app: nginx-pod
    spec:
      containers:
      - name : nginx-container
        image : nginx:1.17

위에서부터 순서대로 설명드리겠습니다.

kind : 리소스의 종류를 지정하는 속성입니다. 레플리카셋으로 지정했습니다.

metadata : 해당 리소스에 대한 일반 정보를 담습니다. 여기선 레플리카셋에 test-rs라는 이름을 붙여줬습니다.

spec : 레플리카셋의 실행과 관련된 정보를 담습니다.

replicas : 복제할 파드의 갯수를 지정합니다.

selector : 위에 말씀드린 레이블을 지정하는 부분입니다. select 즉 레이블을 수집해올 때 어떤 이름으로 수집해 올지를 정하는 부분입니다.

matchLabels : 매칭할 레이블을 지정하는 부분으로 nginx-pod라는 이름으로 라벨을 만들었습니다.

template : replicas 갯수만큼 올리게될 파드의 속성을 정의하는 영역입니다.

metadata : 마찬가지 올리게될 파드에 대한 일반적인 정보입니다. 여기에 파드에 달아줄 레이블 이름을 정의합니다. 반드시!!! 위 spec.selector.matchLabels.app에 정의한 이름 nginx-pod와 동일하게 지정해야 합니다. 그래야 복제품 갯수를 유지할 수 있겠죠?

spec : 파드의 실행과 관련된 정보를 담습니다. 이 부분은 위 파드란 무엇인가 포스팅에서 살펴봤으니 생략하겠습니다.

반응형

4. 레플리카셋 생성

파드 생성과 마찬가지로 apply 명령어를 이용해 실행합니다.

kitdow_on@cloudshell:~ (gke-cloud-nexacro)$ kubectl apply -f test-rs.yaml
replicaset.apps/test-rs created

레플리카셋 정보 조회

kitdow_on@cloudshell:~ (gke-cloud-nexacro)$ kubectl get replicasets -o wide
NAME      DESIRED   CURRENT   READY   AGE     CONTAINERS        IMAGES       SELECTOR
test-rs   3         3         3       9m53s   nginx-container   nginx:1.17   app=nginx-pod

레이블 정보를 포함한 파드 정보 조회

kitdow_on@cloudshell:~ (gke-cloud-nexacro)$ kubectl get pod --show-labels
NAME            READY   STATUS    RESTARTS       AGE     LABELS
test-rs-75pfd   1/1     Running   0              10m     app=nginx-pod
test-rs-dk5vw   1/1     Running   0              10m     app=nginx-pod
test-rs-v5fgr   1/1     Running   0              10m     app=nginx-pod

 

5. 파드 강제 삭제 후 replicas 기능 동작하는지 확인

파드 삭제, 아래 코드 처럼 test-rs-75pfd를 삭제하자 새로운 파드 test-rs-4h8st가 올라오는 것을 확인할 수 있다.

kitdow_on@cloudshell:~ (gke-cloud-nexacro)$ kubectl delete pod test-rs-75pfd
pod "test-rs-75pfd" deleted
kitdow_on@cloudshell:~ (gke-cloud-nexacro)$ kubectl get pod --show-labels
NAME            READY   STATUS    RESTARTS       AGE     LABELS
test-pod        2/2     Running   71 (53m ago)   2d23h   <none>
test-rs-4h8st   1/1     Running   0              6s      app=nginx-pod
test-rs-dk5vw   1/1     Running   0              14m     app=nginx-pod
test-rs-v5fgr   1/1     Running   0              14m     app=nginx-pod

 

6. 스케일링

여기서 스케일링이란 replicas 수를 컨트롤 하는 것을 의미합니다. 가령 위 예제에서는 3개로 지정했었으나, 5개로 지정하는 방법입니다. 물론 test-rs.yaml 을 vi편집기를 열어 수정할 수 있습니다. 하지만 아래와 같이 kubectl scale 명령어를 활용하여 바꿀 수 있습니다.

kubectl scale replicaset test-rs --replicas 5

변경 됐는지 확인

kitdow_on@cloudshell:~ (gke-cloud-nexacro)$ kubectl get replicasets
NAME      DESIRED   CURRENT   READY   AGE
test-rs   5         5         5       19m
kitdow_on@cloudshell:~ (gke-cloud-nexacro)$ kubectl get pods -L app
NAME            READY   STATUS    RESTARTS       AGE    APP
test-pod        2/2     Running   71 (59m ago)   3d
test-rs-4h8st   1/1     Running   0              6m9s   nginx-pod
test-rs-9s9kl   1/1     Running   0              57s    nginx-pod
test-rs-dk5vw   1/1     Running   0              20m    nginx-pod
test-rs-sdfr6   1/1     Running   0              57s    nginx-pod
test-rs-v5fgr   1/1     Running   0              20m    nginx-pod

 

이상으로 레플리카셋에 대한 포스팅을 마쳤습니다.

감사합니다!

 

반응형

댓글