6.2. 머신 삭제 단계에 대한 라이프사이클 후크


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

6.2.1. 용어 및 정의

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

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

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

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

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

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

머신 Deleting 단계에는 두 가지 라이프사이클 후크가 있습니다.

  • 머신에서 지원하는 노드를 드레이닝하기 전에 preDrain 라이프사이클 후크를 확인해야 합니다.
  • 인프라 공급자에서 인스턴스를 제거하려면 먼저 preTerminate 라이프사이클 후크를 확인해야 합니다.
후크 구현 컨트롤러

후크 구현 컨트롤러는 시스템 컨트롤러가 아닌 컨트롤러이며 라이프사이클 후크와 상호 작용할 수 있습니다. 후크 구현 컨트롤러는 다음 작업 중 하나 이상을 수행할 수 있습니다.

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

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

6.2.2. 머신 삭제 처리 순서

OpenShift Container Platform 4.17에는 사전 설치 및 사전 종료 단계를 위한 머신 삭제 단계에는 두 가지 라이프사이클 후크가 있습니다. 지정된 라이프사이클 지점의 모든 후크가 제거되면 조정이 정상적으로 계속됩니다.

그림 6.1. 머신 삭제 흐름

시스템 'Deleting' 단계의 이벤트 시퀀스입니다.

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

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

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

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

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

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

    모든 preTerminate 라이프사이클 후크가 충족될 때까지 머신 상태 TerminableFalse 로 설정됩니다.

  8. 해결되지 않은 preTerminate 라이프사이클 후크가 없으며 시스템 상태 조건 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 라이프사이클 후크를 관리하는 후크 구현 컨트롤러입니다.

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

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

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

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

라이프사이클 후크 구성 예

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
3개의 라이프사이클 후크가 포함된 preTerminate 라이프사이클 후크 스탠자입니다.
3
두 개의 preTerminate 라이프사이클 후크를 관리하는 후크 구현 컨트롤러: CloudProviderSpecialCaseWaitForStorageDetach.

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

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

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

Operator는 preDrain 라이프사이클 후크를 사용하여 머신 컨트롤러 드레이닝 논리를 다른 드레이닝 컨트롤러로 교체할 수 있습니다. Operator는 드레이닝 논리를 교체하면 각 노드의 워크로드 수명 주기에 대한 유연성 및 제어가 향상됩니다.

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

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

노드를 드레이닝한 후 로그 내보내기 데몬은 로그를 중앙 집중식 로깅 시스템에 동기화하는 데 약간의 시간이 필요합니다.

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

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

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

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

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

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

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

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

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

    1. etcd Operator는 네 번째 컨트롤 플레인 머신이 클러스터에 etcd 멤버로 추가될 때까지 기다립니다. 이 새 etcd 멤버의 상태는 Running 이지만 etcd 리더에서 전체 데이터베이스 업데이트가 수신될 때까지 ready되지 않았습니다.
    2. 새 etcd 멤버가 전체 데이터베이스 업데이트를 수신하면 etcd Operator는 새 etcd 멤버를 투표 멤버로 승격하고 클러스터에서 이전 etcd 멤버를 제거합니다.

    이 전환이 완료되면 이전 etcd pod 및 해당 데이터를 제거하는 것이 안전하므로 preDrain 라이프사이클 후크가 제거됩니다.

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

    • 드레이닝에 실패하면 DrainedFalse 로 설정되고 머신 컨트롤러에서 노드를 다시 드레이닝하려고 합니다.
    • 드레이닝이 성공하면 DrainedTrue 로 설정됩니다.
  6. 컨트롤 플레인 시스템 상태 DrainedTrue 로 설정됩니다.
  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 라이프사이클 후크를 관리하는 후크 구현 컨트롤러입니다.
Red Hat logoGithubRedditYoutubeTwitter

자세한 정보

평가판, 구매 및 판매

커뮤니티

Red Hat 문서 정보

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

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

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

Red Hat 소개

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

© 2024 Red Hat, Inc.