Controller란?
특정 애플리케이션 운영에 필요한 pod의 개수를 결정하고 보장하는 역할
쿠버네티스 API로 제공되는 컨트롤러는 7가지로 각자 특징을 가진다. (라고 따배쿠 강의에서 그랬지만 공식문서를 보니 8가지이다. kubernetes v1.23부터 TTL-after-finished controller가 추가되어 총 8가지이다. 해당 내용 공식문서는 2022년 8월에 작성되었다.)
워크로드 리소스
운영 수준의 컨테이너 오케스트레이션
kubernetes.io
Replication Controller
요구하는 pod의 개수를 보장하며 파드 집합의 실행을 항상 안정적으로 유지하는 것을 목표
- 요구하는 pod 개수보다 부족하면 template을 이용해 pod를 추가
- 요구하는 pod 수 보다 많으면 최근에 생성된 pod를 삭제
[기본구성]
- replicas
- selector (라벨셀렉터)
- template
apiVersion: v1
kind: ReplicationController
metadata:
name: <RC name>
spec:
replicas: <배포 개수>
selector:
key: value
template:
<container template>
key: value의 라벨을 보고 해당 라벨에 맞는 파드를 replicas의 개수를 보장한다. 부족하면 template를 참고하여 파드를 생성한다.
ReplicationController Definition YAML
apiVersion: v1
kind: ReplicationController
metadata:
name: rc-nginx
spec:
replicas: 3
selector:
app: webui
template:
metadata:
name: nginx-pod
labels:
app: webui
spec:
containers:
- name: nginx-container
image: nginx:1.14
ports:
- containerPort: 80
Create
kubectl create -f rc-nginx.yaml
kubectl describe rc rc-nginx
만약에 똑같은 라벨을 가지는 pod를 생성한다면 어떻게 될 것인가??
kubectl run redis --image=redis --lables=app=webui --dry-run -o yaml > redis.yaml
kubectl create -f redis.yaml
redis.yaml로 생성되는 pod는 redis 컨테이너이지만 라벨을 app=webui로 위에서 rc로 생성한 파드와 라벨을 동일하게 가지고 있다. 컨트롤러는 라벨만 모니터링하기 때문에 redis 파드는 생성과 동시에 종료된다.
replicas 옵션 수정하기
1. kubectl edit rc rc-nginx
위를 입력하면 vi editor로 옵션이 열리는데 여기서 replicas 옵션을 수정하고 :wq로 저장하고 나오면 바로 반영이 된다.
2. kubectl scale rc rc-nginx --replics=N
이렇게 하면 vi editor로 수정하지않고도 바로 수정이 된다.
활용
내일이 세일기간이다
→ 많은 트래픽이 예상됨
→ replicas를 늘려 scale out.
→ 끝나면 scale down
Rolling Update
위에서 rc-nginx.yaml의 container template에서 contrainer의 버전을 수정하면 어떻게 될까?
앞에서 말했듯이 컨트롤러는 라벨만 모니터링 하므로 전혀 변화가 일어나지 않는다.
하지만 기존에 존재하는 파드를 하나 지우게 되면 동시에 다른 파드가 새로 생성되고, 이 파드는 전에서 수정한 템플릿에 따라 생성되기 때문에 새로운 버전의 container를 가지게된다.
이미 운영 중인 pod를 차례로 지우면 차례로 새로운 컨테이너가 다시 생산될 것이다. 그 결과 서비스 중단 없이 서비스의 nginx버전을 업데이트할 수 있다. 이것을 rolling update라고 한다. 여기서 설명한 부분은 자동화 된 부분은 아니다.
Rolling Update는 서비스 중단 없이 업데이트가 가능하게 하여 비즈니스 연속성을 준다.
Delete Replication Controller
kubectl delete rc rc-nginx
이렇게 하면 kubectl이 replication controller를 삭제하기전 알아서 scale을 0으로 해서 pod를 먼저 지우고 파드를 모두 지우면 Replication Controller가 지워진다.
'Kubernetes' 카테고리의 다른 글
[Kubernetes][따배쿠 6-2] ReplicaSet (0) | 2023.04.24 |
---|---|
[Kubernetes] VM 쿠버네티스 실습환경 설정 - kubectl 설치 (0) | 2023.04.07 |
[Kubernetes] 따배쿠 5강 문제풀이 (0) | 2023.03.17 |
[Kubernetes] pod에 resource 할당하기 | 환경변수 설정과 실행 패턴 (0) | 2023.03.17 |
[Kubernetes] init & infra container / static pod (0) | 2023.03.03 |