ReplicaSet

zuckerfrei·2023년 6월 7일
0

Kubernetes

목록 보기
11/63
post-thumbnail


출처

1. Controller

  • k8s의 두뇌
  • 객체를 모니터링하고 그에 따른 대응을 하는 프로세스

2. Replica Controller

  • 컨트롤러의 한 종류

  • 역할

    1. 지정된 수의 파드가 항상 실행되도록 보장하는 역할(고가용성)

      • 애플리케이션에 문제가 생겨서 파드가 비정상 상태가 되면, 새로운 파드를 생성하여 대응할 수 있음
    2. 로드밸런싱

      • 부하 분산을 위해 여러 파드를 생성
      • 클러스터 내의 다른 노드에서도 파드 생성하여 부하 분산 가능
        출처
  • 생성

    예시)

    apiVersion: v1
    kind: ReplicationContoller
    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
    • 당연히 필요한 4가지 필수 섹션 apiversion, kind, metadata, spec
    • 복제시킬 파드의 정보는 spec > template 섹션에 입력함
      • 일반 파드 정의하는 것과 동일하게 작성하면 됨(apiVersion, kind 제외한 metadata, spec 내용을 가져온다는 의미)
    • 명령어
      • 생성
        kubectl create -f rc-definition.yml
      • 목록 확인
        kubectl get replicationcontroller
      • 파드 확인
        kubectl get pods

3. Replica Set

  • replica controller와 동일한 목적 but 서로 다름

    • rc 구식 기술, rs로 대체 되는 중
    • rs 사용을 권장함
  • 생성

    예시)

    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
    • rc와 거의 유사하지만 차이점 몇 가지 존재
      • apiVersion: apps/v1
      • selector, matchLabels 정의 필요
    • selector
      • replicaset이 어떤 파드를 포함해야 하는지 식별하기 위해 사용
      • replication controller도 selector를 사용할 수는 있음(필수x)
    • matchLabels
      • 여기 선언된 라벨과 일치하는 모든 파드를 관리함
      • replicaset이 생성하지 않은 파드도 라벨 조건에 부합한다면 관리할 수 있음(핵심)
      • replication controller에는 없는 기능(차이점)
      • 조건 식을 넣어서 사용 할 수 있음 ex) 여러 레이블 리스트를 조건으로 넣어서 어느 파드의 라벨이 리스트에 속하면 관리하거나, 속하지 않는 경우 등등
    • 명령어
      • 생성
        kubectl create -f replicaset-definition.yml
      • 목록 확인
        kubectl get replicaset
      • 파드 확인
        kubectl get pods

RS의 역할

  • selector를 사용하여 파드를 모니터링하고, 라벨이 일치하는지 여부를 판단
    • 라벨이 일치하는 파드가 원하는 만큼 운영중이라면 정상
    • 원하는 만큼 운영중이지 않다면 비정상 → 새로운 파드 생성
    • 그러므로 파드 생성시 라벨을 지정하는 것이 좋음

라벨과 selector개념은 k8s의 다른 많은 곳에서도 사용됨


RS로 scale 변경하기

  • 방법 1. yaml 파일 수정
    replicas: 3 -> 6으로 수정
    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: 6
      selector:
        matchLabels:
          type: front-end
    kubectl replace -f replicaset-definition.yml
  • 방법 2. scale 명령
    kubectl scale --replicas=6 -f replicaset-definition.yml
    이렇게 파일명으로 명령어 사용해도, 파일의 내용이 변경되지는 않음
    kubectl scale --replicas=6 {type} {name}
    kubectl scale --replicas=6 replicaset myapp-replicaset
    자동 확장 옵션도 추후 배울 것임

명령어 정리

생성

kubectl create -f rs-definition.yml

목록 확인

kubectl get replicaset

삭제

kubectl delete replicaset myapp-replicaset

업데이트

kubectl replace -f rs-definition.yml
kubectl scale --replicas=6 -f rs-definition.yml
profile
무설탕 음료를 좋아합니다

0개의 댓글