Kubernetes Replication Controller와 Replica Set

2024. 12. 30. 22:11쿠버네티스/쿠버네티스

728x90
반응형

1. Kubernetes Replication Controller와 Replica Set

Replication Controller

  • 역할:
    • 지정한 수의 Pod가 항상 실행되도록 보장.
    • Pod가 실패하면 자동으로 새로운 Pod 생성.
    • 여러 Pod를 생성하여 부하를 분산하고 고가용성을 제공.
  • 사용 사례:
    • 일 Pod를 실행할 때도 사용 가능. Pod 실패 시 자동 복구.
    • 사용자 증가 시 더 많은 Pod를 생성해 부하 분산.
  • 구조:
    • Replication Controller는 Pod 템플릿을 사용하여 여러 Pod를 생성.
    • YAML 정의 파일(RC-definition.yaml)의 주요 섹션:
      1. apiVersion: v1 (Replication Controller는 Kubernetes API 버전 v1에서 지원).
      2. kind: ReplicationController.
      3. metadata: 이름과 레이블 포함.
      4. spec:
        • replicas: 원하는 Pod 개수.
        • template: 생성할 Pod의 정의.
  • Pod 템플릿 작성:
    • 이전에 작성한 Pod 정의 파일을 템플릿 섹션에 그대로 재사용 가능.
    • 템플릿과 replicas는 동일한 계층(들여쓰기)이어야 함.
  • 명령어:
kubectl create -f RC-definition.yaml
kubectl get replicationcontroller
kubectl get pods
apiVersion: v1
kind: ReplicationController
metadata:  
  name: myapp-rc
  labels:
    app: myapp
    type: front-end
spec:
  replicas: 3  
  template:
    metadata:
      name: myapp-pod  
      labels:
        app: myapp
        type: frontPod
    spec:  
      containers:
        - name: nginx-container
          image: nginx

Replica Set

  • 역할:
    • Replication Controller와 유사하지만, 더 발전된 기능 제공.
    • 기존에 생성된 Pod도 관리 가능(레이블 기반 선택).
  • 주요 차이점:
    • Replica Set은 selector 필드 필수:
      • 특정 레이블을 기반으로 관리할 Pod 식별.
      • 예: matchLabels를 사용하여 레이블이 일치하는 기존 Pod 관리.
  • 구조:
    • YAML 정의 파일(ReplicaSet-definition.yaml)의 주요 섹션:
      1. apiVersion: apps/v1 (Replica Set은 최신 API 버전에서 지원).
      2. kind: ReplicaSet.
      3. metadata: 이름과 레이블 포함.
      4. spec:
        • replicas: 원하는 Pod 개수.
        • selector: 관리할 Pod의 레이블 정의.
        • template: 새로운 Pod 생성 시 사용할 템플릿.
  • 명령어:
kubectl create -f ReplicaSet-definition.yaml
kubectl get replicasets
kubectl get pods
apiVersion: apps/v1
kind: ReplicaSet
metadata:
  name: myapp-replicaset
  labels:
    app: myapp
    type: front-end

spec:
  replicas: 3  # 'repicas' 오타 수정
  selector:
    matchLabels:
      type: front-end
  template:
    metadata:
      name: myapp-pod
      labels:
        app: myapp
        type: front-end
    spec:  # 'spec' 들여쓰기 및 위치 수정
      containers:
        - name: nginx-container
          image: nginx
  1. Replication Controller와 Replica Set은 고가용성을 위해 여러 Pod를 관리하며, Replica Set은 더 발전된 기능 제공.
  2. YAML 파일을 통해 Kubernetes 객체 정의 및 관리 가능.
  3. 명령어를 사용해 객체 생성, 상태 확인, 스케일링 등을 수행할 수 있음.

replicaSet 수정-업데이트 6

kubectl scale --replicas=6 -f rs-demo.yaml
kubectl replace -f rs-demo.yaml # vi로 숫자 수정후 적용
kubectl scale --replicas=6 replicaset[TYPE] myapp-replicaset[NAME]

Selector의 차이

    • Equality-Based Selector (RC):
      • 특정 레이블 키-값 쌍과 정확히 일치하는 Pod만 선택.
      • 예: app=nginx 레이블을 가진 Pod만 선택 가능.
    • Set-Based Selector (RS):
      • 다양한 조건을 기반으로 Pod를 선택 가능.
      • 연산자 사용:
        • In: 특정 값 집합에 포함된 경우.
        • NotIn: 특정 값 집합에 포함되지 않은 경우.
        • Exists: 특정 키가 존재하는 경우.
        • DoesNotExist: 특정 키가 존재하지 않는 경우.
      • 예: app in (nginx, apache) app=nginx 또는 app=apache인 Pod를 모두 선택.

Replication Controller

      • Kubernetes에서 처음 도입된 복제 컨트롤러.
      • 지정된 수의 Pod를 유지하며, Pod가 삭제되거나 실패하면 새로운 Pod 생성.
      • 단순한 복제 및 스케일링 작업에 적합.
      • 현재는 Replica Set으로 대체되고 있음.

Replica Set

    • Replication Controller의 개선된 버전.
    • 더 유연하고 강력한 Selector 기능 제공(Set-Based Selector).
    • 기존에 생성된 Pod도 관리 가능(레이블 기반).
    • Deployment와 함께 사용하여 롤링 업데이트 및 롤백 기능 추가 가능

Replica Set deployment비교

#replica set
apiVersion: apps/v1
kind: ReplicaSet
metadata:
  name: myapp-rs
  labels:
    app: myapp
spec:
  replicas: 3
  selector:
    matchLabels:
      app: myapp
  template:
    metadata:
      labels:
        app: myapp
    spec:
      containers:
      - name: nginx-container
        image: nginx


#deployments
apiVersion: apps/v1
kind: Deployment
metadata:
  name: myapp-deployment
spec:
  replicas: 3
  selector:
    matchLabels:
      app: myapp
  template:
    metadata:
      labels:
        app: myapp
    spec:
      containers:
      - name: nginx-container
        image: nginx
  • spec부터는 똑같음
반응형

'쿠버네티스 > 쿠버네티스' 카테고리의 다른 글

Namespaces  (0) 2024.12.31
Kubernetes Deployment  (0) 2024.12.30
Kubernetes Pods 요약  (0) 2024.12.30
쿠버네티스 파드  (0) 2024.12.14
Kube-Proxy  (0) 2024.12.12