Replication Controller는 쿠버네티스 초기부터 있었던 가장 기본적인 컨트롤러이다.
지정한 숫자만큼 파드가 항상 클러스터 안에서 실행되도록 관리한다.
만약 Pod의 개수가 부족하다면, Replication Controller가 yaml 파일의 template에 맞춰서 새로운 파드를 생성한다.
만약 Pod의 개수가 많다면, Replication Controller 가장 최근에 생성한 Pod를 삭제한다.
파드를 실행하던 노드에 장애가 발생해서 파드가 종료되었을 때, Replication Controller를 이용해서 실행한 파드라면 클러스터 안 다른 노드에 다시 파드를 실행시킨다.
Replication Controller의 기본적인 yaml 형식
apiVersion: v1
kind: ReplicationController
metadata:
name: <RC_name>
spec:
replicas: <Pod_배포갯수>
seletor:
key: value
template:
<Container_Template>
Yaml 파일의 기본 구성은 크기 replicas, selector, template이 있다.
- replicas
.spec.replicas 에 동시에 실행하고 싶은 파드의 수로 설정함으로써 실행할 파드의 수를 지정할 수 있다.
- selector
ReplicationController는 Selector와 일치하는 label이 있는 모든 Pod를 관리한다.
지정된 경우 .spec.template.metadata.labels 은 .spec.selector 와 동일해야 하며 그렇지 않으면 API에 의해 거부된다. .spec.selector 가 지정되지 않은 경우 기본값은 .spec.template.metadata.labels 이다.
아래의 명령어를 이용해 pod의 label 정보를 볼 수 있다.
$ kubectl get pods --show-labels
- template
.spec.template 는 파드 템플릿이다. 정확하게 파드 스키마와 동일하나, 중첩되어 있고 apiVersion 혹은 kind를 갖지 않는다.
Replication Controller 생성해보기
nginx image를 가진 Pod 3개를 유지해주는 ReplicationController를 생성해보겠다.
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
$ kubectl create -f rc_nginx.yaml
replicationcontroller/rc-nginx created
아래와 같이 pod 세개가 생성된 것을 확인할 수 있다.
만약 label이 같은 파드를 생성하면, ReplicationController가 Pod의 개수가 이미 3개이므로, 최근에 생성된 Pod를 삭제한다.
redis Pod를 app=webui 라벨로 생성했을 때, 바로 종료되는 것을 확인할 수 있었다.
$ kubectl run redis --image=redis --labels=app=webui
Replicas 개수 변경해보기
rc-nginx를 편집해 설정한 replicas를 2로 바꿔보았다.
rc-nginx Pod가 2개가 된 것을 확인할 수 있었다.
$ kubectl edit rc rc-nginx
scale 명령어를 이용해서 replicas의 개수를 바꿀 수도 있다.
$ kubectl scale rc rc-nginx --replicas=2
ReplicationController template의 image 바꿔보기
만약 rc-nginx의 image 정보를 바꾼다면 어떻게 될까?
edit 명령어를 이용해서 nginx:1.14 -> nginx:1:15로 바꿔주었다.
하지만, 기본에 있던 Pod는 nginx:1.14 그대로 였다. 그래서 해당 Pod를 삭제해보았다.
$ kubectl describe rc-nginx-j8q99
ReplicationController가 Pod개수를 2개로 유지하기 위해서 template를 적용시켜 새 Pod를 생성했을 것이다.
rc-nginx-9s9bw가 새로 생성되었다.
$ kubectl delete pod rc-nginx-j8q99
pod "rc-nginx-j8q99" deleted
해당 Pod의 정보를 확인해보니 image가 nginx:1.15이다.
ReplicationController가 Pod의 개수가 부족한 경우 template를 적용시켜 새 Pod를 생성한다는 것을 확인할 수 있었다.
$ kubectl describe pod rc-nginx-9s9bw
'Kubernetes' 카테고리의 다른 글
How to completely uninstall kubernetes & install kubeadm, kubelet, kubectl (0) | 2022.02.03 |
---|---|
Controller [2] - ReplicaSet (0) | 2022.01.29 |
Upgrade Kubernetes server Version (0) | 2022.01.27 |
5-1. kubernetes pod (0) | 2022.01.21 |
kubeadm init 에러 : Get http://localhost:10248/healthz: dial tcp 127.0.0.1:10248: connect: connection refused (0) | 2022.01.18 |