6.2. 머신 삭제 단계에 대한 라이프사이클 후크
머신 라이프사이클 후크는 일반 라이프사이클 프로세스가 중단될 수 있는 머신의 조정 라이프사이클에 있는 지점입니다. 머신 Deleting
단계에서 이러한 중단은 구성 요소가 머신 삭제 프로세스를 수정할 수 있는 기회를 제공합니다.
6.2.1. 용어 및 정의
머신 삭제 단계에 대한 라이프사이클 후크 동작을 이해하려면 다음 개념을 이해해야 합니다.
- 조정
- 조정은 컨트롤러가 클러스터의 실제 상태 및 오브젝트 사양의 요구 사항과 일치하는 오브젝트를 시도하는 프로세스입니다.
- 머신 컨트롤러
머신 컨트롤러는 머신의 조정 라이프사이클을 관리합니다. 클라우드 플랫폼의 머신의 경우 머신 컨트롤러는 클라우드 공급자의 OpenShift Container Platform 컨트롤러와 플랫폼별 액추에이터의 조합입니다.
머신 삭제 컨텍스트에서 머신 컨트롤러는 다음 작업을 수행합니다.
- 머신에서 지원하는 노드를 드레이닝합니다.
- 클라우드 공급자에서 머신 인스턴스를 삭제합니다.
-
Node
오브젝트를 삭제합니다.
- 라이프사이클 후크
라이프사이클 후크는 일반 라이프사이클 프로세스가 중단될 수 있는 오브젝트의 조정 라이프사이클에 정의된 지점입니다. 구성 요소는 라이프사이클 후크를 사용하여 프로세스에 변경 사항을 삽입하여 원하는 결과를 수행할 수 있습니다.
머신
Deleting
단계에는 두 가지 라이프사이클 후크가 있습니다.-
머신에서 지원하는 노드를 드레이닝하기 전에
preDrain
라이프사이클 후크를 확인해야 합니다. -
인프라 공급자에서 인스턴스를 제거하려면 먼저
preTerminate
라이프사이클 후크를 확인해야 합니다.
-
머신에서 지원하는 노드를 드레이닝하기 전에
- 후크 구현 컨트롤러
후크 구현 컨트롤러는 시스템 컨트롤러가 아닌 컨트롤러이며 라이프사이클 후크와 상호 작용할 수 있습니다. 후크 구현 컨트롤러는 다음 작업 중 하나 이상을 수행할 수 있습니다.
- 라이프사이클 후크를 추가합니다.
- 라이프사이클 후크에 응답합니다.
- 라이프사이클 후크를 제거합니다.
각 라이프사이클 후크에는 단일 후크 구현 컨트롤러가 있지만 후크 구현 컨트롤러는 하나 이상의 후크를 관리할 수 있습니다.
6.2.2. 머신 삭제 처리 순서
OpenShift Container Platform 4.17에는 사전 설치 및
단계를 위한 머신 삭제 단계에는 두 가지 라이프사이클 후크가 있습니다. 지정된 라이프사이클 지점의 모든 후크가 제거되면 조정이 정상적으로 계속됩니다.
사전
종료
그림 6.1. 머신 삭제 흐름
머신 Deleting
단계는 다음 순서로 진행됩니다.
다음 이유 중 하나로 기존 머신이 삭제될 예정입니다.
-
cluster-admin
권한이 있는 사용자는oc delete machine
명령을 사용합니다. -
머신에
machine.openshift.io/delete-machine
주석이 표시됩니다. - 머신을 관리하는 머신 세트는 삭제를 위해 이를 표시하여 복제본 수를 조정의 일부로 줄입니다.
- 클러스터 자동 스케일러는 클러스터의 배포 요구를 충족하기 위해 필요하지 않은 노드를 식별합니다.
- 비정상 머신을 대체하도록 머신 상태 점검이 구성되어 있습니다.
-
-
머신은
Deleting
으로 표시되었지만 여전히 API에 존재하는 삭제 단계에 들어갑니다. preDrain
라이프사이클 후크가 있는 경우 이를 관리하는 후크 구현 컨트롤러에서 지정된 작업을 수행합니다.모든
preDrain
라이프사이클 후크가 충족될 때까지 머신 상태 조건Drainable
은False
로 설정됩니다.-
해결되지 않은
preDrain
라이프사이클 후크가 없으며 시스템 상태 조건Drainable
은True
로 설정됩니다. 머신 컨트롤러는 머신에서 지원하는 노드를 드레이닝하려고 합니다.
-
드레이닝에 실패하면
Drained
가False
로 설정되고 머신 컨트롤러에서 노드를 다시 드레이닝하려고 합니다. -
드레이닝이 성공하면
Drained
가True
로 설정됩니다.
-
드레이닝에 실패하면
-
시스템 상태 조건
Drained
가True
로 설정됩니다. preTerminate
라이프사이클 후크가 있는 경우 이를 관리하는 후크 구현 컨트롤러에서 지정된 작업을 수행합니다.모든
preTerminate
라이프사이클 후크가 충족될 때까지 머신 상태Terminable
은False
로 설정됩니다.-
해결되지 않은
preTerminate
라이프사이클 후크가 없으며 시스템 상태 조건Terminable
은True
로 설정됩니다. - 머신 컨트롤러는 인프라 공급자에서 인스턴스를 제거합니다.
-
머신 컨트롤러에서
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 ...
preTerminate
라이프사이클 후크를 보여주는 YAML 스니펫
apiVersion: machine.openshift.io/v1beta1 kind: Machine metadata: ... spec: lifecycleHooks: preTerminate: - name: <hook_name> 1 owner: <hook_owner> 2 ...
라이프사이클 후크 구성의 예
다음 예제에서는 머신 삭제 프로세스를 중단하는 여러 가상 라이프사이클 후크를 구현하는 방법을 보여줍니다.
라이프사이클 후크 구성 예
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 ...
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
단계는 다음 순서로 진행됩니다.
- 삭제를 위해 컨트롤 플레인 시스템이 지정되었습니다.
-
컨트롤 플레인 시스템은
Deleting
단계에 들어갑니다. preDrain
라이프사이클 후크를 충족하기 위해 etcd Operator는 다음 작업을 수행합니다.-
etcd Operator는 네 번째 컨트롤 플레인 머신이 클러스터에 etcd 멤버로 추가될 때까지 기다립니다. 이 새 etcd 멤버의 상태는
Running
이지만 etcd 리더에서 전체 데이터베이스 업데이트가 수신될 때까지ready
되지 않았습니다. - 새 etcd 멤버가 전체 데이터베이스 업데이트를 수신하면 etcd Operator는 새 etcd 멤버를 투표 멤버로 승격하고 클러스터에서 이전 etcd 멤버를 제거합니다.
이 전환이 완료되면 이전 etcd pod 및 해당 데이터를 제거하는 것이 안전하므로
preDrain
라이프사이클 후크가 제거됩니다.-
etcd Operator는 네 번째 컨트롤 플레인 머신이 클러스터에 etcd 멤버로 추가될 때까지 기다립니다. 이 새 etcd 멤버의 상태는
-
컨트롤 플레인 시스템 상태
Drainable
은True
로 설정됩니다. 머신 컨트롤러는 컨트롤 플레인 시스템에서 지원하는 노드를 드레이닝하려고 합니다.
-
드레이닝에 실패하면
Drained
가False
로 설정되고 머신 컨트롤러에서 노드를 다시 드레이닝하려고 합니다. -
드레이닝이 성공하면
Drained
가True
로 설정됩니다.
-
드레이닝에 실패하면
-
컨트롤 플레인 시스템 상태
Drained
가True
로 설정됩니다. -
다른 Operator에서
preTerminate
라이프사이클 후크를 추가하지 않은 경우 컨트롤 플레인 머신 상태 조건Terminable
이True
로 설정됩니다. - 머신 컨트롤러는 인프라 공급자에서 인스턴스를 제거합니다.
-
머신 컨트롤러에서
Node
오브젝트를 삭제합니다.
etcd 쿼럼 보호 preDrain
라이프사이클 후크를 보여주는 YAML 스니펫
apiVersion: machine.openshift.io/v1beta1 kind: Machine metadata: ... spec: lifecycleHooks: preDrain: - name: EtcdQuorumOperator 1 owner: clusteroperator/etcd 2 ...