Search

[CKA] 10. ReplicaSets

Date
2024/11/12
Category
Devops
Tag
Kubernetes
CKA
Core Concept
목차

 ReplicaSets

 Replication Controller

쿠버네티스 클러스터에 있는 단일 Pod의 다중 Instance를 실행하도록 함 (고가용성을 제공함) 특정 Pod가 항상 실행되도록 보장

HighAvailability

어떤 이유로든 앱이 다운될 경우, 사용자가 앱에 대한 액세스를 잃지 않도록 하기 위해 한개 이상의 instance나 pod가 동시에 실행되어야 함
그래야 하나가 실패해도 다른 하나에서 애플리케이션이 실행되기 때문
Pod를 하나만 사용하더라도 Replication Controller는 기존 Pod가 Fail되었을 때 자동으로 새 Pod를 불러옴

Load Balancing & Scaling

여러 개의 Pod를 생성해 Load 분산을 위해서도 필요
Replication Controller는 클러스터 내 여러 노드로 뻗어 있음
따라서 서로 다른 노드에 여러 Pod를 생성해 부하를 분산
앱 Scale도 조정 가능

 Replication Controller | Replica Set

용도는 같지만 서로 같은 것은 아님
Replication Controller는 구 기술로, ReplicaSet으로 대체됨
즉, ReplicaSet이 권장 방법

Replication Controller Definition File

# rc-definition.yml apiVersion: v1 kind: ReplicationController metadata: name: myapp-rc labels: app: myapp type: front-end spec: template: metadata: name: myapp-pod labels: app: myapp type: front-end spec: containers: - name: nginx-container image: nginx replicas: 3
YAML
복사
나머지는 기존과 같지만 spec.template을 통해 Pod의 정보를 제공함
apiVersion과 kind를 제외한 기존 Pod 콘텐츠를 가져오면 됨
복제본을 얼마나 갖는지 spec.replicas에 정의

Replicaset Definition File

# replicaset-definition.yaml apiVersion: apps/v1 kind: ReplicaSet metadata: name: myapp-replicaset labels: app: myapp type: front-end spec: template: metadata: name: myapp-pod labels: app: myapp type: front-end spec: containers: - name: nginx-container image: nginx replicas: 3 selector: matchLabels: type: front-end
YAML
복사
Replication Controller와 달리 API Version이 app/v1의 값을 가짐
나머지는 Replication Controller와 유사함
다른 점은 selector 정의가 필요함
Selector는 ReplicaSet으로 존재하는 Pod를 식별할 수 있게 함
template에 이미 ReplicaSet으로 사용할 Pod를 정의했지만 selector를 사용해야 하는 이유:
ReplicaSet은 ReplicaSet으로 생성되지 않은 Pod도 관리할 수 있기 때문

 Labels & Selectors

ReplicaSet은 특정 Pod의 개수를 보장하기 때문에 그 Pod를 모니터링하고 있어야 함
이때 다양한 Pod 중 모니터링할 Pod를 구분할 수 있어야 함
그 필터 역할을 하는 것이 Label과 Selector 이다

 Scale

I. Modifying Definition File

yaml 파일의 replicas를 업데이트함으로써 스케일 조정

II. Using Scale Command

1.
kubectl scale --replicas=6 -f replicaset-definition.yml
정의 파일 내의 replicas가 자동으로 업데이트 되진 않음 (주의)
2.
kubectl scale --replicas=6 replicaset <replicaset-name>