# 레플리케이션 컨트롤러란?
- 쿠버네티스 컨트롤러는 각 리소스에서 지정한 의도한 상태를 클러스터의 실제 상태와 지속적으로 비교하고 동기화하기 위해 필요한 작업을 수행한다. 의도한 상태와 실제 상태를 일치 시키기 위한 조정작업이 영원히 반복되므로 이 과정을 조정루프 라고 부른다.
- 일단 파드를 수동으로 중지하고 바로 확인해보자. 파드가 실행중인지부터 확인을 한다.
- 하나의 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가지 방법에 대해 알아보았는데 상황에 맞게 쓰면 된다.
'⭐ Kubernetes & EKS > Kubernetes (쿠버네티스)' 카테고리의 다른 글
우분투에 비주얼 스튜디오 , 쿠버네티스 설치 및 yaml 파일 작성과 적용 (0) | 2021.09.11 |
---|---|
hostpath 컨테이너와 노드간 데이터 공유 (0) | 2021.09.11 |
쿠버네티스 - pod - 라이브니스 프로브, 레디니스 프로브 구성 (0) | 2021.09.07 |
jenkins를 yaml파일로 작성하여 실행하기 (0) | 2021.09.06 |
pod의 기본설명과 디스크럽터 작성 (0) | 2021.09.06 |