ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Kubernetes ReplicaSet 알아보기
    Kubernetes 2023. 11. 28. 22:15
    728x90
    반응형

    - 목차.

     

     

    함께보면 좋은 글.

    https://westlife0615.tistory.com/210

     

    Kubernetes Pod 이해하기

    소개 Pod는 쿠버네티스의 가장 기본적인 구성요소입니다. 컨테이너 환경을 오케스트레이션하는 쿠버네티스 입장에서 Pod는 컨테이너를 관리하는 주체이기 때문입니다. 하나의 Pod는 하나 이상의

    westlife0615.tistory.com

     

    https://westlife0615.tistory.com/407

     

    KinD 알아보기.

    - 목차 소개. KinD 는 "카인드" 라고 발음되며, 로컬 머신에서 쿠버네티스를 간편하게 실행할 수 있는 도구입니다. KinD 는 Kubernetes in Docker 의 약자이구요. Docker 를 활용하여 쿠버네티스 환경을 구성

    westlife0615.tistory.com

     

     

    소개.



    ReplicaSet 는 쿠버네티스의 대표적인 리소스입니다. 
    ReplicaSet 는 정해진 수 만큼의 Pod 의 복제본은 만들고, 그 개체수를 유지시킵니다. 
    Pod 는 Container 들을 관리하는 쿠버네티스의 리소스입니다. 
    실질적인 워크로드를 수행하는 것이 Container 이고, 
    이 Container 를 관리하는 것이 Pod 이기 때문에 Pod 만 있어도 서비스는 구현될 수 있습니다. 
    하지만 Pod 만을 관리하는 것은 쉬운 일이 아닙니다. 
    Pod 만 존재하는 경우에 발생하는 문제 상황들을 정리해보겠습니다. 

     


    1. Scale-in and out


    만약 100 개의 서버를 구동시켜야하는 경우는 어떨까요?
    Pod Template 을 100개를 만들고, 100개의 Pod Template 을 쿠버네티스 내부에 생성해야합니다. 
    각각의 Pod 는 개별적인 리소스이기 때문에 Pod Name 또한 다르게 설정해야하죠. 
    그리고 100개의 서버를 모두 내려야한다면, 100번의 수작업을 일일이 진행해야합니다. 
    이런 상황에서 ReplicaSet 을 사용하면, replicas 라는 설정값 하나로 손쉽게 Scale-in and out 을 할 수 있고, 
    여러 Pod 를 통제할 수 있습니다. 

     


    2. Pod 의 장애가 발생한 경우에 새로운 Pod 를 생성하여 Replicas 갯수를 충족시킵니다. 

    여러가지 이유로 Pod 가 비정상적으로 종료될 수 있습니다. 
    종료된 Pod 를 다시 실행시키기 위해선 관련된 모니터링이 필요하고,
    Pod 를 다시 실행시키기 위한 절차가 필요합니다. 
    ReplicaSet 은 이러한 과정을 자동적으로 수행합니다. 

    즉, ReplicaSet 의 존재 목적은 Pod 의 복제본의 수를 유지시키는데에 있습니다. 
    그리고 복제본의 Pod 들을 하나의 그룹으로써 관리합니다. 


    ReplicaSet 은 어떻게 동작할까? 


    쿠버네티스 Control Plain 내부에 여러 Controller 들이 존재합니다. 
    그 중 ReplicaSet Controller 또한 존재하며, 
    ReplicaSet Controller 는 ReplicaSet 의 상태를 꾸준히 체크합니다. 
    여기서 Desired State 와 Actual State 라는 개념이 필요한데요. 
    ReplicaSet Template 에 정의하는 spec 들이 Desired State 가 됩니다. 
    Desired State 는 ReplicaSet 이 지향하는 형태 또는 상태를 의미합니다. 
    예를 들어, 

    < ReplicaSet yaml 예시. >

    apiVersion: apps/v1
    kind: ReplicaSet
    metadata:
      name: example-replicaset
    spec:
      replicas: 3
      selector:
        matchLabels:
          app: nginx
      template:
        metadata:
          labels:
            app: nginx
        spec:
          containers:
          - name: nginx-container
            image: nginx:latest



    "spec.replicas : 3" 은 Pod 의 갯수를 3개로 유지해야한다.
    "spec.selector.matchLabels.app : nginx" 은 ReplicaSet 이 관리하는 Pod 의 Selector 는 app: nginx 입니다.
    "spec.template.spec.containers.image: nginx" : Pod 의 Container Image 로 nginx:latest 를 사용해야한다. 
    등과 같은 설정입니다. 

    만약 Pod 의 갯수가 1개 줄어들면 Actual State 의 replicas 는 2 가 되고, 
    ReplicaSet 은 Desired State 인 3 을 달성하기 위해서 1개의 Pod 를 생성하게 됩니다.

    이런식으로 ReplicaSet Controller 는 Desired State 와 Actual State 를 비교하여 ReplicaSet 을 관리합니다. 

     

     

    ReplicaSet 생성해보기.

    < ReplicaSet yaml >

    apiVersion: apps/v1
    kind: ReplicaSet
    metadata:
      name: example-replicaset
    spec:
      replicas: 3
      selector:
        matchLabels:
          app: nginx
      template:
        metadata:
          labels:
            app: nginx
        spec:
          containers:
          - name: nginx-container
            image: nginx:latest

     

    < nginx_replicaset.yaml 파일 생성하기 >

    cat <<EOF> /tmp/nginx_replicaset.yaml
    apiVersion: apps/v1
    kind: ReplicaSet
    metadata:
      name: example-replicaset
    spec:
      replicas: 3
      selector:
        matchLabels:
          app: nginx
      template:
        metadata:
          labels:
            app: nginx
        spec:
          containers:
          - name: nginx-container
            image: nginx:latest
    EOF

     

     

    아래 명령어를 통해서 ReplicaSet 를 생성합니다.

    kubectl create -f /tmp/nginx_replicaset.yaml

     

    ReplicaSet 이 성공적으로 생성되면

    "replicaset.apps/example-replicaset created" 이 출력됩니다.

     

    아래와 같이 3개의 Pod 와 1개의 ReplicaSet 이 생성됨을 확인할 수 있습니다.

    kubectl get replicaset
    NAME                 DESIRED   CURRENT   READY   AGE
    example-replicaset   3         3         3       85s
    
    
    kubectl get pod 
    NAME                       READY   STATUS    RESTARTS   AGE
    example-replicaset-fhxzd   1/1     Running   0          97s
    example-replicaset-snrm4   1/1     Running   0          97s
    example-replicaset-tpkqv   1/1     Running   0          97s

     

    반응형

    'Kubernetes' 카테고리의 다른 글

    Kubernetes Custom Resource 알아보기  (0) 2023.12.11
    Kubernetes Certificate 알아보기  (0) 2023.12.11
    KinD 알아보기.  (0) 2023.11.27
    Kubernetes Ephemeral Volume  (0) 2023.08.09
    [Kubernetes] Service 이해하기  (0) 2023.08.01
Designed by Tistory.