Kubernetes Replica에 의한 스케일업
시스템 이중화를 위해 Replica라는 리소스를 사용한다. Replica는 Spec에서 정의한 복제본의 수를 자동 배치하고 유지(Pod가 정지했을 경우에 자동 복구)하는 기능을 가지고 있다.
yaml 파일을 이용한 Replica 실행
여기서도 yaml 파일에 설정을 작성을 해야 한다.
replicaset.yaml
apiVersion: apps/v1
kind: ReplicaSet
metadata:
name: helloworld
labels:
app: helloworld
spec:
replicas: 5
selector:
matchLabels:
app: helloworld
template:
metadata:
labels:
app: helloworld
spec:
containers:
- name: helloworld
image: gcr.io/google-samples/hello-app:1.0
이 yaml 파일의 replicas 부분으로 지정한 값에 따라 Pod가 복제된다. 이번 파일에서는 “5"로 되어 있기 때문에 “5"개의 Pod가 작성된다.
이 yaml 파일을 사용하여 Pod를 Replicaset으로 시작하려면 다음 명령을 실행한다.
kubectl apply -f replicaset.yaml
실행 결과:
% kubectl apply -f replicaset.yaml
replicaset.apps/helloworld created
replicaset이 생성되었는지 확인하기 위해 다음 명령을 실행한다.
kubectl get replicaset
실행 결과:
% kubectl get replicaset
NAME DESIRED CURRENT READY AGE
helloworld 5 5 5 27s
% kubectl get pod
NAME READY STATUS RESTARTS AGE
helloworld-22r5b 1/1 Running 0 45s
helloworld-9bkcr 1/1 Running 0 45s
helloworld-ft2b7 1/1 Running 0 45s
helloworld-ndsph 1/1 Running 0 45s
helloworld-zrsw4 1/1 Running 0 45s
replicaset이 생성되었음을 확인할 수 있으며, 5개의 Pod가 생성되었다고 표시되므로 Pod 목록을 보면 확실히 포드가 생성되었는지 확인할 수 있다. 또한 이러한 Pod는 모두 helloworld-[hash]
와 같은 이름으로 만들어져 있는 것도 확인할 수 있다.
기동 중인 Pod의 개수를 늘리기
이렇게 작성한 기동중에 Pod의 개수를 늘리는 것도 가능하다. 이것은 kubectl scale
명령에서 --replicas
옵션을 추가하여 얻을 수 있다.
kubectl scale --replicas=[Pod 개수] replicaset/[replicaset명]
예로서 10개로 늘려 보겠다.
% kubectl scale --replicas=10 replicaset/helloworld
replicaset.apps/helloworld scaled
다시 replicaset을 목록을 확인해 보겠다.
% kubectl get replicaset
NAME DESIRED CURRENT READY AGE
helloworld 10 10 10 5m11s
Pod도 확인해 보자.
% kubectl get pod
NAME READY STATUS RESTARTS AGE
helloworld-22r5b 1/1 Running 0 5m36s
helloworld-26x7g 1/1 Running 0 76s
helloworld-9bkcr 1/1 Running 0 5m36s
helloworld-ft2b7 1/1 Running 0 5m36s
helloworld-ldfpk 1/1 Running 0 76s
helloworld-ndsph 1/1 Running 0 5m36s
helloworld-sjg5c 1/1 Running 0 76s
helloworld-smdhb 1/1 Running 0 76s
helloworld-xgl6m 1/1 Running 0 76s
helloworld-zrsw4 1/1 Running 0 5m36s
실행 결과를 보면 Pod의 개수가 10개로 증가한 것을 확인할 수 있다.
Pod가 정지가 되었을 때
다음은 기동한 Pod를 하나를 강제로 정지를 시켜 보려고 한다. 이 때의 동작으로서는 10개 있는 중 1개의 Pod가 정지되었다고 replicaset가 판단하여, Pod를 다시 생성하는 동작을 하게 된다. 이때 정지 전의 것과는 다른 해시가 할당되어, 1개의 Pod가 다른 해시로 새로 만들어지 진다.
테스트로 아래와 같이 helloworld-22r5b
를 정지 시켜 보자.
% kubectl delete pod helloworld-22r5b
pod "helloworld-22r5b" deleted
Pod의 상태를 확인한다.
% kubectl get pod
NAME READY STATUS RESTARTS AGE
helloworld-26x7g 1/1 Running 0 6m9s
helloworld-9bkcr 1/1 Running 0 10m
helloworld-ft2b7 1/1 Running 0 10m
helloworld-ldfpk 1/1 Running 0 6m9s
helloworld-ndsph 1/1 Running 0 10m
helloworld-sjg5c 1/1 Running 0 6m9s
helloworld-smdhb 1/1 Running 0 6m9s
helloworld-xgl6m 1/1 Running 0 6m9s
helloworld-xmxbx 1/1 Running 0 16s <<<<< 신규 생성
helloworld-zrsw4 1/1 Running 0 10m
이 경우 중지된 helloworld-22r5b
대신에 helloworld-xmxbx
이 자동으로 생성되었음을 확인할 수 있다.