티스토리 뷰

Infra/Kubernetes

About Replication Controller

Jordy-torvalds 2019. 11. 8. 13:40

About Replication Controller

State: Writing

Outline

컨테이너는 운영 과정에서 장애를 일으키거나 죽더라도 포드가 자동으로 살려준다. 하지만 포드를 담고 있는 노드가 죽으면, 노드 내부에 있는 포드는 Replication Controller에 의해 관리되고 있지 않으면 살아나지 못한다.

이번 챕터를 통해 Replication Controller가 컨테이너 상태를 어떻게 모니터링 하고, 살아있지 않으면 자동으로 살려주는 처리가 어떻게 이뤄지는 지 배워볼 것이다. 또한, 포드가 무한정 실행되는 것과 단일 작업을 수행한 다음 중지하는 것 에 대한 것도 배워볼 것이다.

-

Definition

레플리케이션 컨트롤러는 일정 수 의 포드를 유지시켜주는 역할을 한다. 더 적지도 많아서도 안되게 한다.

-

Components

레플리케이션 컨트롤러는 크게 3가지로 구성된다.

  1. label Selector: 레플리케이션 컨트롤러의 범위를 설정한다.( ex. app=kubia)
  2. replica count: 운영하기 원하는 pod의 수를 명시한다.
  3. pod template : 포드 복제에 사용할 템플릿이다.
  • 1, 3은 존재하는 포드에 영향을 주지 않으며 새롭게 생설될 포드에 영향을 준다.
  • label selector를 바꿀 시 새롭게 적용된 범위 밖의 Pod는 더 이상 돌보지 않는다.
  • 레플리케이션 컨트롤러는 복제되는 포드의 내용 및 환경 변수 등의 내용은 신경쓰지 않는다. 그러므로 중간에 템플릿을 바꾸면 새롭게 생성될 포드에만 영향을 준다.

-

Advantage

레플리케이션 컨트롤러를 사용하면 얻을 수 있는 이점은 다음과 같다.

  1. Pod 가 잘 운영되는지 확인하고, 사라지거나 문제가 생길 시 즉시 복제하여 대체해준다.
  2. Node 단위로 문제가 생길 시 해당 Node 내에 레플리케이션 컨트롤러가 관리하는 Pod들을 복제하여 대체 한다.
  3. 포드의 수평적 확장이 쉬워진다.

Commands

Listing Replication Controller in operation

kubectl get rc

kubectl get replicationcontroller

rc는 replication controller의 축약어(abbreviation) 다.

Showing Replication Controller`s Detail

kubectl describe rc <name of replication controller>

-

After Deleting, Replicating Pod Example

apiVersion: v1
kind: ReplicationController
metadata:
  name: jordi2
spec:
  replicas: 3
  selector:
    app: nginx
  template:
    metadata:
      labels:
          app: nginx
    spec:
      containers:
      -   name: nginx
          image: nginx
          ports:
          - containerPort: 8080

# Replication Controller 생성 YAML
  • 작성된 Yaml 기반으로 RC 생성

kubectl create -f <yaml file name and extention>

  • 특정 Pod 삭제 명령어

kubectl delete pod <name of pod>

앞서 설명한 대로 Replication Controller는 spec.selector로 지정된 Pod를 일정한 수로 유지 시켜준다.
위의 삭제 명령어로 복제 대상인 Pod를 삭제하면 곧바로 복제 되어 생성되는 것을 확인할 수 있다.
실제로 내가 운영 중인 쿠버네티스에서 테스트 해보았다.

# 삭제 전
$ kubectl get po

NAME                READY   STATUS    RESTARTS   AGE
jordi-2z9k4         1/1     Running   0          5d22h
jordi-liveness      1/1     Running   0          10d
jordi-ng4bl         1/1     Running   0          5d22h
jordi-rb6vv         1/1     Running   0          5d22h
jordi2-j7vxh        1/1     Running   0          5d22h
jordi2-tkkfv        1/1     Running   0          5d22h
jordi2-twtw9        1/1     Running   0          5d22h
jordi3-q7nf6        1/1     Running   0          6m45s
jordi3-xrgd6        1/1     Running   0          6m45s
jordi3-zd6lm        1/1     Running   0          6m45s
kubia-manual-test   1/1     Running   0          10d

# 삭제 명렁어
$ kubectl delete po jordi3-zd6lm

# 삭제 후
$ kubectl get po

NAME                READY   STATUS    RESTARTS   AGE
jordi-2z9k4         1/1     Running   0          5d22h
jordi-liveness      1/1     Running   0          10d
jordi-ng4bl         1/1     Running   0          5d22h
jordi-rb6vv         1/1     Running   0          5d22h
jordi2-j7vxh        1/1     Running   0          5d22h
jordi2-tkkfv        1/1     Running   0          5d22h
jordi2-twtw9        1/1     Running   0          5d22h
jordi3-8ttxh        1/1     Running   0          6s
jordi3-q7nf6        1/1     Running   0          7m33s
jordi3-xrgd6        1/1     Running   0          7m33s
kubia-manual-test   1/1     Running   0          10d

# jordi3-zd6lm를 삭제한 후 age가 6s인 jordi3-8ttxh가 생겨난 것을 확인할 수 있다.**.**

After Changing Label, Replicating Pod Example

이번 예제에서는 Replication Controller가 관리 중인 Pod의 Label에 어떤 일이 일어나는지 보도록 하겠다.

# Label과 함께 Pod 목록 조회1
$ kubectl get po --show-labels
NAME                READY   STATUS    RESTARTS   AGE     LABELS
jordi-9r74l         1/1     Running   0          57s     app=jordi
jordi-hwp4r         1/1     Running   0          57s     app=jordi
jordi-liveness      1/1     Running   0          10d     <none>
jordi-skxq7         1/1     Running   0          57s     app=jordi
jordi2-j7vxh        1/1     Running   0          6d      app=nginx
jordi2-tkkfv        1/1     Running   0          6d      app=nginx
jordi2-twtw9        1/1     Running   0          6d      app=nginx
jordi3-5mlr5        1/1     Running   0          7s      app=nginx
jordi3-7nvdb        1/1     Running   0          5m10s   app=nginx
jordi3-8ttxh        1/1     Running   0          91m     app=nginx
jordi3-lggfv        1/1     Running   0          3m26s   app=bear
kubia-manual-test   1/1     Running   0          10d     <none>

# Label과 함께 Pod 목록 조회2
$ kubectl get po -L app

NAME                READY   STATUS    RESTARTS   AGE     APP
jordi-9r74l         1/1     Running   0          7m13s   jordi
jordi-hwp4r         1/1     Running   0          7m13s   jordi
jordi-liveness      1/1     Running   0          10d
jordi-skxq7         1/1     Running   0          7m13s   jordi
jordi2-j7vxh        1/1     Running   0          6d      nginx
jordi2-tkkfv        1/1     Running   0          6d      nginx
jordi2-twtw9        1/1     Running   0          6d      nginx
jordi3-5mlr5        1/1     Running   0          6m23s   nginx
jordi3-7nvdb        1/1     Running   0          11m     nginx
jordi3-8ttxh        1/1     Running   0          97m     nginx
kubia-manual-test   1/1     Running   0          10d

# Label 변경(덮어쓰기)
# 기존에 레이블이 있던 컴포넌트의 경우 --overwrite 옵션이 필수적이다.
# po는 Pods의 Abbreviation(축약어) 다.
$ kubectl label po jordi3-8ttxh app=bear --overwrite

# Pods 목록 재조회
# jordi3-8ttxh의 레이블이 nginx 에서 bear로 변경됐다.
# Replication Controller는 관리 해야할 Pods의 숫자가 하나 줄어든 것을 인식하고
# jordi3-bc9jd란 새로운 Pods를 생성한다. 
# Age 컬럼을 보면 막 생성된 Pod란 것을 알 수 있다.

NAME                READY   STATUS    RESTARTS   AGE     APP
jordi-9r74l         1/1     Running   0          10m     jordi
jordi-hwp4r         1/1     Running   0          10m     jordi
jordi-liveness      1/1     Running   0          10d
jordi-skxq7         1/1     Running   0          10m     jordi
jordi2-j7vxh        1/1     Running   0          6d      nginx
jordi2-tkkfv        1/1     Running   0          6d      nginx
jordi2-twtw9        1/1     Running   0          6d      nginx
jordi3-5mlr5        1/1     Running   0          9m15s   nginx
jordi3-7nvdb        1/1     Running   0          14m     nginx
jordi3-8ttxh        1/1     Running   0          100m    bear
jordi3-bc9jd        1/1     Running   0          7s      nginx
kubia-manual-test   1/1     Running   0          10d 

지금까지 Replication Controller와 관련하여 알아 보았다.

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
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
글 보관함