융무의 기술블로그
article thumbnail

CKA 자격증 획득 이후 추후 실무를 위한 개념정리를 위해 포스팅된 글입니다.


레플리케이션과 그 밖의 컨트롤러: 관리되는 파드 배포

  • 레플리케이션 컨트롤러(rc)
    • apiVersion: v1
      kind: ReplicationController
      metadata:
        name: kubia
      spec:
        replicas: 3
        selector:
            app: kubia
        template:
          metadata:
            labels:
              app: kubia
          spec:
            containers:
            - name: kubia
              image: luksa/kubia
              ports:
              - containerPort: 8080
    • https://github.com/luksa/kubernetes-in-action
    • 레플리케이션 컨트롤러는 쿠버네티스 리소스로서 파드가 항상 실행되도록 보장합니다. 클러스터에서 노드가 사라지거나 노드에서 파드가 제거된 경우, 레플리케이션 컨트롤는 사라진 파드를 감지해 교체 파드를 생성합니다.
    • 동작
      • 레플리케이션컨트롤러는 실행 중인 파드 목록을 지속적으로 모니터링하고, 특정 유형의 실제 파드 수가 의도하는 수와 일치하는지 항상 확인합니다. 이런 파드가 너무 적게 실행 중인 경우 파드 템플릿에서 새 복제본을 만들고 너무 많은 파드가 실행 중이면 초과 복제본이 제거됩니다.
      • 레플리케이션컨트롤러의 세 가지 요소 이해
        • https://github.com/luksa/kubernetes-in-action
        • 레이블 셀렉터(label selector) : 레플리케이션컨트롤러의 범위에 있는 파드를 결정합니다.
        • 레플리카 수(replica count) : 실행할 파드의 의도하는(desired) 수를 지정합니다.
        • 파드 템플릿(pod template) : 새로운 파드 레플리카를 만들 때 사용됩니다.
      • 레플리케이션컨트롤러 사용 시 이점
        • 기존 파드가 사라지면 새 파드를 시작해 파드(또는 여러 파드의 복제본)가 항상 실행되도록 합니다.
        • 클러스터 노드에 장애가 발생하면 장애가 발생한 노드에서 실행 중인 모든 파드(레플리케이션컨트롤러의 제어하에 있는 파드)에 관한 교체 복제본이 생성됩니다.
        • 수동 또는 자동으로 파드를 쉽게 수평으로 확장할 수 있게 합니다.

레플리케이션컨트롤러 대신 레플리카셋 사용하기(rs)

  • 쿠버네티스 클러스터 상에서 미리 지정된 Pod를 작성하여 실행시켜 두는 장치입니다.
  • Pod가 필요한 수만큼 실행시킨 상태를 클라우드 안에 항상 만들어 두는역할을 합니다.
  •  
  • apiVersion: apps/v1beta2
    kind: ReplicaSet
    metadata:
      name: kubia
    spec:
      replicas: 3
      selector:
        matchLabels:
          app: kubia
      template:
        metadata:
          labels:
            app: kubia
        spec:
          containers:
          - name: kubia
            image: luksa/kubia
  • 초기에는 레플리케이션컨트롤러가 파드를 복제하고 노드 장애가 발생했을 때 재스케줄링하는 유일한 쿠버네티스 구성 요소였습니다. 후에 레플리카셋이라는 유사한 리소스가 도입되어 차세대 레플리케이션컨트롤러이며, 레플리케이션컨트롤러를 완전히 대체할 것입니다.(레플리케이션컨트롤러는 결국 사용되지 않게 될 것)
  • 레플리카셋과 레플리케이션컨트롤러 비교
    • 레플리카셋은 레플리케이션컨트롤러와 똑같이 동작하지만 좀 더 풍부한 표현식을 사용하는 파드 셀렉터를 갖고 있습니다.
    • 레플리케이션컨트롤러의 레이블 셀렉터는 특정 레이블이 있는 파드만을 매칭시킬 수 있는 반면, 레플리카셋의 셀렉터는 특정 레이블이 없는 파드나 레이블의 값과 상관없이 특정 레이블의 키를 갖는 파드를 매칭시킬 수 있습니다.
    • 레플리케이션컨트롤러는 값에 상관없이 레이블 키의 존재만으로 파드를 매칭시킬 수 없지만, 레플리카셋은 가능합니다.
  • 데몬셋을 사용해 각 노드에 정확히 한 개의 파드 실행하기
    • https://github.com/luksa/kubernetes-in-action
    • 클러스터의 모든 노드에, 노드당 하나의 파드만 실행되길 원하는 경우
    • 모든 노드에서 로그 수집기와 리소스 모니터를 실행하려는 경우. 좋은 예는 쿠버네티스의 kube-proxy 프로세스이며, 서비스를 작동시키기 위해 모든 노드에서 실행돼야 합니다.
    • 데몬셋(각 노드에 정확히 하나의 복제본만 실행)은 각 노드에서 하나의 파드 복제본만 실행하지만 레플리카셋은 클러스터 전체에서 무작위로 파드를 분산시킵니다.
    • 데몬셋으로 모든 노드에 파드 실행하기
      • 모든 클러스터 노드마다 파드를 하나만 실행하려면 데몬셋(DaemonSet) 오브젝트를 생성해야 합니다. 데몬셋에 의해 생성되는 파드는 타깃 노드가 이미 지정돼 있고 쿠버네티스 스케줄러를 건너뛰는 것을 제외하면 이 오브젝트는 레플리케이션컨트롤러 또는 레플리카셋과 매우 유사합니다. 파드가 클러스터 내에 무작위로 흩어져 배포되지 않습니다.
      • 레플리카셋(또는 레플리케이션컨트롤러)이 클러스터에 원하는 수의 파드 복제본이 존재하는지 확인하는 반면, 데몬셋에는 원하는 복제본 수라는 개념이 없습니다. 파드 셀렉터와 일치하는 파드 하나가 각 노드에서 실행 중인지 확인하는 것이 데몬셋이 수행해야 하는 역할이기 때문에 복제본 개념이 필요하지 않습니다.
      • 노드가 다운되면 데몬셋은 다른 곳에서 파드를 생성하지 않습니다. 그러나 새 노드가 클러스터에 추가되면 데몬셋은 즉시 새 파드 인스턴스를 새 노드에 배포합니다. 실수로 파드 중 하나를 삭제해 노드에 데몬셋의 파드가 없는 경우에도 마찬가지 입니다.

 Reference

 

'Back-End Development > Kubernetes' 카테고리의 다른 글

[kubernetes] Volume  (0) 2023.04.20
[kubernetes] Service  (0) 2023.04.08
[kubernetes] pod  (0) 2023.04.08
Kubernetes 개요  (0) 2023.04.08
Certified Kubernetes Administrator (CKA) 합격 후기  (1) 2023.02.19
profile

융무의 기술블로그

@융무

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!