[Kubernetes] Replica Set, 파드의 개수을 항상 유지
Replica Set의 개념
쿠버네티스에서의 가장 작은 단위인 Pod는, 장애가 발생하거나 삭제되었을 때 자동으로 복구되지 않습니다. 즉, 관리자가 직접 파드가 죽은 것을 확인하고, 파드를 재생성하여 교체하여 주어야 정상적인 서비스를 받을 수 있습니다.
이렇게 관리자가 계속해서 파드를 재생성하는 것은 효율적이지 못합니다.
쿠버네티스는 이를 해결하기 위해 중간에서 파드의 개수를 실시간으로 확인하며 죽은 파드가 생긴다면 교체해주고, 재생성하여 언제나 지속적인 서비스를 제공할 수 있도록 만들어주는 파드의 관리자 성격인 레플리카셋(Replica Set)을 제공합니다.
레플리카셋은 복수의 파드를 생성하여 관리할 때 유효합니다. 자기 자신이 가지고 있는 파드의 템플릿을 사용하여 항상 일정 개수의 파드를 유지합니다. 즉, 레플리카셋은 항상 파드를 생성하기만 하지는 않습니다. 정해진 수를 초과하는 파드가 생성된다면 이를 제거하여 파드의 개수를 일정하게 유지합니다. 이러한 역할을 정리해 보면 다음과 같습니다.
- 정해진 수의 파드가 항상 안정적으로 실행되도록 관리합니다
- 파드에 장애가 발생하거나, 사용할 수 없게 되는경우 파드를 재생성 합니다
- 파드가 정해진 개수보다 많아질 경우 종료합니다
Replica Set의 동작 원리
레플리카셋이 파드를 생성하기는 하지만, 파드와 레플리카셋은 별도로 동작합니다. 즉, 레플리카셋은 직접적으로 파드와 연결되어있지 않습니다. 대신 레플리카셋은 관리할 파드를 찾기 위해 라벨 셀렉터(Label Selector)를 사용합니다.
apiVersion: apps/v1
kind: ReplicaSet
metadata:
name: replicaset-nginx
spec:
replicas: 3
selector:
matchLabels:
app: my-nginx-pods-label
template:
metadata:
name: my-nginx-pod
labels:
app: my-nginx-pods-label
spec:
containers:
- name: nginx
image: nginx:latest
ports:
- containerPort: 80
파드가 metadata로 가지고 있는 라벨을 레플리카셋의 selector에 정의된 matchLabels를 사용하여 일치하는 라벨을 가진 파드를 자기 자신이 관리할 파드로 선정합니다. 만약 선정된 파드의 개수가 spec에 선언된 replicas보다 적다면, 가지고 있는 pod template을 통해 파드를 그 개수만큼 생성하게 됩니다.
레플리카셋을 선언하였지만 이미 파드의 개수가 3개라면 레플리카셋은 더이상 파드를 생성하지 않습니다. 레플리카셋은 파드를 생성하기 위한 목적이 아닌, 파드의 개수를 일정하게 유지하는 것이 목적이기 때문입니다. 위 내용을 my-re.yaml 파일로 생성한 후, kubectl apply -f my-rs.yaml 명령어를 실행한 결과는 아래와 같습니다.
시간이 지남에 따라 파드의 개수가 늘어나고, 레플리카셋에 선언한 개수대로 파드를 생성하여 관리하는 모습을 볼 수 있습니다.
References
kubernetes.io/ko/docs/concepts/workloads/controllers/replicaset/
http://www.yes24.com/Product/Goods/84927385