파드 인스턴스 개수를 유지하는 쿠버네티스 컨트롤러
+) Deployment (권장): Replica Set을 관리
apiVersion: apps/v1
kind: ReplicaSet
metadata:
name: nginx-replicaset
spec:
template:
metadata:
name: nginx-replicaset
labels:
app: nginx-replicaset
spec:
containers:
- name: nginx-replicaset
image: nginx
ports:
- containerPort: 80
replicas: 3
selector:
matchLabels:
app: nginx-replicaset
> kubectl get replicaset,pods
NAME DESIRED CURRENT READY AGE
replicaset.apps/nginx-replicaset 3 3 3 8s
NAME READY STATUS RESTARTS AGE
pod/nginx-replicaset-ftzx2 1/1 Running 0 8s
pod/nginx-replicaset-j7pdf 1/1 Running 0 8s
pod/nginx-replicaset-kr9zr 1/1 Running 0 8s
파드 인스턴스 3개를 생성한 것을 볼 수 있다.
kubectl get replicaset,pods
NAME DESIRED CURRENT READY AGE
replicaset.apps/nginx-replicaset 3 3 2 7s
NAME READY STATUS RESTARTS AGE
pod/nginx-replicaset-ftzx2 0/1 ContainerCreating 0 7s
pod/nginx-replicaset-j7pdf 1/1 Running 0 7s
pod/nginx-replicaset-kr9zr 1/1 Running 0 7s
pod를 만들고 있을 때(ContainerCreating)엔 REDAY 상태에서 제외됨!
kubectl get replicaset,pods
NAME DESIRED CURRENT READY AGE
replicaset.apps/nginx-replicaset 3 3 0 14s
NAME READY STATUS RESTARTS AGE
pod/nginx-replicaset-cpj8h 0/1 ErrImagePull 0 14s
pod/nginx-replicaset-dtvtr 0/1 ErrImagePull 0 14s
pod/nginx-replicaset-qqhjz 0/1 ErrImagePull 0 14s
이미지 이름이 이상해서 파드가 정상적으로 실행중이지 않을 경우 (ErrImagePull), REDAY 상태에서 제외됨
ReplicaSet은 파드가 삭제되었을 때, 지정된 개수를 맞추기 위해서 다시 생성한다. 어떤 이유(어플리케이션 문제)로 컨테이너가 Crash하거나 Image를 다운 받지 못하거나 할 때에 재시도하려면 pod 설정을 수정하면 된다. spec.template.spec.containers.imagePullPolicy
이나 livenessProbe
restartPolicy
등을 이용해서 재시도할 수 있다.
Replica Set에서 replicas 값을 변경하면 파드의 개수를 조정한다.
하지만, 컨테이너 정보를 수정하는 게 즉각 반영되지 않는다.
apiVersion: apps/v1
kind: ReplicaSet
metadata:
name: nginx-replicaset
spec:
template:
metadata:
name: nginx-replicaset
labels:
app: nginx-replicaset
spec:
containers:
- name: nginx-replicaset
image: nginx
ports:
- containerPort: 80
spec.containser.image:nginx
)apiVersion: apps/v1
kind: ReplicaSet
metadata:
name: nginx-replicaset
spec:
template:
metadata:
name: nginx-replicaset
labels:
app: nginx-replicaset
spec:
containers:
- name: busybox # 갱신
image: busybox #갱신
ports:
- containerPort: 80
> kubectl describe rs nginx-replicaset
Name: nginx-replicaset
...
Pod Template:
Labels: app=nginx-replicaset
Containers:
busybox:
Image: busybox #변경됨
# Image를 바꿨음에도 새로 파드를 삭제했다는 이벤트 이력을 볼 수 없다.
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Normal SuccessfulCreate 34s replicaset-controller Created pod: nginx-replicaset-kpp8n
Normal SuccessfulCreate 34s replicaset-controller Created pod: nginx-replicaset-dlqwz
Normal SuccessfulCreate 34s replicaset-controller Created pod: nginx-replicaset-p2tfz
> kubectl delete pod nginx-replicaset-p2tfz
pod "nginx-replicaset-p2tfz" deleted
> kubectl get pods -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
nginx-replicaset-dlqwz 1/1 Running 0 52s 172.17.0.8 minikube <none> <none>
nginx-replicaset-kpp8n 1/1 Running 0 52s 172.17.0.6 minikube <none> <none>
nginx-replicaset-pjxzx 0/1 ContainerCreating 0 3s <none> minikube <none> <none>
kubectl describe pod nginx-replicaset-pjxzx
...
Containers:
busybox:
Image: busybox
...