[쿠버네티스] ReplicaSet

    728x90
    반응형

    출처

    Cloud Native DevOps with Kubernetes / 쿠버네티스를 활용한 클라우드 네이티브 데브옵스

    Certified Kubernetes Administrator (CKA) with Practice Tests(Udemy)

    ReplicaSet

    What is ReplicaSet?

    쿠버네티스에서 특정 갯수의 Pod를 항상 유지하도록 보장하는 리소스 

     

    ReplicaSet의 필요성

    1. Stateful: 지정된 수의 Pod를 유지하기 위해 현재 상태를 지속적으로 모니터링하고 조정한다.
    2. AutoScailing: App의 요구에 따라 Pod의 수를 조절할 수 있어, 리소스의 활용도를 극대화하고 운영비를 절감할 수 있다.
    3. 롤링업데이트: 새로운 버전의 Pod를 생성하고 기존의 Pod를 점진적으로 교체하는 롤링업데이트를 지원하여 서비스 중단 없이 애플리케이션을 업데이트할 수 있다.
    4. 로드밸런싱: ReplicaSet이 여러 개의 Pod를 생성하고 관리함으로써, 외부에서 오는 트래픽을 여러 인스턴스로 분산시켜 로드밸런싱을 지원한다. 일반적으로 서비스와 함께 사용된다.(직접적으로 수행하지는 않음)

     

    ReplicaSet의 사용 시기

    1. Deployment: 트래픽 증가나 감소에 따라 수평적으로 Scailing할 때 주로 사용된다.
    2. Scailing: 고가용성이 중요한 환경에서 장애가 발생했을 때 빠르게 복구할 수 있도록 도와준다.
    3. Test/Development: 다양한 환경에서 Pod의 복제를 필요로 하는 테스트 및 개발 과정에서도 자주 활용된다.

     

    ReplicaSet의 적용 사례

    1. 여러 개의 웹 서버 인스턴스를 운영 중, 트래픽의 분산 처리가 필요할 때
    2. 데이터 처리를 병렬로 수행하기 위해 여러 개의 Pod를 생성할 때
    3. 각 서비스에 필요한 인스턴스를 유지할 때

     

    ReplicaSet Yaml

    #ReplicaSet yaml 구조
    [root@]$ vi replicaset-yaml.yml
    
    apiVersion: apps/v1 #사용하고 있는 버전을 지정(고정값)
    kind: ReplicaSet #리소스의 종류(고정값)
    metadata: 
      name: imfra-replicaset #ReplicaSet의 이름
      labels: 
        app: imfra
        type: replicaset
    spec: #ReplicaSet의 사양을 정의
      template: #복제할 Pod의 템플릿을 그대로 사용
        metadata:
          labels:
            type: rolling-update-test
        spec:
          containers:
          - name: nginx
            image: nginx
    
      replicas: 3 #복제를 원하는 Pod의 갯수
      selector: 
        matchLabels: #label을 일치시키는 옵션(ReplicaSet에서 모니터링할 수 있는 키:값)
        type: rolling-update-test

     

    #ReplicaSet 생성
    [root@]$ kubectl create -f replicaset-yaml.yml
    
    replicaset "imfra-replicaset" created

     

    #ReplicaSet 수정
    #수정 후 재배포
    [root@]$ kubectl replace -f replicaset-yaml.yml
    
    #replica의 갯수를 수정
    [root@]$ kubectl sacle --replicas=6 -f replicaset-yaml.yml
    
    #typer과 name을 명시
    [root@]$ kubectl sacle replicaset imfra-replicaset --replicas=6

     

    #ReplicaSet 확인
    [root@]$ kubectl get replicaset
    
    NAME               DESIRED   CURRENT   READY   AGE
    imfra-replicaset   3         3         3       15s

     

    #Pod 확인
    [root@]$ kubectl get po
    
    NAME                     READY   STATUS    RESTARTS   AGE
    imfra-replicaset-159xs   1/1     Running   1          30s
    imfra-replicaset-ho24n   1/1     Running   1          30s
    imfra-replicaset-9aboz   1/1     Running   1          30s

     

    728x90
    반응형

    댓글