전공공부
[K8S - CKA] Relication Controller & ReplicaSet 본문
1. ReplicaSet
정의 : Pod 하나가 Fail이 되어서 내려가도 다른 인스턴스가 실행 시켜서 Fail 상태에서 벗어 날 수 있게 하는 것
동작 : 실패 상태가 되면 새로 POD를 배포한다. 이는 고 가용성을 보장한다.
정리 : POD가 Fail이 되어도 새로 살려서 POD를 배포 할 수 있게 하여서 고 가용성을 보장하는 것
Load Balancing & Scaling

Replication Controller, ReplicaSet Node를 넘어서 복제 할 수 있음을 보여준다. (Scale Up 지원이 가능)
Replication Controller와 ReplicaSet과 다르다.
하지만, Replication Controller이 ReplicaSet의 사실상 이전 버전이므로 Replication Controller의 정의된 것은 모두 ReplicaSet에서 쓸 수 있다.
YML
1. Replication Controller
apiVersion: v1
kind: ReplicationController
metadata:
name: nginx
spec:
replicas: 3
selector:
app: nginx
template:
metadata:
name: nginx
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx
ports:
- containerPort: 80
---
# Pod.yaml
apiVersion: v1
kind: POD
metadata:
name: nginx
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx
ports:
- containerPort: 80
정의 부분은 사실 공식문서를 참고해서 작성하기 때문에 의미가 없고, 중요하게 생각해야 할 부분은 spec.template 부분의 하단에 POD의 정의 중 kind, apiVersion를 제외 하부의 값을 그대로 가져오면 된다.
이렇게 구성하면 Replication Controller의 정의가 부모가 되고 Pod 부분이 Child 부분이 될 것입니다.
그리고, replicas의 갯수를 지정해야 하기때문에 replicas: 3 이라고 spec.replicas로 지정합니다.
k create -f ~.yml #으로 rc 만들 수 있고
k get rc #배포 된지 확인 가능
k describe rc <replicationControllerName> #각 RC 성질 검색 가능
2. ReplicaSet
Replication Controller와 모두 같고 apiVersion 부분만 다르다. (v1 -> apps/v1)
Replication Controller와 주요 다른점은 selector를 하나 더 붙여서 어떤 포드에 붙일지 정할수 있다.
아래 예시로 필요한 이유를 살펴보
Labels and Selectors
ReplicaSet의 역할은 모니터하다가 포드가 실패하면 새로 배포하는 것이다.
그런데 포드가 수백 개 있다면 봐야 할 포드가 너무 많을 것이다.
그래서, selector를 붙여서 어떤 포드를 볼 지 labels로 지정해버리면 리소스 낭비가 없을 것이다.
Scale
어떻게 ReplicaSet을 업데이트 해서 스케일 아웃을 할 수 있을까?
위에서 정의한 yml 파일을 다시 수정하여
k replace --force -f ~.yml
을 쓰면 된다.
또는, Command 라인에서 바로 변경하는 방법으로
k scale --replicas=6 replicaset
이렇게 할 수 있다.
그런데, 당연하지만 실제 yaml 파일을 수정해두지 않으면 파일을 변경하지 않았기 때문에 추후에 배포시에는 replica가 3으로 배포가 될 것이다.
'Study > K8S' 카테고리의 다른 글
[K8S - CKA] Imperative 접근 방식 vs. Declarative 접근 방식 (0) | 2023.08.22 |
---|---|
[K8S - CKA] Deployment (0) | 2023.08.20 |
[K8S - CKA] Kube Scheduler (0) | 2023.08.15 |
[K8S - CKA] K8S Controller Manager (0) | 2023.08.15 |
[K8S - CKA] kube-apiserver (0) | 2023.08.13 |