본문 바로가기

⭐ Kubernetes & EKS/Kubernetes (쿠버네티스)

레플리케이션 컨트롤러

728x90
반응형

# 레플리케이션 컨트롤러란?

- 쿠버네티스 컨트롤러는 각 리소스에서 지정한 의도한 상태를 클러스터의 실제 상태와 지속적으로 비교하고 동기화하기 위해 필요한 작업을 수행한다. 의도한 상태와 실제 상태를 일치 시키기 위한 조정작업이 영원히 반복되므로 이 과정을 조정루프 라고 부른다.

- 일단 파드를 수동으로 중지하고 바로 확인해보자. 파드가 실행중인지부터 확인을 한다.
- 하나의 pod를 delete 명령어로 중지 후 상태를 확인해보면 파드가 종료되고, 새로운 파드가 생성된 것을 확인 할 수 있다. 조정 루프가 작동한 결과이다. 
- 디플로이먼트에서 해당 파드가 항상 실행중이어야 한다고 선언을 했으므로, 파드를 직접 제거하더라고 쿠버네티스는 이를 운영자의 실수로 판단하고 파드를 재 실행 한다.

- 문제가 발생했는지 모니터링하는 서비스
- 노드가 클러스터에서 사라지는 경우 대체포드를 생성
- pod의 healthy 는 레이블을 통해 조회됨

# 레플리케이션 컨트롤러의 필수요소 3가지

1. 복제본 수

2. 레이블 셀렉터

3. 포드 템플릿

# 레플리케이션 컨트롤러 실습

# yaml 파일 자성

- 쿠버네티스 공식 사이트에서 문서검색 > rc > ReplicationController | Kubernetes > kind:

gedit http-go-rc.yaml
apiVersion: v1
kind: ReplicationController
metadata:
  name: http-go
spec:
  replicas: 3
  selector:
    app: http-go
  template:
    metadata:
      name: http-go
      labels:
        app: http-go
    spec:
      containers:
      - name: http-go
        image: gasbugs/http-go
        ports:
        - containerPort: 8080

# 생성된 파일 실행하기

kubectl create -f http-go-rc.yaml

kubectl get rc

kubectl get pod

# pod 을 강제로 지워보기

kubectl get pod 에서 조회된 1개의 pod를 삭제

kubectl get pod

kubectl delete pod http-go-dxmnm

# 삭제 후 결과조회

kubectl get pod 를 해보면 1개의 pod가 새로 생성된것을 볼 수 있다. rc에 의해사 복구가 된 것이다.

# 레이블을 변경하여 테스트

kubectl get pod --show-labels

- 레이블을 삭제

kubectl label pod http-go-pz4kr app-

- 레이블이 삭제된 pod는 삭제되지는 않았지만 리스트에 남아있고, 레이블을 삭제한 pod의 레이블이 신규로 생성되어 있는것을 확인 할 수 있다.

# 어느 노드(worker)에 있는지 확인하기

kubectl get pod -o wide

# 노드의 연결을 강제로 끊어서 서비스 확인해보기

- 마스터 노드에서

kubectl get pod -w 옵션을 주어 모니터링을 수행

# work2로 이동하여 노드를 중지하기

- 버추얼 박스의 하단의 네트워크 아이콘을 클릭하여 네트워크를 중단하기

- 5분정도 유예시간을 두고 pod가 pending상태로 들어간다.

- 다시 worker2의 네트워크를 복구하게 되면 정상적으로 복구가 되는것을 볼 수 있다.

# 여러가지 조회 및 명령어

kubectl get rc http-go

kubectl rc http-go -o -wide

kubectl delete rc http-go

# 스케일링 관련

# 레플리카스를 수정하는 방법

- 첫번째 방법

kubectl scale rc http-go --replicas=5

kubectl get pod

- 두번째 방법

sudo apt install vim -y

kubectl edit rc http-go

spec: 절에 있는 replicas 갯수를 조절하면 된다.

- 수정을 하면 바로 반영이 된다.

- 세번째 방법

cp http-go-rc.yaml http-go-rc-v2.yaml

vim http-go-rc-v2.yaml

> 레플리카를 5개로 수정

kubectl apply -f http-go-rc-v2.yaml

* 스케일링 하는 3가지 방법에 대해 알아보았는데 상황에 맞게 쓰면 된다.

728x90
반응형