6.2. 머신 삭제 단계의 라이프사이클 후크


머신 라이프사이클 후크는 일반 라이프사이클 프로세스가 중단될 수 있는 시스템의 조정 라이프사이클에 있는 지점입니다. 머신 삭제 단계에서 이러한 중단은 구성 요소가 머신 삭제 프로세스를 수정할 수 있는 기회를 제공합니다.

6.2.1. 용어 및 정의

시스템 삭제 단계에 대한 라이프사이클 후크의 동작을 이해하려면 다음 개념을 이해해야 합니다.

조정
조정은 컨트롤러가 클러스터의 실제 상태 및 오브젝트 사양의 요구 사항과 일치하는 오브젝트를 만드는 프로세스입니다.
머신 컨트롤러

머신 컨트롤러는 머신의 조정 라이프사이클을 관리합니다. 클라우드 플랫폼의 머신의 경우 머신 컨트롤러는 OpenShift Container Platform 컨트롤러와 클라우드 공급자의 플랫폼별 작동기 조합입니다.

머신 삭제 컨텍스트에서 머신 컨트롤러는 다음 작업을 수행합니다.

  • 머신에서 지원하는 노드를 드레이닝합니다.
  • 클라우드 공급자에서 머신 인스턴스를 삭제합니다.
  • Node 오브젝트를 삭제합니다.
라이프사이클 후크

라이프사이클 후크는 일반 라이프사이클 프로세스가 중단될 수 있는 오브젝트의 조정 라이프사이클에서 정의된 지점입니다. 구성 요소에서는 라이프사이클 후크를 사용하여 원하는 결과를 얻기 위해 변경 사항을 프로세스에 삽입할 수 있습니다.

머신 삭제 단계에는 다음 두 개의 라이프사이클 후크가 있습니다.

  • 사전Drain 라이프사이클 후크는 시스템에서 지원하는 노드를 드레인하기 전에 확인해야 합니다.
  • 인프라 공급자에서 인스턴스를 제거하려면 사전 종료 라이프사이클 후크를 해결해야 합니다.
hook-iECDHE 컨트롤러

후크는 라이프사이클 후크와 상호 작용할 수 있는 머신 컨트롤러가 아닌 컨트롤러입니다. 후크-i>-< 컨트롤러는 다음 작업 중 하나 이상을 수행할 수 있습니다.

  • 라이프사이클 후크를 추가합니다.
  • 라이프사이클 후크에 응답합니다.
  • 라이프사이클 후크를 제거합니다.

각 라이프사이클 후크에는 단일 후크-iECDHE 컨트롤러가 있지만 hook-iECDHE 컨트롤러는 하나 이상의 후크를 관리할 수 있습니다.

6.2.2. 머신 삭제 처리 순서

OpenShift Container Platform 4.11에는 머신 삭제 단계에는 preDrainpreTerminate 의 두 가지 라이프사이클 후크가 있습니다. 지정된 라이프사이클 포인트의 모든 후크가 제거되면 정상적으로 조정이 계속됩니다.

그림 6.1. 머신 삭제 흐름

머신 '삭제' 단계의 이벤트 시퀀스입니다.

머신 삭제 단계는 다음 순서로 진행됩니다.

  1. 다음과 같은 이유 중 하나로 기존 머신이 삭제될 예정입니다.

    • cluster-admin 권한이 있는 사용자는 oc delete machine 명령을 사용합니다.
    • 머신은 machine.openshift.io/delete-machine 주석을 가져옵니다.
    • 머신을 관리하는 머신 세트는 복제 수를 조정의 일부로 줄이기 위해 삭제를 위해 표시합니다.
    • 클러스터 자동 스케일러는 클러스터의 배포 요구 사항을 충족하는 데 불필요한 노드를 식별합니다.
    • 비정상 머신을 교체하도록 머신 상태 점검이 구성되어 있습니다.
  2. 머신은 삭제 로 표시되지만 API에는 여전히 존재합니다.
  3. preDrain 라이프사이클 후크가 있는 경우 해당 후크를 관리하는 컨트롤러에서 지정된 작업을 수행합니다.

    모든 사전 라이프사이클 후크 가 충족될 때까지 시스템 상태 조건 DrainableFalse 로 설정됩니다.

  4. 해결되지 않은 라이프사이클 후크가 없으며 시스템 상태 조건 DrainableTrue 로 설정됩니다.
  5. 머신 컨트롤러에서 머신에서 지원하는 노드를 드레이닝하려고 합니다.

    • 드레인링에 실패하면 DrainedFalse 로 설정되고 머신 컨트롤러에서 노드를 다시 드레이닝하려고 합니다.
    • 드레인링에 성공하면 DrainedTrue 로 설정됩니다.
  6. Drained 머신 상태 조건은 True 로 설정됩니다.
  7. preTerminate 라이프사이클 후크가 있는 경우 해당 후크를 관리하는 컨트롤러에서 지정된 작업을 수행합니다.

    preTerminate 라이프사이클 후크가 모두 충족될 때까지 시스템 상태 조건 TerminableFalse 로 설정됩니다.

  8. 확인되지 않은 라이프사이클 후크가 없으며 시스템 상태 조건 TerminableTrue 로 설정됩니다.
  9. 머신 컨트롤러는 인프라 공급자에서 인스턴스를 제거합니다.
  10. 머신 컨트롤러는 Node 오브젝트를 삭제합니다.

6.2.3. 라이프사이클 후크 구성 삭제

다음 YAML 스니펫에서는 머신 세트 내의 라이프사이클 후크 구성의 형식 및 배치를 보여줍니다.

preDrain 라이프사이클 후크를 보여주는 YAML 스니펫

apiVersion: machine.openshift.io/v1beta1
kind: Machine
metadata:
  ...
spec:
  lifecycleHooks:
    preDrain:
    - name: <hook_name> 1
      owner: <hook_owner> 2
  ...

1
preDrain 라이프사이클 후크의 이름입니다.
2
preDrain 라이프사이클 후크를 관리하는 hook-i>-< 컨트롤러입니다.

사전 종료 라이프사이클 후크를 보여주는 YAML 스니펫

apiVersion: machine.openshift.io/v1beta1
kind: Machine
metadata:
  ...
spec:
  lifecycleHooks:
    preTerminate:
    - name: <hook_name> 1
      owner: <hook_owner> 2
  ...

1
preTerminate 라이프사이클 후크의 이름입니다.
2
preTerminate 라이프사이클 후크를 관리하는 hook-i>-< 컨트롤러입니다.
라이프사이클 후크 구성 예

다음 예제에서는 시스템 삭제 프로세스를 중단하는 여러 가지 주요 라이프사이클 후크를 구현하는 방법을 보여줍니다.

라이프사이클 후크 구성 예

apiVersion: machine.openshift.io/v1beta1
kind: Machine
metadata:
  ...
spec:
  lifecycleHooks:
    preDrain: 1
    - name: MigrateImportantApp
      owner: my-app-migration-controller
    preTerminate: 2
    - name: BackupFileSystem
      owner: my-backup-controller
    - name: CloudProviderSpecialCase
      owner: my-custom-storage-detach-controller 3
    - name: WaitForStorageDetach
      owner: my-custom-storage-detach-controller
  ...

1
단일 라이프사이클 후크가 포함된 preDrain 라이프사이클 후크 스탠자입니다.
2
세 개의 라이프사이클 후크가 포함된 preTerminate 라이프사이클 후크 스탠자입니다.
3
사전 종료 라이프사이클 후크 두 개를 관리하는 후크 컨트롤러: CloudProviderSpecialCaseWaitForStorageDetach.

6.2.4. Operator 개발자의 머신 삭제 라이프사이클 후크 예

Operator는 시스템 삭제 단계에 라이프사이클 후크를 사용하여 시스템 삭제 프로세스를 수정할 수 있습니다. 다음 예제에서는 Operator에서 이 기능을 사용할 수 있는 방법을 보여줍니다.

preDrain 라이프사이클 후크의 사용 사례 예
능동적으로 교체 머신
Operator는 preDrain 라이프사이클 후크를 사용하여 삭제된 머신의 인스턴스를 제거하기 전에 교체 머신이 성공적으로 생성되고 클러스터에 조인되도록 할 수 있습니다. 이를 통해 머신 교체 또는 즉시 초기화하지 않는 교체 인스턴스의 중단의 영향을 완화할 수 있습니다.
사용자 정의 드레이닝 논리 구현

Operator는 preDrain 라이프사이클 후크를 사용하여 머신 컨트롤러를 드레이닝 논리를 다른 드레이닝 컨트롤러로 교체할 수 있습니다. 드레이닝 논리를 교체하면 Operator는 각 노드에서 워크로드의 라이프사이클을 보다 유연하게 제어할 수 있었습니다.

예를 들어 머신 컨트롤러 드레이닝 라이브러리는 순서를 지원하지 않지만 사용자 정의 드레이닝 공급자가 이 기능을 제공할 수 있습니다. Operator는 사용자 정의 드레인 공급자를 사용하여 클러스터 용량이 제한된 경우 서비스 중단을 최소화하도록 노드를 드레이닝하기 전에 미션 크리티컬 애플리케이션을 이동하는 우선 순위를 지정할 수 있습니다.

사전Terminate 라이프사이클 후크의 사용 사례 예
스토리지 분리 확인
Operator는 사전 종료 라이프사이클 후크 를 사용하여 머신이 인프라 공급자에서 제거되기 전에 머신에 연결된 스토리지를 분리할 수 있습니다.
로그 안정성 개선

노드를 드레이닝한 후 로그 내보내기 데몬에서 로그를 중앙 집중식 로깅 시스템에 동기화하는 데 시간이 걸립니다.

로깅 Operator는 preTerminate 라이프사이클 후크를 사용하여 노드 드레이닝 시기와 인프라 공급자에서 머신이 제거된 시점 사이에 지연을 추가할 수 있습니다. 이 지연으로 인해 Operator에서 기본 워크로드가 제거되고 더 이상 로그 백로그에 추가되지 않도록 하는 시간이 제공됩니다. 로그 백로그에 새 데이터가 추가되지 않으면 로그 내보내기에서 동기화 프로세스를 따라 이동하여 모든 애플리케이션 로그를 캡처할 수 있습니다.

6.2.5. 머신 라이프사이클 후크를 통한 쿼럼 보호

Machine API Operator를 사용하는 OpenShift Container Platform 클러스터의 경우 etcd Operator는 머신 삭제 단계에 라이프사이클 후크를 사용하여 쿼럼 보호 메커니즘을 구현합니다.

preDrain 라이프사이클 후크를 사용하면 etcd Operator에서 컨트롤 플레인 시스템의 pod가 드레이닝 및 제거되는 시기를 제어할 수 있습니다. etcd 쿼럼을 보호하기 위해 etcd Operator는 해당 멤버를 클러스터 내의 새 노드로 마이그레이션할 때까지 etcd 멤버를 제거할 수 있습니다.

이 메커니즘을 통해 etcd Operator는 etcd 쿼럼의 멤버를 정확하게 제어할 수 있으며 Machine API Operator는 etcd 클러스터에 대한 특정 운영 지식 없이도 컨트롤 플레인 머신을 안전하게 생성 및 제거할 수 있습니다.

6.2.5.1. 쿼럼 보호 처리 순서를 사용한 컨트롤 플레인 삭제

OpenShift Container Platform 4.11 이상으로 클러스터에서 컨트롤 플레인 머신이 교체되면 클러스터에 4개의 컨트롤 플레인 머신이 일시적으로 부여됩니다. 네 번째 컨트롤 플레인 노드가 클러스터에 참여하면 etcd Operator는 교체 노드에서 새 etcd 멤버를 시작합니다. etcd Operator는 이전 컨트롤 플레인 머신이 삭제로 표시된 것을 관찰하면 이전 노드에서 etcd 멤버를 중지하고 대체 etcd 멤버를 승격하여 클러스터의 쿼럼에 참여하도록 합니다.

컨트롤 플레인 머신 삭제 단계는 다음 순서로 진행됩니다.

  1. 컨트롤 플레인 시스템이 삭제될 예정입니다.
  2. 컨트롤 플레인 시스템이 삭제 단계에 들어갑니다.
  3. preDrain 라이프사이클 후크를 충족하기 위해 etcd Operator는 다음 작업을 수행합니다.

    1. etcd Operator는 중단된 컨트롤 플레인 시스템이 etcd 멤버로 클러스터에 추가될 때까지 기다립니다. 이 새 etcd 멤버는 Running 이지만 etcd 리더에서 전체 데이터베이스 업데이트를 수신 할 때까지 준비되지 않았습니다.
    2. 새 etcd 멤버가 전체 데이터베이스 업데이트를 수신하면 etcd Operator는 새 etcd 멤버를 투표 멤버로 승격하고 클러스터에서 이전 etcd 멤버를 제거합니다.

    이 전환이 완료되면 이전 etcd pod 및 해당 데이터를 제거할 수 있으므로 preDrain 라이프사이클 후크가 제거됩니다.

  4. 컨트롤 플레인 머신 상태 조건 DrainableTrue 로 설정됩니다.
  5. 머신 컨트롤러는 컨트롤 플레인 머신에서 지원하는 노드를 드레이닝하려고 합니다.

    • 드레인링에 실패하면 DrainedFalse 로 설정되고 머신 컨트롤러에서 노드를 다시 드레이닝하려고 합니다.
    • 드레인링에 성공하면 DrainedTrue 로 설정됩니다.
  6. 컨트롤 플레인 시스템 상태 조건이 True 로 설정됩니다.
  7. 다른 Operator에 preTerminate 라이프사이클 후크를 추가하지 않은 경우 컨트롤 플레인 머신 상태 조건 TerminableTrue 로 설정됩니다.
  8. 머신 컨트롤러는 인프라 공급자에서 인스턴스를 제거합니다.
  9. 머신 컨트롤러는 Node 오브젝트를 삭제합니다.

etcd 쿼럼 보호 preDrain 라이프사이클 후크를 보여주는 YAML 스니펫

apiVersion: machine.openshift.io/v1beta1
kind: Machine
metadata:
  ...
spec:
  lifecycleHooks:
    preDrain:
    - name: EtcdQuorumOperator 1
      owner: clusteroperator/etcd 2
  ...

1
preDrain 라이프사이클 후크의 이름입니다.
2
preDrain 라이프사이클 후크를 관리하는 hook-i>-< 컨트롤러입니다.
Red Hat logoGithubRedditYoutubeTwitter

자세한 정보

평가판, 구매 및 판매

커뮤니티

Red Hat 문서 정보

Red Hat을 사용하는 고객은 신뢰할 수 있는 콘텐츠가 포함된 제품과 서비스를 통해 혁신하고 목표를 달성할 수 있습니다.

보다 포괄적 수용을 위한 오픈 소스 용어 교체

Red Hat은 코드, 문서, 웹 속성에서 문제가 있는 언어를 교체하기 위해 최선을 다하고 있습니다. 자세한 내용은 다음을 참조하세요.Red Hat 블로그.

Red Hat 소개

Red Hat은 기업이 핵심 데이터 센터에서 네트워크 에지에 이르기까지 플랫폼과 환경 전반에서 더 쉽게 작업할 수 있도록 강화된 솔루션을 제공합니다.

© 2024 Red Hat, Inc.