[따배쿠] Controller

박병준·2022년 10월 20일
0

따배쿠

목록 보기
3/4

Controller란

Pod의 개수를 보장

Controller의 종류


ReplicationController

요구하는 Pod의 개수를 보장하며 Pod 집합의 실행을 항상 안정적으로 유지하는 것이 목표

  • 요구하는 Pod의 개수가 부족하면 template를 이용해 Pod를 추가
  • 요구하는 Pod 수 보다 많으면 최근에 생성된 Pod를 삭제
apiVersion: v1
kind: ReplicationController
metadata:
  name: <RC_이름>
spec:
  replicas: <배포 갯수>
  selector:
    key: value
  template:
    <컨테이너 템플릿>

replicas 수정

방법 1) $ kubectl edit rc <RC_이름>

방법 2) $ kubectl scale rc <RC_이름> --replicas=4

동작 중인 ReplicationController 확인

$ kubectl get replicationcontrollers ( = $ kubectl get rc )

특정 rc를 보다 자세히 확인

$ kubectl describe rc <RC_이름>

controller를 삭제하면 pod도 같이 삭제됩니다.


ReplicaSet

ReplicationController와 같은 역할을 하는 컨트롤러

ReplicationController 보다 풍부한 selector를 가집니다.

ex)

  selector:
    matchLabels:
      key: value
    matchExpressions:
      - {key: <키>, operator: <연산자>, values: [<값>]}

matchExpressions 연산자

  • In
    key와 values를 지정하여 key, value가 일치하는 Pod만 연결

  • NotIn
    Key는 일치하고 value는 일치하지 않는 Pod에 연결

  • Exists
    key에 맞는 label의 pod를 연결

  • DoesNotExist
    key와 다른 label의 pod를 연결


Deployment

ReplicaSet을 컨트롤해서 Pod수를 조절

deployment를 create할 때 --record옵션을 추가하면 업데이트 과정을 history로 기록합니다.

apiVersion: apps/v1
kind: Deployment
metadata:
  name: <deploy_name>
spec:
  replicas: <배포 갯수>
  selector:
    key: value
  template:
    <컨테이너 템플릿>

Rolling Update

Pod 인스턴스를 점진적으로 새로운 것으로 update하여 deployment 업데이트가 서비스 중단 없이 이루어질 수 있도록 도와줍니다.

$ kubectl set image deployment <deploy_name> <container_name>=<newversion_image>

  • update 일시정지
    $ kubectl rollout pause deployment <deploy_name>

  • update 재시작
    $ kubectl rollout resume deployment <deploy_name>

  • update 과정 확인
    $ kubectl rollout status deployment <deploy_name>

RollBack

  • update history 확인
    $ kubectl rollout history deployment <deploy_name>

  • 가장 최근 history로 롤백
    $ kubectl rollout undo deployment <deploy_name>

  • 특정 history로 롤백
    $ kubectl rollout undo deployment <deploy_name> --to-revision=<revision 번호>


DaemonSet

전체 노드에서 Pod가 한 개씩 실행되도록 보장

로그 수집기, 모니터링 에이전트와 같은 프로그램 실행시 적용

1개로 보장되기 때문에 repicas인자가 없습니다.

apiVersion: apps/v1
kind: DaemonSet
metadata:
  name: <demonset_name>
spec:

  selector:
    key: value
  template:
    <컨테이너 템플릿>

StatefulSet

Pod의 상태를 유지해주는 컨트롤러

  • Pod의 이름
  • Pod의 볼륨
apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: <statefulset_name>
spec:
  replicas: <배포 갯수>
  serviceName: <서비스 이름>
  selector:
    key: value
  template:
    <컨테이너 템플릿>

위의 3개의 replicaSet의 파드는 랜덤한 이름을 가지지만 아래 3개의 statefulSet의 파드는 순서가 있습니다.


Job

쿠버네티스는 Pod를 running 중인 상태로 유지

Batch 처리하는 Pod는 작업이 완료되면 종료

Batch 처리에 적합한 컨트롤러로 Pod의 성공적인 완료를 보장

  • 비정상 종료 시 다시 실행
  • 정상 종료 시 완료
apiVersion: batch/v1
kind: Job
metadata:
  name: <job_name>
spec:
  template:
    <컨테이너 템플릿>
    restartPolicy: <Never, OnFailure>

Job 필드

  • completions
    실행해야 할 job의 수가 몇 개 인지 ( 순차적으로 실행 )
  • parallelism
    병렬성 ( 동시 running되는 pod의 수 )
  • activeDeadlineSeconds
    지정 시간 내에 Job를 완료
    해당 시간 안에 못 끝내면, 강제로 완료
  • restartPolicy
    • OnFailure : container 비정상 종료 시, container를 restart
    • Never : container 비정상 종료 시, pod를 restart

CronJob

job 컨트롤러로 실행할 Application Pod를 주기적으로 반복해서 실행

Linux의 cronjob의 스케줄링 기능을 Job Controller에 추가한 API

다음과 같은 반복해서 실행하는 Job을 운영해야 할 떄 사용

  • Data Backup
  • Send email
  • Cleaning tasks

Cronjob Schedule: "0 3 1 * *"

  • Minutes (0 ~ 59)
  • Hours (0 ~ 23)
  • Day of the month (1 ~ 31)
  • Month (1 ~ 12)
  • Day of the week (0 ~ 6)
apiVersion: batch/v1
kind: CronJob
metadata:
  name: <cronjob_name>
spec:
  schedule: "분 시 일 월 요일"
  jobTemplate:
    <컨테이너 템플릿>
    restartPolicy: <Never, OnFailure>

CronJob 필드

  • concurrencyPolicy
    • Allow : 한 번에 여러 개의 job이 running
    • Forbid : 한 번에 한 개의 job이 running
  • successfulJobsHistoryLimit
    성공한 작업에 대한 history를 최근 n개까지만 저장

출처
https://www.youtube.com/playlist?list=PLApuRlvrZKohaBHvXAOhUD-RxD0uQ3z0c

profile
뿌셔뿌셔

0개의 댓글