Kubernetes - Controller (ReplicationController, ReplicaSet)

현시기얌·2022년 1월 13일
0

Kubernetes

목록 보기
6/23
post-custom-banner

Controller

쿠버네티스의 Controller는 Service를 관리하는데 큰 도움을 준다.
(Auto Healing, Software Update, Auto Scaling, Job)

Auto Healing

Node 위에 Pod가 있는데 이 Pod가 갑자기 다운되던가 이 Pod가 스케쥴링 되어있는 Node가 다운이 되면 Controller가 이를 즉각적으로 파악한 후 Pod를 다른 Node에 새로 만들어준다.

Auto Scaling

Pod의 Resource가 Limit 상태가 되었을 때 Controller는 이를 파악한 후 Pod를 새로 하나 만들어 줌으로써 부하를 분산시키고 Pod가 죽지 않게 해준다.
따라서 Pod는 부하 없이 안정적으로 운영할 수 있다.

Software Update

여러 Pod에 대한 Version을 Upgrade 해야 할 경우 Controller를 통해서 한번에 쉽게 할 수 있고 Upgrade 도중에 문제가 생기면 Rollback을 할 수 있게 도와준다.

Job

일시적인 작업을 해야 할 경우 Controller가 필요한 순간에만 Pod를 만들어서 해당 작업을 수행하고 삭제한다.

Replication Controller, ReplicaSet

Template

Controller와 Pod는 Service와 Pod처럼 Label과 Selector로 연결된다.
Controller를 만들 때 Template으로 Pod의 내용을 넣는데 Controller는 Pod가 죽을 때 재성성 시키기 때문에 Pod가 다운되면 template의 내용을 바탕으로 Pod를 새로 만들어준다.
이러한 특성을 사용해서 App에 대한 Upgrade를 할 수 있는데 Template에 버전이 Update된 Pod의 내용을 넣고 기존의 연결되어 있는 Pod를 다운시키면 Controller는 Template를 가지고 Pod를 재생성 하기 때문에 버전이 Upgrade된 Pod가 재생성된다.

apiVersion: v1
kind: Pod
metadata:
  name: pod-1
  labels:
    type: web
spec:
  containers:
    - name: container
      image: nginx:1.14
apiVersion: v1
kind: ReplicationController
metadata:
  name: replication-1
spec:
  replicas: 1
  selector:
    type: web
  template:
    metadata:
      name: pod-1
      labels:
        type: web
    spec:
      containers:
        - name: container
          image: nginx:1.14
          ports:
            - containterPort: 8080

Pod에 Label이 달려있고 ReplicationController에 Selector를 통해 Pod와 연결할 수 있고 template으로 Pod의 내용을 넣는다.
그리고 template안에도 Label을 넣어야 Pod를 새로 만들 때 Controller와 연결할 수 있다.

Replicas

Replicas의 개수만큼 Pod가 관리된다.
따라서 Replicas의 수가 1이였다가 3으로 증가하면 Pod의 개수도 1개에서 3개로 늘어난다. (Scale Out)
또한 Pod가 삭제되어도 Replicas의 숫자만큼 Controller에서 다시 재생성해준다.
즉 Pod의 개수를 보장해준다.

Selector

Selector는 ReplicaSet에만 있는 기능이다.
ReplicaSet에는 Selector에 matchLabels와 matchExpressions 라는 2가지의 기능이 추가되었다.
matchLabels: key와 value가 모두 같아야 연결해준다. (기존의 기능과 동일)
matchExpressions: key와 value를 detail하게 control 할 수 있다.

ex) key: ver, oprator: Exists
--> key가 ver인 모든 Pod들

apiVersion: apps/v1
kind: ReplicaSet
metadata:
  name: replica-1
spec:
  replicas: 3
  selector:
    matchLabels:
      type: web
    matchExpressions:
      - {key: ver, operator: Exists}
  template:
    matadata:
      name: pod
      ...

matchLabels에는 key와 value가 matchExpressions에는 key와 value에 대한 디테일 설정이 들어가 있다.

matchExpressions 설정

Exists : Key를 정하고 그에 맞는 Key의 값을 가지고 있는 Pod들을 연결
DoesNotExist: Key를 정하고 그 key를 가지고 있지 않는 Pod들을 연결
In : Key와 Values를 지정하고 Key에 해당하는 Values중 하나라도 만족하는 Pod들을 연결
NotIn : Key와 Values를 지정하고 Key에 해당하는 Values 모두를 만족하지 않는 Pod들을 연결

profile
현시깁니다
post-custom-banner

0개의 댓글