본문 바로가기
도커&쿠버네티스/쿠버네티스

#2 레플리카 셋(Replica Set)

by 취미툰 2022. 12. 8.
반응형

일정 개수의 포드를 유지하는 컨트롤러

실제 서비스에서 여러개의 동일한 컨테이너를 생성한 뒤 외부 요청이 각 컨테이너에 적절히 분배되게 하고 싶을때, 레플리카셋을 활용할 수 있습니다.

 

특징

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

노드 장애 등의 이유로 포드를 사용할 수 없다면 다른 노드에서 포드를 다시 생성합니다.

 

레플리카 셋을 통해 포드를 안정적으로 여러개 실행할 수도 있고, 워커 노드에 장애가 생기더라도 정해진 개수의 포드를 유지할 수 있습니다.

 

1.기본적으로 사용하기

사용하기

apiVersion: apps/v1
kind: ReplicaSet
metadata:
  name: nginx-replicaset
spec:
  template:
    metadata:
      name: nginx-replicaset
      labels:
        app: nginx-ysbae
    spec:
      containers:
      - name: nginx-replicaset
        image: nginx
        ports:
        - containerPort: 80
  replicas: 3
  selector:
    matchLabels:
      app: nginx-ysbae

replicas : 3으로 설정했기때문에 3개의 포드가 생성된 것을 확인할 수 있습니다.

 

확인

$ vi replica.yaml
$ kubectl apply -f replica.yaml 
replicaset.apps/nginx-replicaset created
$ kubectl get pod
NAME                     READY   STATUS              RESTARTS   AGE
nginx-replicaset-5cbqr   0/1     ContainerCreating   0          4s
nginx-replicaset-swztm   0/1     ContainerCreating   0          4s
nginx-replicaset-wvtdr   0/1     ContainerCreating   0          4s
$ kubectl get rs
NAME               DESIRED   CURRENT   READY   AGE
nginx-replicaset   3         3         3       111s

정상적으로 3개가 잘 생성되어 있는것을 확인 할 수 있습니다.

 

2.레플리카 셋을 4개로 늘려서 실행하기

apiVersion: apps/v1
kind: ReplicaSet
metadata:
  name: nginx-replicaset
spec:
  template:
    metadata:
      name: nginx-replicaset
      labels:
        app: nginx-ysbae
    spec:
      containers:
      - name: nginx-replicaset
        image: nginx
        ports:
        - containerPort: 80
  replicas: 4
  selector:
    matchLabels:
      app: nginx-ysbae

 

실행 및 확인

$ vi replica.yaml 
$ kubectl apply -f replica.yaml 
replicaset.apps/nginx-replicaset configured

$ kubectl get pod
NAME                     READY   STATUS    RESTARTS   AGE
nginx-replicaset-5cbqr   1/1     Running   0          3m49s
nginx-replicaset-bl54p   1/1     Running   0          8s
nginx-replicaset-swztm   1/1     Running   0          3m49s
nginx-replicaset-wvtdr   1/1     Running   0          3m49s

$ kubectl get rs
NAME               DESIRED   CURRENT   READY   AGE
nginx-replicaset   4         4         4       3m57s

4개로 한개가 늘어난 모습을 확인할 수 있습니다.

 

레플리카셋의 동작원리

레플리카셋은 포드와 연결된 것처럼 보이지만 실제로는 연결돼 있지 않습니다. 오히려 느슨한 연결을 유지하고 있으며, 이러한 느슨한 연결은 포드와 레플리카셋의 정의 중 라벨 셀렉터(Label Selector)을 통해 이뤄집니다.

 

yaml 파일 중 라벨과 매치라벨의 이름이 nginx-ysbae로 동일하게 설정되있는 것을 볼 수 있습니다.

...생략
	labels:
        app: nginx-ysbae

...생략
 replicas: 4
  selector:
    matchLabels:
      app: nginx-ysbae

 

라벨은 쿠버네티스 리소스의 부가적인 정보를 표현할 수 있을 뿐 아니라, 서로 다른 오브젝트가 서로를 찾아야할 때 사용되기도 합니다. 예를 들어 레플리카셋은 spec.selector.matchLabel에 정의된 라벨을 통해 생성해야 하는 포드를 찾습니다. 즉, app: nginx-ysbae라벨을 가지는 포드의 개수가 replicas 항목에 정의된 숫자인 3개와 일치하지 않으면 포드를 정의하는 포드 템플릿항목의 내용으로 포드를 생성합니다.

 

 

 

 

 

 

 

출처 :시작하세요! 도커/쿠버네티스

출처 : https://kubernetes.io/docs/concepts/workloads/controllers/replicaset/

 

ReplicaSet

A ReplicaSet's purpose is to maintain a stable set of replica Pods running at any given time. As such, it is often used to guarantee the availability of a specified number of identical Pods. How a ReplicaSet works A ReplicaSet is defined with fields, inclu

kubernetes.io

 

반응형

'도커&쿠버네티스 > 쿠버네티스' 카테고리의 다른 글

#1 POD  (0) 2022.11.02
[시작하세요! 도커/쿠버네티스] 개인스터디 시작  (0) 2022.11.02

댓글