Kubernetes ReplicationController

jaeyeon ha·2026년 3월 7일

[교육] Kubernetes

목록 보기
16/34

컨트롤러

클러스터에서 파드를 생성하고 제어 및 관리

stateless

상태를 유지하지 않아도 되는 파드를 관리하는 경우 사용

  • 레플리케이션 컨트롤러
```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에 해당 변경사항 적용됨

0개의 댓글