쿠버네티스

YAML 파일을 쿠버네티스에 적용하기 - ReplicaSet

우잉~ 2024. 11. 12. 23:42

ReplicaSet

애플리케이션이 실행 중인 단일 pod를 가지고 있다고 했을 때, 애플리케이션이 중단되면 더 이상 애플리케이션에 접근할 수 없게 된다.

그래서 애초에 애플리케이션의 고가용성(High Availability)를 위해 여러 개의 Pod나 인스턴스를 실행하는 것이 좋다. → 하나가 먹통이 되어도 다른 pod나 인스턴스가 계속 실행되기 때문에 애플리케이션을 이용하는 데 문제가 생기지 않는다.

pod를 run 명령어나 create 명령어를 사용하여 생성할 경우, 1개만 생성된다. 이때, 레플리카셋을 이용하면 쿠버네티스 클러스터에서 단일 Pod의 여러 인스턴스를 실행할 수 있다.

 

그래서 결국 레플리카셋(ReplicaSet)은 무엇이냐? 복제를 설정하는 기술이다. 몇 개 복제할 것인지? 어떤 pod를 복제할 것인지?에 대한 코드를 작성하여 최소 pod의 수를 유지할 수 있도록 한다.

 

※ 레플리카셋은 이전 기술인 레플리카 컨트롤러(Replication Controller)를 대체하기 위해 생겨났다. 둘은 같은 목적을 위해 생겨났지만, 약간의 기능이 다르며, 현재 특정 버전까지만 호환되고 있는 상태다.

 

레플리카셋을 생성하기 위한 yaml 파일을 만들 때도 Pod처럼 주요 필드 4가지를 작성해주면 된다.

넷 중 가장 중요한 부분은 spec이다. spec에는 templetes, replicas, selector 섹션을 필수로 작성해야 한다.

레플리카셋을 정의하는 예시 코드는 아래와 같다.

 

(예시 코드)

# replicaset-definition.yml

apiVersion: apps/v1
kind: ReplicaSet
metadata:
  name: myapp-replicaset
  labels:
    app: myapp
    type: front-end

spec:
  templete:
    metadata:
      name: myapp-pod
      labels:
        app: myapp
        type: front-end
    spec:
      containers:
        - name: nginx-container
          image: nginx
  replicas: 3
  selector:
    matchLabels:
      type: front-end

 

templete이라는 필드는 복제할 pod의 metadata와 spec을 레플리카셋의 사양으로 작성한 것이다. → 무슨 pod를 생성할 것인지?

replicas 필드는 최소 몇 개의 pod를 생성할 것인지 정의한다. → 위 예시 코드는 동일한 pod를 3개 생성한다는 뜻이다.

selector 필드에는 matchLabels가 꼭 포함되어 있어야 하는데, matchLabels는 지정된 라벨을 pod의 라벨과 일치시킨다.

 

selector는 replicas에 등록한 개수의 pod를 언제든지 실행될 수 있도록 하고자 한다. → 뭔가 실행 중인 pod가 죽었을 때, 레플리카셋은 이를 인지하고 새로 생성하는 역할 즉, 모니터링을 하는 프로세스이다.

 

대체 레플리카셋은 어떻게 모니터링할 Pod를 인지하는 것일까? → selector의 matchLabels 필터를 참조하여 pod 생성 시 사용한 것과 동일한 레이블을 제공한다.

 

[레플리카셋 spec 필드]

templetes 생성할 pod의 metadata와 spec
replicas 최소 pod 생성 개수
selector 생성한 pod를 모니터링할 수 있는 기능을 제공 (예: pod가 하나 죽으면 다시 생성함)
matchLables는 레플리카셋의 metadata에 작성한 라벨과 동일한 내용이어야 함

 

 

레플리카셋 확장 방법

1. yaml 파일을 수정한 뒤 kubectl replace 명령어 사용하기

> kubectl replace -f replicaset-definition.yml

2. kubectl scale 명령어 사용하기

> kubectl scale --replicas=6 replicaset-definition.yml  → yaml 파일을 이용하였음 ※ 파일 내용 변경 X

> kubectl scale --replicas=6 replicaset myapp-replicaset → type과 레플리카셋 이름을 이용하였음

 

 


실습 - ReplicaSet 파일 생성하기

1. replicaset-exam.yaml 파일 생성하기

- spec의 selector는 생성하려는 replicaset의 labels와 matchLabels와 같게 만들어야 하고, templates는 생성하려는 pod의 metadata와 spec을 입력한다. ※ templates에 포함되는 labels도 생성하려는 레플리카셋의 라벨과 같아야 한다.

코드 작성

 

2. 명령어 실행

레플리카셋이 무사히 생성된 것을 확인할 수 있다.

yaml 파일에 최소 개수를 3개로 지정했기 때문에 pod도 3개가 생성된 것을 확인할 수 있다. 파일에 지정된 이름 뒤에 '-랜덤 아이디'가 부여된다.

 

replicaset 생성 완료

 

3. Pod 지워보기

yaml 파일에 작성된 pod의 최소 개수는 3개이다. 이 중 하나를 지우면 어떻게 될까?

pod 지우기

pod 1개를 지워도 레플리카셋이 새로운 pod를 생성하여 최소 개수인 3개가 실행되고 있는 것을 확인할 수 있다.

여전히 pod가 3개인 채로 실행되고 있는 레플리카셋

describe 명령어를 사용하면 Event를 확인할 수 있는데, pod가 총 4개 생성된 것을 확인할 수 있다.

 

 

4. 최소 개수보다 더 많은 pod를 가지고 있을 때는 어떨까?

레플리카셋에 등록한 템플릿과 동일한 pod를 실행해본다.

같은 사양의 단일 pod yaml 파일 내용

 

해당 pod를 실행하자마자 레플리카셋이 생성된 포드를 정지시키고 있는 것을 확인할 수 있다.

 

 


5. 최소 pod 수 늘리기

첫번째로는 파일을 직접 수정하는 방법이 있다.

> kubectl edit replicaset myapp-replicaset

위 명령어를 실행하면 메모장이 열린다. (Linux의 경우, vim 편집기에서 열린다.)

 

 

 

이 파일은 우리가 직접 만든 파일은 아니고, 쿠버네티스가 메모리에서 만든 임시 파일이다.

이런 파일을 만드는 이유는 쿠버네티스에 존재하는 개체의 구성을 수정할 수 있도록 돕기 위해서이다.

이제 최대 pod의 수 replicas의 수를 변경하고 저장한다.

 

파일을 저장하고 종료하자마자 적용되는 것을 확인할 수 있다.

 

 

두 번째로는 scale 명령을 사용한다.

> kubectl scale replicaset myapp-replicaset --replicas=6