- 레플리케이션 컨트롤러는 포드가 항상 실행되도록 유지하는 쿠버네티스 리소스
- 노드가 클러스터에서 사라지는 경우 또는 노드에서 포드가 제거된 경우와 같이 어떤 이유로든 포드가 사라지면 레플리케이션컨트롤러는 누락된 포드를 감지하고 대체 포드를 만든다.
[레플리케이션컨트롤러의 동작]
레플리케이션컨트롤러는 실행 중인 포드의 목록을 지속적으로 모니터링하고 '유형'의 실제 포드 수가 원하는 수와 항상 일치하는지 확인
[컨트롤러의 연결 고리]
[레플리케이션켠트롤러의 세가지 요소]
ㅁ 레플리케이션컨트롤러의 범위에 있는 포드를 결정하는 라벨 셀렉터
ㅁ 실행해야 하는 포드의 원하는 수를 지정하는 복제본 수
ㅁ 새로운 포드 복 제본을 만들 때 사용되는 포드 템플릿
[컨트롤러의 라벨 셀렉터 또는 포드 템플릿 변경에 따른 효과]
- 라벨 셀렉터 및 포드 템플릿의 변경 사항은 기존 포드에는 영향을 끼치지 않음
- 라벨 셀렉터를 변경하면 기존 포드가 레플리케이션컨트롤러의 범위를 벗어나 컨트롤러가 해당 포드를 신경 쓰지 않음
- 레플리케이션컨트롤러는 포드를 만든 후 컨테이너의 실제 컨텐츠(컨테이너 이미지, 환경 변수, 기타 사항 등)을 신경 쓰지 않음
따라서 변경된 템플릿은 레플리케이션컨트롤러로 만든 새로운 포드에만 영향을 줌
[레플리케이션컨트롤러를 사용해 얻는 이점]
- 포드가 없는 경우 새 포드를 시작해 포드(또는 여러 포드 복제본)가 항상 실행되도록 함
- 클러스터 노드에 장애 발생 시 장애가 발생한 노드에서 실행 중인 모든 포드의 대체 복제본(복제 제어기의 제어하에 있던 복제본)을 만듬
- 수동으로 또는 자동으로 포드를 쉽게 수평 스케일링 함.
ㅇ 참고: Pod 인스턴스는 절대로 다른 노드로 재배치되지 않음. 대신 레플리케이션컨트롤러는 대체할 인스턴스와 관련이 없는 완전히 새로운 인스턴스를 만듬
[레플리케이션컨트롤러 생성]
- 레플리케이션컨트롤러의 YAML 정의: kubia-rc.yaml
apiVersion: v1
kind: ReplicationController #레플리케이션컨트롤러(RC)의 매니페스트 정의
metadata:
name: kubia #레플리케이션컨트롤러의 이름
spec:
replicas: 3 #원하는 포드 인스턴스의 수
selector:
app: kubia
template: #새 포드를 생성하는 포드 템플릿
metadata:
labels:
app: kubia
spec:
containers:
- name: kubia
image: luksa/kubia
ports;
- containerPort: 8080
$ kubectl create -f kubia-rc.yaml
replicationcontoller "kubia" created.
- 이 컨트롤러는 항상 라벨 셀렉터 app=kubia와 일치하는 세 개의 포드 인스턴스를 유지
- 포드 수가 충분하지 않다면 포드 템플릿으로 새 포드 생성
- 템플릿의 포드 라벨은 분명히 레플리카컨트롤려의 라벨 셀렉터와 일치해야 함.
ㅇ 만약 일치 하지 않으면 컨트롤러는 새로운 포드를 무기한 생성
ㅇ 새 포드를 스핀업시킨다고 해도 원하는 복제본 수에 근접한 실제 복제수가 생성되지 않기 때문
[실행중인 레플리케이션 컨트롤러 보기]
$ kubectl get pods
[레플리케이션컨트롤러의 정보 얻기]
$ kubectl get rc
[레플리케이션컨트롤러의 세부 정보 표시]
$ kubectl describe rc kubia
- 관리된 포드의 라벨 변경 시
[포드 템플릿 변경]
레플리케이션컨트롤러의 포드 템플릿은 언제든지 수정 가능
$ kubectl edit rc kubia
[수평 포드 스케일링]
ㅁ 레플리케이션컨트롤러 스케일업(확장)
기존 레플리케이션컨트롤러의 숫자를 10까지 늘리려면
$ kubectl scale rc kubia --replication=10
ㅁ 레플리케이션컨트롤러의 정의를 편집해 스케일링
$ kubectl edit rc kubia
apiVersion: v1
kind: ReplicationController
metadata
...
spec:
replicas: 3 # 3을 10으로 변경
selector:
app: kubia
...
파일을 저장하고 편집기를 닫으면 레플리케이션컨트롤러가 업데이트 되고 즉시 포드의 수를 10으로 스케일링함
$ kubectl get rc
NAME DESIRED CURRENT READY AGE
kubia 10 10 4 21m
ㅁ kubectl scale 명령으로 스케일링 다운
$ kubectl scale rc kubia --replicas=3
[레플리케이션 컨트롤러 삭제]
- kubectl delete로 레플리케이션컨트롤러를 삭제하면 해당 포드도 삭제됨
- 레플리케이션컨트롤러 삭제 시 --cascade=false 옵션을 통해 레플리케이션컨트롤러가 생성한 포드는 실행 삭제 그대로 둘수도 있음
$ kubectl delete rc kubia --cascade=false
replicationcontroller "kubia" deleted
'Kubenetes > Kubernetes Controller' 카테고리의 다른 글
StatefulSet (0) | 2021.02.13 |
---|---|
Deployment - 애플리케이션 업데이트 (0) | 2021.02.13 |
잡 리소스 및 스케줄링 (0) | 2021.02.11 |
레플리카셋(Replicaset) (0) | 2021.02.11 |