-
Kubernetes ReplicaSet 알아보기Kubernetes 2023. 11. 28. 22:15728x90반응형
- 목차.
함께보면 좋은 글.
https://westlife0615.tistory.com/210
https://westlife0615.tistory.com/407
소개.
ReplicaSet 는 쿠버네티스의 대표적인 리소스입니다.
ReplicaSet 는 정해진 수 만큼의 Pod 의 복제본은 만들고, 그 개체수를 유지시킵니다.
Pod 는 Container 들을 관리하는 쿠버네티스의 리소스입니다.
실질적인 워크로드를 수행하는 것이 Container 이고,
이 Container 를 관리하는 것이 Pod 이기 때문에 Pod 만 있어도 서비스는 구현될 수 있습니다.
하지만 Pod 만을 관리하는 것은 쉬운 일이 아닙니다.
Pod 만 존재하는 경우에 발생하는 문제 상황들을 정리해보겠습니다.
1. Scale-in and out
만약 100 개의 서버를 구동시켜야하는 경우는 어떨까요?
Pod Template 을 100개를 만들고, 100개의 Pod Template 을 쿠버네티스 내부에 생성해야합니다.
각각의 Pod 는 개별적인 리소스이기 때문에 Pod Name 또한 다르게 설정해야하죠.
그리고 100개의 서버를 모두 내려야한다면, 100번의 수작업을 일일이 진행해야합니다.
이런 상황에서 ReplicaSet 을 사용하면, replicas 라는 설정값 하나로 손쉽게 Scale-in and out 을 할 수 있고,
여러 Pod 를 통제할 수 있습니다.
2. Pod 의 장애가 발생한 경우에 새로운 Pod 를 생성하여 Replicas 갯수를 충족시킵니다.여러가지 이유로 Pod 가 비정상적으로 종료될 수 있습니다.
종료된 Pod 를 다시 실행시키기 위해선 관련된 모니터링이 필요하고,
Pod 를 다시 실행시키기 위한 절차가 필요합니다.
ReplicaSet 은 이러한 과정을 자동적으로 수행합니다.
즉, ReplicaSet 의 존재 목적은 Pod 의 복제본의 수를 유지시키는데에 있습니다.
그리고 복제본의 Pod 들을 하나의 그룹으로써 관리합니다.ReplicaSet 은 어떻게 동작할까?
쿠버네티스 Control Plain 내부에 여러 Controller 들이 존재합니다.
그 중 ReplicaSet Controller 또한 존재하며,
ReplicaSet Controller 는 ReplicaSet 의 상태를 꾸준히 체크합니다.
여기서 Desired State 와 Actual State 라는 개념이 필요한데요.
ReplicaSet Template 에 정의하는 spec 들이 Desired State 가 됩니다.
Desired State 는 ReplicaSet 이 지향하는 형태 또는 상태를 의미합니다.
예를 들어,< ReplicaSet yaml 예시. >
apiVersion: apps/v1 kind: ReplicaSet metadata: name: example-replicaset spec: replicas: 3 selector: matchLabels: app: nginx template: metadata: labels: app: nginx spec: containers: - name: nginx-container image: nginx:latest
"spec.replicas : 3" 은 Pod 의 갯수를 3개로 유지해야한다.
"spec.selector.matchLabels.app : nginx" 은 ReplicaSet 이 관리하는 Pod 의 Selector 는 app: nginx 입니다.
"spec.template.spec.containers.image: nginx" : Pod 의 Container Image 로 nginx:latest 를 사용해야한다.
등과 같은 설정입니다.
만약 Pod 의 갯수가 1개 줄어들면 Actual State 의 replicas 는 2 가 되고,
ReplicaSet 은 Desired State 인 3 을 달성하기 위해서 1개의 Pod 를 생성하게 됩니다.
이런식으로 ReplicaSet Controller 는 Desired State 와 Actual State 를 비교하여 ReplicaSet 을 관리합니다.ReplicaSet 생성해보기.
< ReplicaSet yaml >
apiVersion: apps/v1 kind: ReplicaSet metadata: name: example-replicaset spec: replicas: 3 selector: matchLabels: app: nginx template: metadata: labels: app: nginx spec: containers: - name: nginx-container image: nginx:latest
< nginx_replicaset.yaml 파일 생성하기 >
cat <<EOF> /tmp/nginx_replicaset.yaml apiVersion: apps/v1 kind: ReplicaSet metadata: name: example-replicaset spec: replicas: 3 selector: matchLabels: app: nginx template: metadata: labels: app: nginx spec: containers: - name: nginx-container image: nginx:latest EOF
아래 명령어를 통해서 ReplicaSet 를 생성합니다.
kubectl create -f /tmp/nginx_replicaset.yaml
ReplicaSet 이 성공적으로 생성되면
"replicaset.apps/example-replicaset created" 이 출력됩니다.
아래와 같이 3개의 Pod 와 1개의 ReplicaSet 이 생성됨을 확인할 수 있습니다.
kubectl get replicaset NAME DESIRED CURRENT READY AGE example-replicaset 3 3 3 85s kubectl get pod NAME READY STATUS RESTARTS AGE example-replicaset-fhxzd 1/1 Running 0 97s example-replicaset-snrm4 1/1 Running 0 97s example-replicaset-tpkqv 1/1 Running 0 97s
반응형'Kubernetes' 카테고리의 다른 글
Kubernetes Custom Resource 알아보기 (0) 2023.12.11 Kubernetes Certificate 알아보기 (0) 2023.12.11 KinD 알아보기. (0) 2023.11.27 Kubernetes Ephemeral Volume (0) 2023.08.09 [Kubernetes] Service 이해하기 (0) 2023.08.01