목차
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>