Replication Controller 란?
- k8s 개체를 모니터링하고 필요 시 대응하는 프로세스
- 고 가용성(High Availability)
- Replication Controller에서 지정한 Pod의 개수가 항상 실행되도록 제어
- 2개의 Pod 생성을 지정했다고 가정했을 때, 1개 또는 2개 모두 장애가 발생하여 사용하지 못하는 상황이 오게 되면 이를 인지하고 1개 또는 2개의 Pod를 활성화 시켜 정의한 Pod 수만큼 Run(가용)상태를 유지함
- 따라서 Replication Controller는 고 가용성(High Availability) 특성을 지님
- 로드 밸런싱 & 스캐일링(Load Balancing & Scaling)
- Pod의 사용자가 증가하면 추가 Pod를 배포하여 두 개의 Pod에 부하를 분산시킴
- Pod의 사용자가 증가하고, 노드의 리소스가 부족해지면 클러스터 내 다른 노드에 추가 Pod를 배포함
YAML로 Replication Controller 정의하기
# 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
- Replication Controller는 spec의 template 하위 영역으로 Pod의 api, kind 항목을 제외한 metadata, spec을 정의함
- replicas를 3으로 정의함으로 써 3개의 pod를 생성 및 유지 시킴
- kubectl create -f rc-definition.yml : Replication Controller 생성
- kubectl get replicationcontroller
NAME DESIRED CURRENT READY AGE
myapp-rc 3 3 3 4m4s
- kubectl get pods
- yml 파일에 정의한 replicas 개수 만큼 pod가 생성 된 것을 확인할 수 있다.
NAME READY STATUS RESTARTS AGE
myapp-rc-5bzxh 1/1 Running 0 6m14s
myapp-rc-5ncp7 1/1 Running 0 6m14s
myapp-rc-cdrmv 1/1 Running 0 6m14s
Replica Set
- Replica Set은 Replication Controller를 대체하고 복제를 설정하는 새로운 권장 방법임
YAML로 Replica Set 정의하기
#replicaset.yaml
apiVersion: apps/v1
kind: ReplicaSet
metadata:
name: myapp-replicaset
labels:
app: myapp
spec:
selector:
matchLabels:
app: myapp
replicas: 3
template:
metadata:
name: myapp
labels:
app: myapp
spec:
containers:
- name: nginx
image: nginx
- 주의사항 : spec.selector.matchLabels 와 spec.template.labels의 {key}: {value} 는 동일해야 함
- kubectl create -f {filename.yml} : yml 파일을 통한 Replica Set 정의
- kubectl get replicaset : replicaset 정보 확인
- kubectl delete replicaset {replicaset name} : replicaset 삭제
- kubectl replace -f {filename.yml} : replicaset 재 정의
- kubectl scale -replicas=6 -f {filename.yml} : replicaset 재 정의
Replicaset 수정하기
replicas : 3 → 4로 변경하기
- myapp-replicaset 구성 편집하여 수정하기
16 spec: 17 replicas: 4 #3 -> 4로 변경, :wq
- kubectl edit replicaset myapp-replicaset : replicaset 수정, vim으로 열림
kubectl get pods 명령을 통해 1개의 pod가 추가 되어 총 4개의 pod 가 Running 상태임을 확인 할 수 있다.
kubectl get pods
NAME READY STATUS RESTARTS AGE
myapp-replicaset-bszcw 1/1 Running 2 (42m ago) 26h
**myapp-replicaset-stq2b 1/1 Running 0 95s**
myapp-replicaset-vcfnd 1/1 Running 0 39m
myapp-replicaset-wjvkb 1/1 Running 2 (42m ago) 26h
- kubectl 명령어를 사용하여 변경하기myapp-replicaset = replicaset 개체 이름
kubectl get pods NAME READY STATUS RESTARTS AGE myapp-replicaset-bszcw 1/1 Running 2 (49m ago) 26h myapp-replicaset-wjvkb 1/1 Running 2 (49m ago) 26h
- kubectl get pods 명령을 통해 2개의 pod가 삭제되어 총 2개의 pod가 Running 상태임을 확인할 수 있다.
- kubectl skubectl scale replicaset myapp-replicaset --replicas=2
'클라우드' 카테고리의 다른 글
kubeadm으로 고가용성 클러스터 생성-1 (0) | 2023.04.03 |
---|---|
[k8s] Deployment (0) | 2023.03.08 |
[docker]쉘 스크립트를 사용하여 도커 오토스케일링 구현하기 (0) | 2023.03.08 |
[k8s] Kubectl 명령어 자동완성 설정하기 (0) | 2023.03.08 |
[k8s] 클러스터 구성하기 (0) | 2023.03.08 |