kubernetes started(3) 레플리카 셋(Replica Set)

2020. 2. 15. 15:21devops/kubernetes

이전에 공부했던 포드는 여러 개의 컨테이너를 묶어서 추상화하여 완전한 애플리케이션을 실행하기로 만드는 것이었다. 우리는 외부 요청을 동일한 포드에 잘 분배하여 반환하게 실행하게 할 것입니다. 

 

그럼 여기서 다수의 동일한 포드를 어떻게 만들면 좋을까요??

 

단순하게 생각해보면 yaml 파일에 여러 개의 포드를 명시해주면 된다. 이는 불필요한 작업을 반복하는 안 좋은 방법이라고 생각한다. 그리고 또한 노드나 포드에 고장이나서 종료되게 되면 다시 접근하지 못하게 되어 복구되지 못합니다

 

따라서 이러한 한계점을 해결하기위해 레플리카 셋을 같이 사용합니다. 레플리카 셋은 포드를 안정적으로 여러 개 실행할 수도 있고, 노드나 포드에 문제가 생기더라도 정해진 개수의 포드를 복구하여 사용할 수 있습니다. 

 

1. 정해진 수의 동일한 포드가 항상 실행되도록 관리합니다. 

2. 노드 및 포드의 장애로 사용할 수 없다면 다른 노드에 포드를 복구합니다. 

레플리카셋 사용하기

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: replicaset-nginx
        image: nginx:latest
        ports: 
          - containerPort: 80

pod와 다르게 추가된 내용만 있습니다. replicas는 생성할 pod의 개수를 설정합니다. 그리고 레플리카가 포드를 생성할 때 사용할 템플릿을 정의합니다. 

 

그럼 만든 yaml 파일로 레플리카를 생성해보겠습니다. 

kubectl apply -f replicaset-nginx.yaml
eplicaset.apps/replicaset-nginx created

kubectl get po 명령어로 레플리카셋과 포드의 목록을 확인해보겠습니다.

kubectl get po
replicaset-nginx-4mct7   1/1     Running   0          81s
replicaset-nginx-4s79f   1/1     Running   0          81s
replicaset-nginx-b9hgs   1/1     Running   0          81s

 

이번에는 같은 label을 갖고있는 replicas의 수를 증가시켜보겠습니다. yaml 파일의 replicas를 4로 변경하고 다시 실행하면 변경된 것을 확인 할 수 있습니다. 

kubectl apply -f replicasets-nginx.yaml                                                                                                                                                                  ✔  11623  14:55:34
replicaset.apps/replicaset-nginx configured

이전에는 created라는 명령어가 나왔는데 yaml에서는 configured라는 명령어가 나왔습니다. 삭제를 하기 위해서는 kubectl delete rs 또는 kubectl delete -f로 삭제할 수 있습니다. 

 

동작 원리

레플리카셋은 자동으로 복구해주고 생긴 것을 확인하는 것을 보면 tracking 하고 있는 것 같습니다. 이러한 것은 어떻게 이루어 지는 것일까요?? 이는 레플리카셋이 라벨셀렉터로 같은 라벨을 갖고 있는 포드들을 계속 확인합니다. 실제로 동일한 라벨이 설정한 라플리카 개수만큼 다시 복구해줍니다. 그리고 동일한 포드의 개수가 레플리카에 설정한 개수와 같다면 특별한 작업을 진행하지 않습니다. 

 

결론적으로 레플리카셋은 포드의 개수를 일정한 개수를 유지하는 기능을 합니다.

 

그리고 추가로 pod의 metadata 변경도 가능합니다. 

kubectl edit pods replicaset-nginx-psgrl(name)
// vi 문법
label의 값을 제거 한 후 다시 docker get po를 확인해보면

label의 값을 삭제한 것은 이름이 <none>으로 변경되고 새로운 pod가 하나 생긴것을 확인할 수 있습니다. 

 

'devops > kubernetes' 카테고리의 다른 글

kubernetes started(5) 서비스(Service)  (0) 2020.02.15
kubernetes started(4) 디플로이먼트(Deployment)  (0) 2020.02.15
kubernetes started(2) pod  (0) 2020.02.13
kubernetes started(1)  (0) 2020.02.13
kubernetes 설치  (0) 2020.02.13