Recap - ReplicaSets

Watermelon·2025년 12월 24일

CKA 학습 과정

목록 보기
19/35

Replication Controller

  • 컨트롤러는 쿠버네티스의 두뇌
  • 복제 컨트롤러라는 컨트롤러 하나를 설명

High Availability

애플리케이션을 실행하는 단일 파드가 있는 시나리오
어떤 이유로 애플리케이션이 충돌하고 파드가 실패하여 사용자가 더 이상 애플리케이션에 액세스할 수 없게 되다
사용자가 애플리케이션에 대한 액세스 권한을 잃는 것을 방지하기 위해 둘 이상의 인스턴스 또는 파드가 동시에 실행되도록 하기 = 이중화
한 쪽이 실패하더라도 다른 쪽에서 애플리케이션을 계속 실행 가능

  • 복제 컨트롤러 역할: 쿠버네티스 클러스터에서 단일 파드의 여러 인스턴스를 실행하는 데 도움 - 고가용성 제공
  • 단일 파드를 사용하려는 경우 복제 컨트롤러 사용: 하나의 파드가 있더라도 복제 컨트롤러는 기존 파드가 실패하면 자동으로 새 파드를 불러와서 도움 줌(여러 인스턴스 사용하지 않고도 가능하다는 뜻)
  • 복제 컨트롤러: 지정된 수의 파드가 1개 또는 100개일지라도 항상 실행되도록 보장

Load Balancing and Scaling

  • 여러 개의 파드 생성하여 부하 분산
  • 사용자 수 증가 시 추가 파드 배포하여 두 파드 간의 부하 분산
  • 첫 번째 노드에서 리소스가 부족해지면 클러스터의 다른 노드에 추가 파드 배포 가능
  • 복제 컨트롤러는 클러스터의 여러 노드에 걸쳐 있음
  • 여러 노드의 여러 포드에 걸쳐 부하 분산, 수요가 증가할 때 애플리케이션

복제 컨트롤러와 복제 세트의 차이

둘 다 같은 목적이지만 같지 않음

  • Replication Controller: 복제 컨트롤러
  • ReplicaSet: 복제 세트

Replication Controller(구형)

  • ReplicaSet로 대체되는 구형 기술

ReplicaSet(신형)

  • 복제 설정 새로운 권장 방법
  • 다만, 주 기술을 Replication Controller나 ReplicaSet 둘 다 사용 가능
  • 새로운 권장 방법을 주로 사용하도록 할 것

Replication Controller 파일 생성

vi rc-definition.yml

apiVersion: v1
kind: ReplicationController
metadata:
  name: myapp-rc
  labels:
    app: myapp
    type: front-end
spec:
 template:
   metadata:
     name: myapp-pod
     labels:
       app: myapp
       type: front-end
   spec:
     containers:
     - name: nginx-container
       image: nginx
  replicas: 3
  • api 버전은 프로젝트에 따라 설정
  • 복제 컨트롤러는 쿠버네티스 API 버전 v1에서 지원
  • template로 pod 생성에 관한 템플릿 작성
  • template는 pod 정의 파일을 참고하여 작성하면 편리
  • replicas는 복제 수를 의미함, main spec 안에 들어가있어야함
  • kubectl create -f rc-definition.yml를 통해 실행
  • kubectl get replicationcontroller: 코딩할 때 변수명 저렇게 적어두면 욕먹는데.. K8s는 아닌가보다
  • DESIRED / CURRENT / READY: 원하는 레플리카 수 / 현재 레플리카 수 / 준ㅂ된 레플리카 수

ReplicaSet

vi replicaset-definition.yml

apiVersion: apps/v1
kind: ReplicaSet
metadata:
  name: myapp-replicaset
  labels:
    app: myapp
    type: front-end
spec:
  template:
    metadata:
      name: myapp-pod
      labels:
        app: myapp
        type: front-end
      spec:
        containers:
        - name: nginx-container
          image: nginx
  replicas: 3
  selector:
    matchLabels:
      type: front-end
  • apiVersion: apps/v1
  • selector: replicaSet 어떤 파드가 해당되는지 식별에 도움
  • selector에 지정된 lable과 일치하는 replicaSet 생성 전에 생성된 pod가 있을 시, replicaSet은 복제본 생성 할 때 해당 pod로 고려하게 됨
  • 아무튼, selector의 존재는 replicaSet과 replicationController와의 주요 차이점
  • selector와 template.metadata.labels는 무조건 같아야 함
  • kubectl create -f replicaset-definition.yml
  • kubectl get replicaset
  • kubectl get pods

Labels and Selectors

  • labels와 selectors는 무슨 역할을 할까

    세 부분으로 구성된 front-end web application의 인스턴스를 3개 배포했다고 가정
    RC 또는 RS로 3개의 활성 pod 유지

  • R들은 복제할 pod를 어떻게 구분할까? 클러스터에는 수백 개의 다른 파드가 있을 수 있음
  • 이때 label을 붙여둔다면 구별 가능, 일치 레이블 필터 사용

Scale

  • 복제 수 확장하고 싶을 때
  1. 파일에서 replicas 수 수정하여 다시 실행하기
  2. kubectl scale --replicas=6 -f replicaset-definition.yml로 수정하기
  3. kubectl scale --replicas=6 replicaset myapp-replicaset로 type과 name 지정하여 수정하기
  • 2번, 3번의 경우, 원본 파일이 수정되는건 아니고 일시적 명령어임

Commands

  • kubectl create -f replicaset-definition.yml
  • kubectl get replicaset
  • kubectl delete replicaset myapp-replicaset
  • kubectl replace -f replicaset-definition.yml
  • kubectl scale --replicas=6 replicaset myapp-replicaset
profile
많은 경험을 해보고자 하는

0개의 댓글