일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- Redis
- login
- 예제
- aws
- config
- fastcampus
- 설정
- SpringBoot
- Jenkins
- gradle
- 레디스
- Docker
- 젠킨스
- redash
- Mac
- 자바
- java
- vue
- 로그인
- hive
- 클러스터
- 자동
- ec2
- Cluster
- 머신러닝
- spring
- 간단
- EMR
- Kafka
- Zeppelin
- Today
- Total
코알못
[CKA] kubernetes Controller - ReplecationController 본문
컨트롤러는 Pod의 갯수를 보장해주는 역할을 하며 아래와 같이 여러개의 컨트롤러가 있다.
- ReplicationController
- ReplicaSet
- Deployment
- DaemonSet
- StatefulSet
- Job
- CronJob
이번 시간에는 ReplicationController를 먼저 알아보도록 하자!
ReplicationControllers는 지정한 label selector를 가진 Pod 가 요청한 replica 수 보다 작다면 정의한 template 를 보고 파드를 생성하는 Controller 로 아래와 같이 정의한다.
# rc-nginx.yaml
apiVersion: v1
kind: ReplicationController
metadata:
labels:
run: rc-nginx
name: rc-nginx
spec:
replicas: 3
selector:
app: webui
template:
metadata:
name: pod-nginx
labels:
app: webui
spec:
containers:
- image: nginx:1.14
name: container-nginx
spec.replicas 에 정의한대로 3개의 파드를 생성 유지 하라는 요청이며 현재 띄워져 있는 파드중 labels의 app 이라는 key 에 대한 값이 webui인 파드가 3개가 아니라면 template 에 정의한 pod 스펙으로 파드를 띄운다는 뜻이다.
이제 해당 yaml 파일을 실행해보자!
$ kubectl create -f rc-nginx.yaml
아래와 같이 replication controller 를 조회할 수 있다.
우리는 3개를 요청(DESIRED)했고, 3개 실행(CURRENT) 되어 있으며 3개가 준비(READY) 상태이다라는 뜻이다.
$ kubectl get replicationcontrollers
or
$ kubectl get rc
NAME DESIRED CURRENT READY AGE
rc-nginx 3 3 3 8s
만약 상세 정보를 보고 싶다면 아래와 같이 describe 를 사용하여 볼 수 있으며 3개의 파드를 생성한것을 알 수 있다.
$ kubectl describe rc rc-nginx
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Normal SuccessfulCreate 26s replication-controller Created pod: rc-nginx-xdhmj
Normal SuccessfulCreate 26s replication-controller Created pod: rc-nginx-chzkt
Normal SuccessfulCreate 26s replication-controller Created pod: rc-nginx-s4nsv
파드 3개가 정상적으로 생성 되었는지 확인한다. 만들어진 파드는 controller 이름에 랜덤한 해쉬값이 붙어서 이름이 지어졌다.
$ kubectl get pods
NAME READY STATUS RESTARTS AGE
rc-nginx-chzkt 1/1 Running 0 52s
rc-nginx-s4nsv 1/1 Running 0 52s
rc-nginx-xdhmj 1/1 Running 0 52s
라벨이 정상적으로 붙어 있는지는 --show-labels 옵션을 붙여주면 확인이 가능하다.
$ kubectl get pods --show-labels
NAME READY STATUS RESTARTS AGE LABELS
rc-nginx-chzkt 1/1 Running 0 73s app=webui
rc-nginx-s4nsv 1/1 Running 0 73s app=webui
rc-nginx-xdhmj 1/1 Running 0 73s app=webui
컨트롤러는 lable로 파드를 체크 하니 만약 다른 이미지인데 라벨이 같으면 어떻게 될까?
이를 실습 해보도록 하자!
우선 redis 이미지를 생성하며 위실습과 같은 라벨로 생성한다.
# redis.yaml
apiVersion: v1
kind: Pod
metadata:
labels:
app: webui
name: redis
spec:
containers:
- image: redis
name: redis
이제 해당 redis를 생성해보자!
$ kubectl create -f redis.yaml
[node1 ~]$ kubectl get pod
NAME READY STATUS RESTARTS AGE
rc-nginx-chzkt 1/1 Running 0 3m51s
rc-nginx-s4nsv 1/1 Running 0 3m51s
rc-nginx-xdhmj 1/1 Running 0 3m51s
redis 0/1 Terminating 0 5s
그러나 생성이 되지 않고 삭제 되버린다. 왜일까?
컨트롤러가 관리하는 라벨과 같으니 관리 대상에 포함 되고 이미 파드가 3개가 만들어져 있으니 해당 파드가 생성되지 않는 것이다.
이제 replicationController의 replica 수를 3개에 4개로 변경해보자!
$ kubectl edit rc rc-nginx
...
spec:
replicas: 4
조금 지나서 파드수를 확인해보면 파드 수가 4개로 증가한것을 볼 수 있다.
$ kubectl get pods
NAME READY STATUS RESTARTS AGE
rc-nginx-chzkt 1/1 Running 0 4m58s
rc-nginx-hd9sn 1/1 Running 0 17s
rc-nginx-s4nsv 1/1 Running 0 4m58s
rc-nginx-xdhmj 1/1 Running 0 4m58s
이번에는 yaml 파일이 아닌 scale 명령을 이용하여 4개에서 3개로 변경 해보도록 한다.
$ kubectl scale rc rc-nginx --replicas=3
다시 파드수를 확인해보면 3개로 변경 되었고 가장 최근에 생성된 파드를 제거 한다.
$ kubectl get pods
NAME READY STATUS RESTARTS AGE
rc-nginx-chzkt 1/1 Running 0 5m45s
rc-nginx-s4nsv 1/1 Running 0 5m45s
rc-nginx-xdhmj 1/1 Running 0 5m45s
이제 파드의 이미지의 버전을 변경해보고 어떻게 동작하는지 보자!
$ kubectl edit rc rc-nginx
...
spec:
containers:
- image: nginx:1.15
그러나 이미 만들어진 파드의 이미지 버전은 1.14로 아무런 변동이 없다..
이는 컨트롤러가 봤을때 replica 갯수가 변동이 없기에 아무런 조치 하지 않는것이다. (관리 대상은 replica 수일뿐 그 외 변동은 관리 하지 않는다.)
$ kubectl describe pod rc-nginx-XXXX | grep -i image:
Image: nginx:1.14
이제 파드를 하나 제거해보자!
$ kubectl delete pod rc-nginx-XXX
다시 확인해보면 제거한뒤 새로 생성된 파드의 이미지 버전을 보면 변경된것을 볼 수 있다. (새 파드는 template 기준으로 생성되기에 변경된 이미지 버전을 본다.)
$ kubectl describe pod rc-nginx-XXX | grep -i image:
Image: nginx:1.15
끝!
'ETC' 카테고리의 다른 글
[CKA] kubernetes Controller - Deployment (0) | 2023.09.03 |
---|---|
[CKA] kubernetes Controller - ReplicaSet (0) | 2023.09.03 |
[CKA] kubernetes 리소스 조정(CPU,MEM) (0) | 2023.08.29 |
[CKA] Kubernetes init & infra & static container (0) | 2023.08.24 |
[CKA] Kubernetes Self-healing LivenessProbe (0) | 2023.08.15 |