컨트롤러는 파드들을 관리하는 역할을 한다. 컨트롤러에는 ReplicaSet, DeamonSet, Job, CronJob, Deployment, StatefulSet 등이 있다.
파드를 단독으로 만들면 파드에 문제가 생겼을 때 자동으로 복구되지 않는다. 이러한 파드를 정해진 수만큼 복제하고 관리하는 것이 레플리카셋이다. 레플리카셋은 원하는 개수의 파드를 유지한다.
ReplicaSet (출처: blog.knoldus.com/opsinit-replicaset-vs-daemonset-in-kubernetes/)
일반적으로 레플리카셋을 직접 생성하지는 않는다. 그 대신 상위 수준의 디플로이먼트 리소스를 만들 때 자동으로 생성한다.
🧩 레플리카셋 작성
# frontend.yaml
apiVersion: apps/v1
kind: ReplicaSet
metadata:
name: frontend
labels:
app: guestbook
tier: frontend
spec:
replicas: 3 # 원하는 파드 개수. 기본값은 1
selector: # 라벨 체크 조건. 어떤 레이블의 파드를 선택해서 관리할지 설정
matchLabels:
tier: frontend
template: # 생성할 파드 명세
metadata:
labels:
tier: frontend
spec:
containers: # 컨테이너 명세
- name: php-redis
image: gcr.io/google_samples/gb-frontend:v3
라벨을 체크해서 원하는 수의 파드가 없으면 새로운 파드를 생성한다.
🧩 레플리카셋 생성
이 매니페스트를 frontend.yaml에 저장하고 쿠버네티스 클러스터에 적용하면 정의되어 있는 레플리카셋이 생성되고 레플리카셋이 관리하는 파드가 생성된다.
# 레플리카셋 생성
$ kubectl apply -f frontend.yaml
🧩 레플리카셋 확인
현재 배포된 레플리카셋을 확인할 수 있으며 생성된 frontend를 볼 수 있다.
# 리소스 확인
$ kubectl get rs
NAME DESIRED CURRENT READY AGE
frontend 3 3 3 6s
DISIRED
: 레플리카셋 설정에 지정한 파드 개수CURRENT
: 레플리카셋을 이용해 현재 클러스터에서 동작하는 실제 파드 개수READY
: 사용할 준비가 완료된 파드의 개수또한 레플리카셋의 상태를 확인할 수 있다. 출력은 다음과 유사할 것이다.
$ kubectl describe rs/frontend
Name: frontend
Namespace: default
Selector: tier=frontend
Labels: app=guestbook
tier=frontend
Annotations: kubectl.kubernetes.io/last-applied-configuration:
{"apiVersion":"apps/v1","kind":"ReplicaSet","metadata":{"annotations":{},"labels":{"app":"guestbook","tier":"frontend"},"name":"frontend",...
Replicas: 3 current / 3 desired
Pods Status: 3 Running / 0 Waiting / 0 Succeeded / 0 Failed
Pod Template:
Labels: tier=frontend
Containers:
php-redis:
Image: gcr.io/google_samples/gb-frontend:v3
Port: <none>
Host Port: <none>
Environment: <none>
Mounts: <none>
Volumes: <none>
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Normal SuccessfulCreate 117s replicaset-controller Created pod: frontend-wtsmm
Normal SuccessfulCreate 116s replicaset-controller Created pod: frontend-b2zdv
Normal SuccessfulCreate 116s replicaset-controller Created pod: frontend-vcmts
🧩 파드 확인
현재 파드 정보를 확인한다.
# 파드 확인
$ kubectl get pods
NAME READY STATUS RESTARTS AGE
frontend-b2zdv 1/1 Running 0 6m36s
frontend-vcmts 1/1 Running 0 6m36s
frontend-wtsmm 1/1 Running 0 6m36s
.spec.replicas
를 3으로 설정했기 때문에 frontend-b2zdv, frontend-vcmts, frontend-wtsmm라는 파드가 실행되는 것을 확인할 수 있다.
🧩 레플리카셋 삭제
레플리카셋을 삭제한다. 레플리카셋을 삭제하면 관련 파드도 모두 삭제된다.
$ kubectl delete rs frontend
References