나그네소
kubernetes controller Replicatoin 1탄 본문
1. Replication Controller란
POD 개수를 보장 한다.
step1. 쿠버야 낭 nginx 서버 3개 실행해줘.
step2. api는etcd에서 정보를 확인한후 scheuler에게 요청을 한다.
step3.scheduler는 어느 노드에다 생성을 할지 확인을 한후 어디에다 하면되하고 Api에게 전달을 한다.
step4. API는 응답을 받고 해당 controller에게 nginx 3개를 니가 보장해라 하고 전달 한다.
step5. scheduler에게 응답닫은 노드에 각각 nginx 3개의 pod를 생성하게 된다.
step6. 혹시 하나라도 문제가 생기면 controller의 역할은 보장을 해주는 역할이니까 controller에서 문제가
생긴 pod 하나를 다시 만든다.
2. replication controller
- 요구하는 pod의 개수를 보장하면 파드집합의 실행을 항상 안정적으로 유지 하는 것을 목표
- 요구하는 pod의 개수가 부족하면 template를 이용해 pod를 추가
- 요구 하는 pod 수보다 많으면 최근에 생성된 pod를 삭제
- replication controller 기본 구성.
- selector
- replicas
- template
apiVersion:v1
kine: ReplicationController
metadata:
name: <RC_이름>
spec:
replicas: < 배포 갯수 >
selector:
key:value
template:
<컨테이너 템플릿>
selector : 쿠버테이스야 이런키 이런 value를 replica 개수많큼 몇개 운영해줘.
template : pod 템플릿
: selector의 key:value를 보고 해당 replicas 개수만큼 생성해준다.
2-1) replicationController 동작원리
쿠버야 nginx 웹 서버 3개 실행해줘.
kuberctl create rc-exam --image=nginx --replicas=3 --selector=app=webui
: 위와 같이 실행 요청을 하게 되면 controller에서 라벨 app:webui로 pod를 3개 실행 한다.
[Replication Controller Definition]
Pod-definition(일반 POD)
|
replication contorller definition
|
apiVersion: v1
kind: Pod
metadata:
name: nginx-pod
labels:
app: webui
spec:
containers:
- name: nginx-container
image: nginx:1.14
|
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
|
- 컨트로러는 selector를 보고 개수만큼 보장하려고 한다.
- app:webui 라벨를 보고 template의 pod를 replica 개수만큼 보장하고 없으면 만들어줘.
(템플릿에는 pod를 생성하는 것이 들어가 있다.) -
반드시 selector에 있는 라벨이(key:value) 템플릿의 labels에 포함되어야 한다. (중요)
3. replication example
rc-nginx.yaml
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
3-1) POD 확인
kuber-master:/home/son_kube/tmp] k get rc
NAME DESIRED CURRENT READY AGE
rc-nginx 3 3 3 8s
kuber-master:/home/son_kube/tmp] k get rc -o wide
NAME DESIRED CURRENT READY AGE CONTAINERS IMAGES SELECTOR
rc-nginx 3 3 3 14s nginx-container nginx:1.14 app=webui
kuber-master:/home/son_kube] k get pods -o wide --watch
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
rc-nginx-62crw 0/1 Pending 0 0s <none> <none> <none> <none>
rc-nginx-62crw 0/1 Pending 0 0s <none> kuber-node1 <none> <none>
rc-nginx-rgvsd 0/1 Pending 0 0s <none> <none> <none> <none>
rc-nginx-8jj8v 0/1 Pending 0 0s <none> <none> <none> <none>
rc-nginx-rgvsd 0/1 Pending 0 0s <none> kuber-node2 <none> <none>
rc-nginx-8jj8v 0/1 Pending 0 0s <none> kuber-node1 <none> <none>
rc-nginx-62crw 0/1 ContainerCreating 0 0s <none> kuber-node1 <none> <none>
rc-nginx-rgvsd 0/1 ContainerCreating 0 0s <none> kuber-node2 <none> <none>
rc-nginx-8jj8v 0/1 ContainerCreating 0 0s <none> kuber-node1 <none> <none>
rc-nginx-rgvsd 1/1 Running 0 1s 10.244.2.53 kuber-node2 <none> <none>
rc-nginx-62crw 1/1 Running 0 1s 10.244.1.241 kuber-node1 <none> <none>
rc-nginx-8jj8v 1/1 Running 0 1s 10.244.1.242 kuber-node1 <none> <none>
kuber-master:/home/son_kube/tmp] k describe rc rc-nginx
Name: rc-nginx
Namespace: default
Selector: app=webui
Labels: app=webui
Annotations: <none>
Replicas: 3 current / 3 desired
Pods Status: 3 Running / 0 Waiting / 0 Succeeded / 0 Failed
Pod Template:
Labels: app=webui
Containers:
nginx-container:
Image: nginx:1.14
Port: <none>
Host Port: <none>
Environment: <none>
Mounts: <none>
Volumes: <none>
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Normal SuccessfulCreate 67s replication-controller Created pod: rc-nginx-62crw
Normal SuccessfulCreate 67s replication-controller Created pod: rc-nginx-8jj8v
Normal SuccessfulCreate 67s replication-controller Created pod: rc-nginx-rgvsd
4. Replication Controller Test
kuber-master:/home/son_kube/tmp] k run redis --image=redis --dry-run
// --dry-run pod 생성 하지 않고 정상 적인 명령어 인지 체크
kuber-master:/home/son_kube/tmp] k run redis --image=redis --labels=app=webui --dry-run
kuber-master:/home/son_kube/tmp] k run redis --image=redis --labels=app=webui --dry-run -o yaml > redis.yaml
// pod 생성 구문을 yaml으로 저장한다.
kuber-master:/home/son_kube/tmp] k get pod --show-labels //현재 상태
NAME READY STATUS RESTARTS AGE LABELS
rc-nginx-62crw 1/1 Running 0 8m36s app=webui
rc-nginx-8jj8v 1/1 Running 0 8m36s app=webui
rc-nginx-rgvsd 1/1 Running 0 8m36s app=webui
kuber-master:/home/son_kube/tmp] k apply -f redis.yaml
pod/redis created
kuber-master:/home/son_kube] k get pods -o wide --watch
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
rc-nginx-62crw 1/1 Running 0 11m 10.244.1.241 kuber-node1 <none> <none>
rc-nginx-8jj8v 1/1 Running 0 11m 10.244.1.242 kuber-node1 <none> <none>
rc-nginx-rgvsd 1/1 Running 0 11m 10.244.2.53 kuber-node2 <none> <none>
redis 0/1 Terminating 0 4s <none> kuber-node2 <none> <none>
redis 1/1 Terminating 0 9s 10.244.2.54 kuber-node2 <none> <none>
redis 0/1 Terminating 0 10s 10.244.2.54 kuber-node2 <none> <none>
redis 0/1 Terminating 0 10s 10.244.2.54 kuber-node2 <none> <none>
redis 0/1 Terminating 0 10s 10.244.2.54 kuber-node2 <none> <none>
: controller는 app:webui 라벨을 3개만 유지시키고 있기에 새로 redis.yaml에서 app:webui 라벨로 pod을 생성 하려고
할 때 Terminating 되는 것을 알 수 있다.
4-1) Replication Edit
kuber-master:/home/son_kube/tmp] k edit rc rc-nginx
replicas: 3->4
: 위의 값을 변경하여 pod를 변경 할 수 있다.(또는 축소 할 수도 있다.)
: 위의 값을 변경하여 pod를 변경 할 수 있다.(또는 축소 할 수도 있다.)
* command
kubectl scale rc rc-nginx --replicas=2
example)
kuber-master:/home/son_kube/tmp] k get rc
NAME DESIRED CURRENT READY AGE
rc-nginx 4 4 4 14m
kuber-master:/home/son_kube/tmp] kubectl scale rc rc-nginx --replicas=2
replicationcontroller/rc-nginx scaled
kuber-master:/home/son_kube/tmp] k get rc
NAME DESIRED CURRENT READY AGE
rc-nginx 2 2 2 15m
'Cloud > Kubernetes' 카테고리의 다른 글
kubernetes controller DEPLOYMENT 3탄 (0) | 2022.11.18 |
---|---|
kubernetes controller ReplicaSet 2탄 (0) | 2022.11.18 |
kubernetest Controller 종류 (0) | 2022.11.18 |
Kubernetes POD 환경 변수 설정 하기 (0) | 2022.11.18 |
kubernetes Pod Resource 조절 하기 (0) | 2022.11.17 |