DevOps/Kubernetes

[ 쿠버네티스 입문: 90가지 예제로 배우는 컨테이너 관리 자동화 표준 ] Chapter06. 컨트롤러

noahkim_ 2021. 7. 21. 10:50

6.1 레플리케이션 컨트롤러

 

6.2 레플리카세트

지정한 숫자만큼의 파드가 항상 클러스터 안에서 실행되도록 관리.

Selector에 해당하는 Pod의 replicas 갯수를 유지함.

  • 명령어

‘Kubectl get rs’ : 사용하는 레플리카셋 목록 가져오기
‘Kubectl describe rs “레플리카셋이름” : 상세목록 정보 출력
‘Kubectl delete rs “레플리카셋이름” : 삭제하기
‘Kubectl edit rs “레플리카셋이름” : 설정 편집 ( 재설정될려면 기존의 파드들을 모두 삭제해야 함 )‘ Kubectl scale rs “레플리카셋이름” —replicas=“스케일 갯수” ‘ : 스케일링할 파드의 갯수

 

6.3 디플로이먼트

 

쿠버네티스에서 상태가 없는 앱을 배포할 때 쓰이는 컨트롤러

레플리카셋을 관리하면서 앱 배포를 더 세밀하게 관리함

(파드 수 유지 + 롤링 업데이트 + 앱 배포 프로세스 컨트롤 가능 + 앱 배포 후 이전 버전으로 롤백 가능)

 

  1. 사용하기

디플로이먼트 생성시 파드를 관리하는 레플리카셋도 생성됨

 

‘Kubectl create deploy “디플로이먼트이름”
(—image=“이미지이름” —replicas=“스케일수”)

‘Kubectl set image deployment/이름 컨테이너이름=컨테이너 이미지:버전’ : 디플로이먼트에서 컨테이너의 image 변경가능

‘Kubectl edit deploy 디플로이먼트 이름’ : 디플로이먼트 구성 편집가능

 

 

     2. 롤백하기

 

‘Kubectl rollout history deploy 디플로이먼트 이름’ : 이미지 변경 내역 확인가능

‘Kubectl rollout history deploy 디플로이먼트 이름 —revision=리비전숫자’  :  리비전의 상새내역 확인

‘Kubectl rollout undo deploy 디플로이먼트 이름’ : 이전 버전으로 롤백

‘Kubectl rollout undo deploy 디플로이먼트 이름 —to-revision=리비전숫자’ : 해당 리버전으로 되돌리기

 

 

     3. 파드 갯수 조정하기

 

‘Kubectl scale deploy 디플로이먼트 이름 —replicas=파드갯수’ : 갯수 조정하기

 

   

    4. 배포 정지, 배포 재개, 재시작하기

 

‘Kubectl rollout pause deployment/디플로이먼트 이름’ : 배포 정지

‘Kubectl rollout resume deployment/디플로이먼트 이름’ : 배포 재개

‘Kubectl rollout restart deployment/디플로이먼트 이름’ : 재시작

 

 

    5. 상태


Progressing, Complete, failed

‘Kubectl rollout status’ : 상태 확인하기

 

6.4 데몬세트

 

클러스터 전체 노드에 특정 파드를 실행할 때 사용하는 컨트롤러

해당 노드(노드당 1개 파드)에 1개씩 매칭됨

 

 

  1. 데몬세트의 파드 업데이트 방법 변경하기

데몬셋 생성 시 파드 업데이터 방법을 정의하는 필드 : spec.updateStragety. type

 

- RollingUpdate : 템플릿 변경 바로 반영
(RollingUpdateStrategy unavailable 퍼센티지 작성)

- OnDelete : 템플릿 수정하더라도 바로 적용 X. 데몬셋으로 실행한 파드를 직접 지워야 새로운 템플릿 버전의 파드가 생성됨.

- Recreate : 파드 업데이트 , 재생성하기

 

  • Fluent

로그수집기. 

 

6.5 스테이트풀셋

 

상태가 있는 파드들을 관리하는 컨트롤러

  1. 사용하기

서비스와 같이 사용함.

  • terminationGracePeriodSeconds(그레이스풀) : 실행중인 프로세스를 종료할 때 바로 종료하는 것이 아니라 하던 작업을 마무리하고 정상적으로 종료하는 것.

stateful의 이름에 0,1,2 이라는 숫자가 붙은 이름을 Pod의 이름으로 사용함.

pod은 오름차순 순서대로 생성되고 내림차순으로 삭제됨 (statefulset의 replicas값 변경시 적

용됨)

 

 

     2. 파드를 순서 없이 실행하거나 종료하기

기본 동작은 순서대로 파드를 관리하는 것이지만 spec.podManagementPolicy 필드를 이용해 순서를 없앨 수도 있음.

OrderedReady : 기본값

Parallel : 파드들을 순서 없이 병렬로 실행되거나 종료되도록 할 수 있음.

 

6.6 잡

 

실행된 후 종료해야 하는 성격의 작업을 실행시킬 때 사용하는 컨트롤러

특정 개수만큼의 파드를 정상적으로 실행 종료함을 보장함.

  1. 사용하기
    spec.restartPolicy : Never
    파드가 항상 성공적으로 끝나게 하는 옵션

    spec.backoffLimit : 잡 실행이 실패했을 떄 자동으로 최대 몇 번 까지 재시작할 것인지 설정

  2. 잡 병렬성 관리
    ‘잡 하나가 몇 개의 파드를 동시에 실행할지’를 잡 병렬성이라 함
    spec.parallelism 필드에 설정 가능 (0일시 잡 정지됨)

  3. 잡의 종류
    • 단일잡
    파드 하나만 실행됨. 파드가 정상적으로 실행 종료되면 잡 실행을 완료함.병렬처리를 하지 않음

    • 완료된 잡 개수가 있는 병렬 잡
    spec.completions 필드 값으로 설정

    • 워크 큐가 있는 병렬 잡
    spec.parallelism 필드를 양수로 설정함


  4. 비정상적으로 실행 종료된 파드 관리하기
    비정상적으로 종료된 컨테이너를 대비해 재시작 정책 설정 가능
    spec.template.spec.restartPolicy 설정
    • OnFailure : 원래실행중이던 컨테이너를 재시작
    • Never : 재시작 막음


  5. 잡 종료와 정리
    잡이 정상종료될시 파드는 새로 생성되지도 삭제되지도 않음.
    잡은 남아있고 이를 활용하여 로그분석 등 으로 활용가능함.
    • spec.activeDeadlineSeconds : 특정 시간에 잡을 종료할 경우 시간을 적어줌.
  6. 잡 패턴
    잡이 병렬로 작업 수행 시, 각 파드들은 서로 통신하면서 동작하지 않음.

6.7 크론잡

 

잡을 시간 기준으로 관리하도록 생성함.

(지정한 시간에 한번만 잡을 실행하거나 지정한 시간동안 주기적으로 잡을 반복 실행할 수 있음.)

 

  1. 사용하기

 

  • spec.schedule : 스케줄 지정. 일반적인 cron 명령 설정과 같음
  • spec.jobTemplate : 어떤 작업을 실행할 지 설정함

‘ Kubectl run (cronJob 이름) —schedule=“——“ —restart=“——“ —image=“——“ — “(명령 args)“ ‘

 

 

    2. 크론잡 설정

  • spec.startingDeadlineSeconds : 지정된 시간에 크론잡이 실행되지 못했을 때 설정한 시간까지 지나면 크론잡이 실행되지 못하게 함
  • spec.concurrentcyPolicy : 크론잡이 실행하는 잡의 동시성을 관리
    Allow / Forbid / Replaces