ReplicaSet이란
- 클러스터 안에서 움직이는 파드를 관리한다.
- 클러스터의 파드의 실행을 항상 안정적으로 유지하는 것을 목표로 명시된 파드의 개수에 대한 가용성을 보증하는데 사용한다.
- labelSelector 조건에 따라 파드를 검색하여 매니페스트 파일의 replicas의 수와 일치하는지 확인한다.
- 만약 가동중인 파드의 수가 부족한 경우 새로운 파드를 추가하고, 파드 수가 많을 때는 여분의 파드를 정지시킨다.
Ex) ReplicaSet의 yaml
apiVersion: apps/v1
kind: ReplicaSet
metadata:
name: one-rs
labels:
app: one-rs
tier: frontend
spec:
replicas: 3
selector:
matchLabels:
app: one-pod
tier: backend
template:
metadata:
labels:
app: one-pod
tier: backend
spec:
containers:
- name: nginx
image: nginx:latest
kind
: 오브젝트 종류를 명시하는 항목.metadata
: 레플리카셋의 정보를 입력하는 항목.metadata.name
: 레블리카셋 조회 명령 입력시 보이는 이름.metadata.labels
: 다른 워크로드가 이 레플리카셋을 참조할 때 selector로 특정하기 위한 라벨.spec.replicas
: 복제 파드의 개수.spec.selector
: 레플리카셋이 복제할 파드를 참조하기 위한 selector.sepc.template
: 라플리카셋이 복제할 파드의 정보.
metadata.labels, spec.selector.matchLabels, spec.template.metadata.labels
label 필드들이 많아 각 label이 가리키는 것이 무엇인지 헷갈릴 수 있다.
metadata.labels
: 레플리카셋의 라벨로 다른 워크로드가 이 라벨을 통해 레플리카셋을 참조할 수 있다.spec.selector.matchLabels
: 직접 파드를 참조하기 위해 지정한 파드의 라벨이다.spec.template.metadata.labels
: 복제될 파드에 붙는 라벨이다.
Ex) Pod의 yaml
apiVersion: v1
kind: Pod
metadata:
name: test-pod
labels:
tier: apple
spec:
containers:
- name: nginx
image: nginx:latest
- 파드의 이름은 test-pod.
- 파드의 라벨은 apple. 이 파드를 참조할 때는 test-pod가 아닌 apple을 참조해야 한다.
Pod와 ReplicaSet의 참조
kubectl apply -f test.yaml
통해 파드를 생성.- test-pod라는 파드가 생성된 것을 확인.
kubectl apply -f test-rs.yaml
통해 레플리카셋 생성.- 레플리카셋은 총 3개의 파드를 갖는다. 하지만 banana 두 개만 생성된 것을 확인할 수 있다.
=> spec.selector.matchLabel은 레플리카셋이 직접 파드를 참조하기 위해 지정한 라벨이다. 즉, spec.selector에 일치한 파드는 레플리카셋의 구성원으로 편입이 된다.
spec.selector.matchLabel
과spec.template.metadata.labels
의 라벨 정보가 일치해야 레플리카셋 생성이 가능하다.
ReplicaSet의 Pod 유지
- 레플리카셋은
spec.replicas
에 지정한 개수만큼 파드가 실행되는 것을 안정적으로 유지하기 위해 노력한다. - 복제 파드 중 하나를 임의로 제거하면 레플리카셋 컨트롤러는 이를 감지해 바로 파드를 생성해 복제 파드의 개수를 맞춘다.
- 현재 레플리카셋의 파드는 총 3개로
test-pod
,banana-jnq2k
,banana-x4ntn
가 있다. - 임의로 banana-jnq2k 파드를 삭제를 해도 새로운 파드가 하나 생성된다.
Pod 개수 변경
- 레플리카셋의 장점 중 하나는 복제 파드를 유연하게 생성, 제거한다는 것이다.
- 실행중인 레플리카셋의 복제 파드 개수를 명령어를 통해 직접 변경할 수 있다.
# 명령적 접근법
# 레플리카셋 복제 파드 개수를 N개로 변경
kubectl scale rs banana --replicas=N
- 기존 레플리카셋 파드는 3개이다.
- 명령어 실행 후 파드가 4개로 변경된 것을 알 수 있다.
ReplicaSet 명령어
레플리카셋 생성
# 명령적 접근법
kubectl create -f test-rs.yaml
# 선언적 접근법
kubectl apply -f test-rs.yaml
레플리카셋 정보 확인
# 클러스터에 실행중인 레플리카셋 확인
kubectl get replicaset
# 레플리카셋 상세 정보 조회
kubectl describe rs [레플리카셋 이름]
DESIRED
: 레플리카셋 설정에 지정한 파드 갯수CURRENT
: 레플리카셋을 이용해 현재 클러스터에서 동작하는 실제 파드 갯수
레플리카셋 정보 확인
kubectl edit rs [레플리카셋 이름]
레플리카셋 삭제
kubectl delete rs [레플리카셋 이름]
728x90
반응형
'DevOps > Kubernetes' 카테고리의 다른 글
[kubernetes] Pod 외부 접속 연결하기 (0) | 2024.07.09 |
---|---|
[kubernetes] Deployment란? (0) | 2024.07.08 |
[Kubernetes] Pod란? (0) | 2024.07.02 |
[Kubernetes] Kubernetes란? (0) | 2024.07.02 |
Docker, Container and Kubernetes (0) | 2024.07.01 |