목적은 주어진 시간에 실행되는 안정적인 복제본 포드 세트를 유지하는 것입니다. 이와 같이, 동일한 포드의 지정된 수의 가용성을 보장하기 위해 사용 됩니다.
복제본 세트의 작동 방식
ReplicaSet는 원하는 수에 도달하기 위해 필요에 따라 포드를 만들고 삭제함으로써 목적을 달성합니다. 복제 세트는 새 포드를 만들어야 할 때 해당 포드 템플릿을 사용합니다.
상세한 사항은 아래 링크에서 확인 하시길 바라며 테스트를 진행해 보겠습니다.
우선 아래와 같은 이름으로 yaml파일 하나를 만듭니다.
vi test-replicaset.yaml
apiVersion: apps/v1
kind: ReplicaSet
metadata:
name: frontend
labels:
app: guestbook
tier: frontend
spec:
# modify replicas according to your case
replicas: 3
selector:
matchLabels:
tier: frontend
template:
metadata:
labels:
tier: frontend
spec:
containers:
- name: web-front
image: nginx:1.18
kubectl create -f test-replicaset.yaml
아래와 같이 3개가 실행 된 모습을 확인 할 수 있습니다. 여기서 frontend-kvq57 의 이름을 가진 pod하나를 삭제하려 한다면 어떤 반응이 생기는지 확인해 보겠습니다.
kubectl delete pods frontend-kvq57
yaml파일에서 설정한 것 처럼 replicas를 3개를 유지하기위해 항상 컨트롤러가 바라보고 있다가 다시 재 생성 해버립니다.
아래와 같이 AGE 17s 으로 삭제 후 다시 실행 된 것을 알 수 있습니다.
root@master:~# kubectl get rs
NAME DESIRED CURRENT READY AGE
frontend 3 3 3 3m32s
위와 같이 replica의 상태를 확인 하실 수 있습니다. 그리고 아래와 같이 입력하시면 replica의 상태를 상세히 확인 할 수 있습니다.
root@master:~# kubectl describe rs/frontend
Name: frontend
Namespace: default
Selector: tier=frontend
Labels: app=guestbook
tier=frontend
Annotations: <none>
Replicas: 3 current / 3 desired
Pods Status: 3 Running / 0 Waiting / 0 Succeeded / 0 Failed
Pod Template:
Labels: tier=frontend
Containers:
web-front:
Image: nginx:1.18
Port: <none>
Host Port: <none>
Environment: <none>
Mounts: <none>
Volumes: <none>
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Normal SuccessfulCreate 4m53s replicaset-controller Created pod: frontend-kvq57
Normal SuccessfulCreate 4m53s replicaset-controller Created pod: frontend-g64d2
Normal SuccessfulCreate 4m53s replicaset-controller Created pod: frontend-j8rvd
Normal SuccessfulCreate 2m48s replicaset-controller Created pod: frontend-xfv27
여기서 주요 기능 중 scale라는 기능이 있습니다. 우리가 scale 조절 할 수 있는 것이죠 아래와같이 명령을 입력하면
kubectl scale rs frontend --replicas=2
pod가 2개로 변한 것을 확인 하실 수 있습니다. 그럼 replica상태를 확인해 보겠습니다.
root@master:~# kubectl get rs
NAME DESIRED CURRENT READY AGE
frontend 2 2 2 13m
위에 보신대로 원하는 pod와 현재의 pod 그리고 준비상태의 pod 역시 2로 되어 있습니다. replicaset을 삭제하려면 scale를 0으로 바꾸면 될까요??
0으로 변경했더니 다음과 같습니다. 마치 다 삭제 된것처럼 보이죠^^? 하지만 아래와 같이 확인해 보면 frontend라는 replicas Name이 그대로 인 것을 알 수 있습니다. 여기서 만약 다시 scale을 1로 변경하거나 하면 다시 생성이 되겠죠.
root@master:~# kubectl get rs
NAME DESIRED CURRENT READY AGE
frontend 0 0 0 37m
그럼 완전히 삭제해 보겠습니다.
root@master:~# kubectl delete rs frontend
replicaset.apps "frontend" deleted
root@master:~# kubectl get rs
No resources found in default namespace.
삭제된 모습을 보실 수 있습니다.
'서버인프라 > kubernetes' 카테고리의 다른 글
[제 6강] Updating a Deployment (1) | 2022.12.27 |
---|---|
[제 5강] Deployments (0) | 2022.12.25 |
[제 3강] Resource Management (0) | 2022.12.19 |
[제 2강] 컨테이너 생성을 조금더 깊이있게 (4) | 2022.12.16 |
[제 1강] 쿠버네티스 명령어 사용 및 pod 생성 (0) | 2022.12.14 |
댓글