ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [K8s] 컨트롤러 - Replication Controller, ReplicaSet, Deployment
    도커 | 쿠버네티스 2023. 1. 24. 11:25

    Controller의 기능

    1. Auto Healing
      노드의 이상이 발생하여 파드에 이상이 생겼을 때, 다른 노드에 해당 파드를 생성한다.
    2. Auto Scaling
      과도한 부하로 인해 추가적인 파드 생성이 필요할 경우 자동으로 파드를 생성한다.
    3. Software Update
      컨테이너 이미지에 변경사항이 생겼을 때 실행되고 있는 모든 파드에 변경사항을 적용한다.
    4. Job
      일 회 또는 주기적 사용이 필요한 컨테이너 이미지를 일 회 또는 주기적으로 실행한다.

     

    Replication Controller

    지정한 pod의 수를 유지시키는 컨트롤러이다.

     

    selector를 통해 template에 있는 pod를 선택하는 기준자 → label이 선택자이다.

    요소

    • replicas - 생략하면 replicas: 1로 디폴트 실행된다.
    • selector # selector에 적혀있는 label을 모두 포함하는 템플릿을 사용하고, 관리한다.
    • template

    예제

    apiVersion: v1
    kind: ReplicationController
    metadata:
      name: RCnginx
    spec:
      replicas: 3
      selector:
        app: web
      template:
        metadata:
          name: nginx-pod
          labels:
            app: web
        spec:
          containers:
          - name: nginx-container
            image: nginx:1.14
    Replication Controller 관련 유의사항

    1. replicationcontrollers는 레이블을 통해 개수를 확인, 관리하기 때문에 템플릿이 다르더라도 레이블이 같다면 관리, 확인 대상에 포함된다.
    2. replicationcontrollers는 롤링 업데이터를 제공하지 않는다. 카나리 업데이트는 가능하다.
    → edit을 통해 이미지를 변경하는 등 업데이트를 진행하면 현재 운영 중인 pod는 변화하지 않고 새로 만들어진 pod부터 적용되어 만들어진다.
    3. selector는 같은 키에 대해 여러 값을 지정할 수 없다.

     

    ReplicaSet 

    지정한 pod의 수를 유지시키는 컨트롤러이다.

     

    selector를 통해 template에 있는 pod를 선택하는 기준자 → matchLabels이 선택자이다.

    요소

    • replicas - 생략하면 replicas: 1로 디폴트 실행된다.
    • selector # selector에 적혀있는 label을 모두 포함하는 템플릿을 사용하고, 관리한다.
      추가:
      1. matchLabels
      2. matchExpressions
    • template

    예제

    apiVersion: apps/v1 
    # 다르게 입력해야하는 이유는? 
    	# api는 이미 만들어져 있는 것을 가져와 쓰는 것으로 이름과 버전을 통해 가져와야한다.
    kind: ReplicaSet
    metadata:
      name: RSnginx
    spec:
      replicas: 3
      selector:
        matchLabels:
          app: web
        matchExpressions:
        - {key: version, operator: In, values: ["1.14","1.15"]}
      template:
        metadata:
          name: nginx-pod
          labels:
            app: web
            version: "1.14"
        spec:
          containers:
          - name: nginx-container
            image: nginx:1.14

    Deployment

    ReplicaSet의 상위 컨트롤러로 pod의 수 조절도 가능하다.

    특징 :

    • 롤링 업데이트를 한다.
    • 롤백이 가능하다.

    컨트롤러의 컨트롤 과정:

    1. Deployment 생성
    2. ReplicaSet에 요구조건 전달
    3. ReplicaSet이 파드 생성

    예시

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: DeploYnginx
    spec:
      replicas: 3
      selector:
        matchLabels:
          app: web
        matchExpressions:
        - {key: version, operator: In, values: ["1.14","1.15"]}
      strategy:
        type: RollingUpdate              *
      minReadySeconds: 10
      revisionHistoryLimit: 1            *
      template:
        metadata:
          name: nginx-pod
          labels:
            app: web
            version: "1.14"
        spec:
          containers:
          - name: nginx-container
            image: nginx:1.14
    * 업데이트 관련 yaml 요소

    spec > strategy: type
      Deployment의 업데이트 타입 지정
    spec > revisionHistoryLimit
      Deployment가 업데이트되고 과거의 ReplicaSet을 몇 개까지 남겨둘지 지정, 기본값 10개

     

     

    댓글

Designed by Tistory.