상세 컨텐츠

본문 제목

쿠버네티스 기초실습 (GCP 기반) - 3 - Replicaset

소프트웨어/인프라

by moonionn 2022. 11. 2. 01:51

본문

 

1. Replicaset이란?

replicaset은 실행되는 pod의 개수를 보장합니다.

( pod 설명 -> https://fierycoding.tistory.com/96 )

즉 일정 개수의 pod를 유지하기 위한 컨트롤러입니다.

 

2. Replicaset 동작 원리

replicaset과 pod는 "ownerReferences" 라는 필드를 통해 느슨한 결합 관계를 가집니다.

이 느슨한 결합으로 인해 replicaset을 지워도 해당 replicaset에 연결되어 있던 pod들은 유지됩니다.

( 일종의.. 오너 컨트롤러만 제거된 것이기 때문에 pod는 그 어느 컨트롤러에도 종속되지 않은 상태로 변경 )

 

replicaset과 pod를 연결해주려면 라벨을 서로 일치시켜주면 됩니다.

 

3. Replicaset 배포해보기

yaml 파일 예시

파일명 : nginx-replicaset-test.yaml

apiVersion: apps/v1
kind: ReplicaSet # 배포 유형 : Replicaset
metadata:
  name: web
  labels:
    env: dev
    role: web
spec:
  replicas: 4 # 항상 4개의 pod를 가용하도록 한다
  # 아래 selector.matchLabels는 replicaset이 가질 라벨을 의미한다
  selector:
    matchLabels:
      role: web
  # 아래 template은 pod에 대한 정보이다
  template:
    metadata:
      # 아래 labels는 pod가 가질 라벨을 의미한다
      labels:
        role: web
    spec:
      containers:
        - name: testnginx
          image: nginx

 

kubectl apply -f ./nginx-replicaset-test.yaml

배포해보면 의도한대로 네 개의 pod가 생성됩니다.

 

 

그 중 아무 pod나 골라 ownerReferences를 확인해봅니다.

kind: Replicaset, name: web 을 통해 우리가 의도한 컨트롤러와 매칭되어 있는 것을 확인할 수 있습니다.

 

 

4. Replicaset - Pod 연결 끊기

해당 pod의 정보를 수정해 replicaset에서 떼어 내도록 하겠습니다.

kubectl edit pods web-4z7wg

해당 pod의 labels 값을 임의로 변경해줍니다.

role: web -> role: isolated

 

 

다시 pod 리스트를 확인하면 위와 같이 5개의 pod를 확인할 수 있습니다.

왜냐하면 좀 전에 배포한 replicaset 컨트롤러는 4개의 pod가 보장되어야 하는데,

하나의 pod가 metadata.labels 값 변경으로 인해 ownerReferences를 잃었으므로 해당 replicaset은 하나의 pod이 더 필요해진 셈입니다. 따라서 자동으로 pod이 하나 더 생성되었습니다.

 

 

5. Replicaset 기타 정보들

오토스케일링

CPU 사용량에 따라 최대로 생성할 수 있는 pod 개수를 지정해줍니다.

최소 pod 개수는 처음 설정한 replicas 값을 따릅니다. (이 포스트의 예시를 따르자면 4개가 minimum이 됩니다)

kubectl autoscale rs web --max=8

 

실 사용법

쿠버네티스는 Replicaset 기능이 필요한 경우, Replicaset을 단독으로 사용하기보다는 Deployment(앞으로 다룰 내용)를 대용하길 권장합니다. (Deployment가 Replicaset을 소유, 관리합니다)

 

관련글 더보기

댓글 영역