IT/Kubernetes

쿠버네티스 ReplicaSet 사용법 (scale, 삭제, pod 제외)

엘티엘 2022. 1. 15. 11:59

ReplicaSet 이란?

레플리카셋의 목적은 레플리카 파드 집합의 실행을 항상 안정적으로 유지하는 것이다. 이처럼 레플리카셋은 보통 명시된 동일 파드 개수에 대한 가용성을 보증하는데 사용한다. 
[출처] https://kubernetes.io/ko/docs/concepts/workloads/controllers/replicaset/

쉽게 정리하면, 가용성의 위해 동일한 파드의 개수를 유지하는 기능이다.

예를 들어 A라는 pod의 개수를 3개로 유지하기로 설정했다면, Node가 다운되어 pod가 사라져도 다른 Node에 pod를 자동으로 생성해서 pod를 3개로 유지하고, 다른 운영자가 pod 를 실수로 지우거나 새로 생성하더라도 쿠버네티스 자체에서 pod의 개수가 3개가 되도록 지속적으로 유지한다.

ReplicaSet 만들기

ReplicaSet 리소스를 생성해야 한다. 생성시 pod개수 및 pod 정보를 입력해야 한다.

  1. RepliicaSet 리소스를 생성
    1. yaml 파일 기준, kind: ReplicaSet
    2. kubectl create -f [yaml] 으로 생성
  2. pod 개수 설정
    1. spec.replica=3
  3. 개수를 유지할 pod 를 선택
    1. ReplicaSet은 label을 기준으로 일치하는 pod 선택
    2. spec.selector 내 원하는 label 입력
    3. 만일 pod 생성후 pod의 label 이 변경되거나 삭제된다면, ReplicaSet은 pod가 삭제된 것으로 인지하고 추가 생성함

아래는 ReplicaSet 예제 이다.

apiVersion: apps/v1
kind: ReplicaSet
metadata:
  name: frontend
spec:
  replicas: 3
  selector:
    matchLabels:
      tier: frontend
  template:
    metadata:
      labels:
        tier: frontend
    spec:
      containers:
      - name: php-redis
        image: gcr.io/google_samples/gb-frontend:v3​

ReplicasSet 사용예시

1) Pod의 ReplicaSet 확인하기

아래 명령어 실행시 metadata.ownerReferences 에서 관련정보 확인이 가능하다.

kubectl get pod [pod] -o yaml

2) ReplicaSet 리소스만 삭제 (Pod 유지)

delete 실행시 --cascade=orphan 옵션을 추가한다. 옵션없이 delete를 실행하면 pod도 같이 삭제된다.

kubectl delete rs --cascade=orphan [ReplicaSet]

3) Pod를 ReplicasSet에서 제외하기

Pod의 Label을 수정한다.

  1. kubectl describe rs 을 통해,  Pod Template의 Label 확인
  2. kubectl edit pod 를 통해, 제외하고자 하는 Pod에서 해당 Label 삭제

4) ReplicaSet 개수 조정하기 (scale)

spec.replicas의 값을 변경하면 된다. (아래 3가지 방법중 원하는 방법 사용)

kubectl scale --replicas=5 rs [ReplicaSet]
kubectl edit rs [ReplicaSet]
kubectl apply -f [yaml]

삭제되는 Pod는 아래순서로 결정된다.

  1. Pending 상태인 (+ 스케줄링할 수 없는) 파드가 먼저 스케일 다운된다.
  2. controller.kubernetes.io/pod-deletion-cost 어노테이션이 설정되어 있는 파드에 대해서는, 낮은 값을 갖는 파드가 먼저 스케일 다운된다.
  3. 더 많은 레플리카가 있는 노드의 파드가 더 적은 레플리카가 있는 노드의 파드보다 먼저 스케일 다운된다.
  4. 파드 생성 시간이 다르면, 더 최근에 생성된 파드가 이전에 생성된 파드보다 먼저 스케일 다운된다. (LogarithmicScaleDown 기능 게이트가 활성화되어 있으면 생성 시간이 정수 로그 스케일로 버킷화된다)
  5. 모든 기준에 대해 동등하다면, 스케일 다운할 파드가 임의로 선택된다.

 

 

반응형