Kubernetes

워크로드 API 카테고리(레플리카셋/레플리케이션 컨트롤러)

jih0ssang 2024. 1. 7. 14:56

워크로드 API 카테고리

컨테이너 실행에 관련된 리소스

- 파드

- 레플리케이션 컨트롤러

- 레플리카셋

- 디플로이먼트

- 데몬셋

- 스테이트풀셋

- 잡

- 크론잡

 

레플리카셋

파드의 레플리카를 생성하고 지정한 파드 수를 유지하는 리소스이다.

초반은 레플리케이션 컨트롤러 이었지만 레플리카셋으로 이름 변경 및 기능 추가가 되었다.

 

레플리카셋 생성

apiVersion: apps/v1
kind: ReplicaSet
metadata:
  name: sample-rs
spec:
  replicas: 3
  selector:
    matchLabels:
      app: sample-app
  template:
    metadata:
      labels:
        app: sample-app
    spec:
      containers:
      - name: nginx-container
        image: nginx:1.16

spec.selector.matchLabels에 작성된 레이블 "app: sample-app"이 붙어있는 파드들을 대상으로만 적용하는 ReplicaSet을 생성한다. spec.template.metadata.labels에 작성된 레이블 "app: sample-app"을 앞으로 생성될 파드에 레이블을 붙이라는 내용이다.

 

# 레플리카셋 생성
$ kubectl apply -f sample-rs.yaml
replicaset.apps/sammple-rs created

 

# 레플리카셋 확인
$ kubectl get replicasets -o wide
NAME		DESIRED	CURRENT	READY AGE  CONTAINERS       IMAGES	SELECTOR
sample-rs	3	3	3     11s  nginx-container  nginx:1.16  app=sample-app

레플리카셋을 확인해보면 세 개의 파드가 기동 중인 것을 확인할 수 있다.

# 레플리카셋이 파드 관리에 사용하는 레이블(app=sample-app)을 지정하여 파드 목록 표시
$ kubectl get pods -l app=sample-app -o wide
NAME		READY	STATUS	 RESTARTS AGE	IP	        NODE
sample-rs-9f9kr	1/1	Running   0	  78s	10.0.2.14	gke-k8s-default-pool-mnp
sample-rs-ccj9l	1/1	Running   0	  78s	10.0.0.8	gke-k8s-default-pool-gsh
sample-rs-gs98r	1/1	Running   0	  78s	10.0.1.15	gke-k8s-default-pool-fpx

레이블을 지정하여 파드를 확인해도 세 개의 파드를 확인할 수 있다.

세 개의 파드는 각각 다른 노드에 흩어져 생성되어 있기 때문에

만약 노드에 장애가 발생하더라도 서비스에 미치는 영향을 최소화할 수 있다.

 

자동화된 복구

노드나 파드에 장애가 발생했을 때 지정한 파드 수를 유지하기 위해 다른 노드에서 파드를 기동시키므로

장애 시에도 많은 영향을 받지 않는다.

 

레이블

레플리카셋 동작의 원리는 레이블이다.

쿠버네티스가 파드를 모니터링하며 파드 수를 조정하는데, 특정 레이블을 가진 파드 수를 계산하며 조정한다.

 

레플리카셋 설정 변경

레플리카셋 설정 및 파드 수 변경 방식은 크게 두 가지가 있다.

 

1) 메니페스트를 수정하여 kubectl apply 명령어 실행

# 레플리카 수를 3에서 4로 변경한 메니페스트를 apply
$ sed -i -e 's|replicas: 3|replicas: 4|' sample-rs.yaml
$ kubectl apply -f sample-rs.yaml
replicaset.apps/sample-rs configured

IaC를 구현하기 위해서는 이 방법을 권장한다.

 

2) kubectl scale 명령어 실행

# 레플리카 수를 5로 변경
$ kubescale replicaset sample-rs --replicas 5
replicaset.apps/sample-rs scaled

kubectl scale 명령어를 사용하여 스케일링하는 방법이다.

kubectl scale 명령어를 사용한 스케일링 처리는 레플리카셋/레플리케이션 컨트롤러/디플로이먼트/스테이트풀셋/잡/크론잡 에서도 사용할 수 있다.

# 레플리카셋 목록 표시
$ kubectl get replicasets
NAME		DESIRED	CURRENT	READY	AGE
sample-rs	5	5	5	29m

레플리카셋 상태를 보면 파드가 정상적으로 늘어난 것을 확인할 수 있다.