클러스터에서 파드를 생성하고 제어 및 관리
상태를 유지하지 않아도 되는 파드를 관리하는 경우 사용
- 레플리케이션 컨트롤러
```bash
[root@master ~/kube/07/rc]# kubectl api-resources | grep replication
replicationcontrollers rc v1 true ReplicationController
[root@master ~/kube/07/rc]# vi nginx-rc.yaml
[root@master ~/kube/07/rc]# cat nginx-rc.yaml
apiVersion: v1
kind: ReplicationController
metadata:
name: nginx-rc
spec:
replicas: 3
selector:
app: webui
template:
metadata:
name: nginx-pod
labels:
app: webui
spec:
containers:
- name: nginx-container
image: nginx:1.14
[root@master ~/kube/07/rc]# kubectl apply -f nginx-rc.yaml
replicationcontroller/nginx-rc created
[root@master ~/kube/07/rc]# kubectl get pod
NAME READY STATUS RESTARTS AGE
nginx-rc-hk89l 1/1 Running 0 14s
nginx-rc-js5v9 1/1 Running 0 14s
nginx-rc-pjkh2 1/1 Running 0 14s
[root@master ~/kube/07/rc]# kubectl get replicationcontrollers
NAME DESIRED CURRENT READY AGE
nginx-rc 3 3 3 48s
[root@master ~/kube/07/rc]# kubectl describe rc
Name: nginx-rc
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 111s replication-controller Created pod: nginx-rc-hk89l
Normal SuccessfulCreate 111s replication-controller Created pod: nginx-rc-pjkh2
Normal SuccessfulCreate 111s replication-controller Created pod: nginx-rc-js5v9
```
동일한 레이블을 가진 다른 pod 생성 test
```bash
[root@master ~/kube/07/rc]# vi redis.yaml
[root@master ~/kube/07/rc]# cat redis.yaml
apiVersion: v1
kind: Pod
metadata:
name: redis-pod
labels:
app: webui
spec:
containers:
- name: redis-container
image: redis
[root@master ~/kube/07/rc]# kubectl apply -f redis.yaml
pod/redis-pod created
[root@master ~/kube/07/rc]# kubectl get pod
NAME READY STATUS RESTARTS AGE
nginx-rc-hk89l 1/1 Running 0 4m51s
nginx-rc-js5v9 1/1 Running 0 4m51s
nginx-rc-pjkh2 1/1 Running 0 4m51s
redis-pod 0/1 Terminating 0 3s
[root@master ~/kube/07/rc]# kubectl get pod
NAME READY STATUS RESTARTS AGE
nginx-rc-hk89l 1/1 Running 0 6m19s
nginx-rc-js5v9 1/1 Running 0 6m19s
nginx-rc-pjkh2 1/1 Running 0 6m19s
```
▶ rc의 replicas로 생성된 pod를 제외하고 동일한 label을 가질 수 없음
▶ rc의 scale 조정으로만 동일한 label을 가진 pod를 생성할 수 있음
```bash
[root@master ~/kube/07/rc]# kubectl scale rc nginx-rc --replicas=4
replicationcontroller/nginx-rc scaled
[root@master ~/kube/07/rc]# kubectl get pod
NAME READY STATUS RESTARTS AGE
nginx-rc-gmbs7 1/1 Running 0 3s
nginx-rc-hk89l 1/1 Running 0 8m22s
nginx-rc-js5v9 1/1 Running 0 8m22s
nginx-rc-pjkh2 1/1 Running 0 8m22s
```
설정한 replicas 수를 유지 테스트
```bash
[root@master ~/kube/07/rc]# kubectl delete pod nginx-rc-gmbs7
pod "nginx-rc-gmbs7" deleted
[root@master ~/kube/07/rc]# kubectl get pod
NAME READY STATUS RESTARTS AGE
nginx-rc-b95wc 1/1 Running 0 3s
nginx-rc-hk89l 1/1 Running 0 9m16s
nginx-rc-js5v9 1/1 Running 0 9m16s
nginx-rc-pjkh2 1/1 Running 0 9m16s
```
▶ 하나를 지우더라도 replicas가 4로 설정되어 있으므로 해당 수만큼 유지하기 위해 새로운 pod 구동
```bash
[root@master ~/kube/07/rc]# kubectl scale rc nginx-rc --replicas=2
replicationcontroller/nginx-rc scaled
[root@master ~/kube/07/rc]# kubectl get pod
NAME READY STATUS RESTARTS AGE
nginx-rc-js5v9 1/1 Running 0 10m
nginx-rc-pjkh2 1/1 Running 0 10m
```
▶ replicas 수를 줄이면 해당 수를 유지하기 위해 수에 맞춰 pod 삭제
※ 삭제 기준 :: 최근 생성된 pod 부터 삭제
- 레이블 vs 셀렉터
- 레이블 :: 리소스에 붙여진 이름
- 셀렉터 :: 특정 레이블들을 그룹화
변경사항에 대해 자동으로 업데이트 및 롤백
※ ReplicationController는 롤링 업데이트/롤백을 지원하지 않음
container 이미지 nginx:1.14 → nginx:1.15로 변경
[root@master ~/kube/07/rc]# kubectl edit replicationcontrollers nginx-rc
replicationcontroller/nginx-rc edited
[root@master ~/kube/07/rc]# kubectl describe pod nginx-rc | grep Image
Image: nginx:1.14
Image ID: docker-pullable://nginx@sha256:f7988fb6c02e0ce69257d9bd9cf37ae20a60f1df7563c3a2a6abe24160306b8d
Image: nginx:1.14
Image ID: docker-pullable://nginx@sha256:f7988fb6c02e0ce69257d9bd9cf37ae20a60f1df7563c3a2a6abe24160306b8d
▶ 변경사항 실시간 적용 안됨
[root@master ~/kube/07/rc]# kubectl delete pod nginx-rc-js5v9
pod "nginx-rc-js5v9" deleted
[root@master ~/kube/07/rc]# kubectl get pod
NAME READY STATUS RESTARTS AGE
nginx-rc-jsp7d 1/1 Running 0 11s
nginx-rc-pjkh2 1/1 Running 0 32m
[root@master ~/kube/07/rc]# kubectl describe pod nginx-rc | grep Image
Image: nginx:1.15
Image ID: docker-pullable://nginx@sha256:23b4dcdf0d34d4a129755fc6f52e1c6e23bb34ea011b315d87e193033bcd1b68
Image: nginx:1.14
Image ID: docker-pullable://nginx@sha256:f7988fb6c02e0ce69257d9bd9cf37ae20a60f1df7563c3a2a6abe24160306b8d
[root@master ~/kube/07/rc]# kubectl delete pod --all
pod "nginx-rc-jsp7d" deleted
pod "nginx-rc-pjkh2" deleted
[root@master ~/kube/07/rc]# kubectl get pod
NAME READY STATUS RESTARTS AGE
nginx-rc-ps2j9 1/1 Running 0 12s
nginx-rc-qn9jm 1/1 Running 0 12s
[root@master ~/kube/07/rc]# kubectl describe pod nginx-rc | grep Image
Image: nginx:1.15
Image ID: docker-pullable://nginx@sha256:23b4dcdf0d34d4a129755fc6f52e1c6e23bb34ea011b315d87e193033bcd1b68
Image: nginx:1.15
Image ID: docker-pullable://nginx@sha256:23b4dcdf0d34d4a129755fc6f52e1c6e23bb34ea011b315d87e193033bcd1b68
▶ 새로 뜨는 pod는 해당 변경사항이 적용되어 구동됨
container 이미지 nginx:1.15 → nginx:1.14로 복구
[root@master ~/kube/07/rc]# kubectl edit rc nginx-rc
replicationcontroller/nginx-rc edited
[root@master ~/kube/07/rc]# kubectl describe pod nginx-rc | grep Image
Image: nginx:1.15
Image ID: docker-pullable://nginx@sha256:23b4dcdf0d34d4a129755fc6f52e1c6e23bb34ea011b315d87e193033bcd1b68
Image: nginx:1.15
Image ID: docker-pullable://nginx@sha256:23b4dcdf0d34d4a129755fc6f52e1c6e23bb34ea011b315d87e193033bcd1b68
▶ 복구 또한 실시간 적용 안됨
[root@master ~/kube/07/rc]# kubectl delete pod --all
pod "nginx-rc-ps2j9" deleted
pod "nginx-rc-qn9jm" deleted
[root@master ~/kube/07/rc]# kubectl get pod
NAME READY STATUS RESTARTS AGE
nginx-rc-k5mb8 1/1 Running 0 5s
nginx-rc-wpcvg 1/1 Running 0 5s
[root@master ~/kube/07/rc]# kubectl describe pod nginx-rc | grep Image
Image: nginx:1.14
Image ID: docker-pullable://nginx@sha256:f7988fb6c02e0ce69257d9bd9cf37ae20a60f1df7563c3a2a6abe24160306b8d
Image: nginx:1.14
Image ID: docker-pullable://nginx@sha256:f7988fb6c02e0ce69257d9bd9cf37ae20a60f1df7563c3a2a6abe24160306b8d
▶ 마찬가지로 새로 구동되는 pod에 해당 변경사항 적용됨