검색

5.11. 고가용성 또는 단일 노드 클러스터 감지 및 지원

download PDF

Operator가 OpenShift Container Platform 클러스터의 HA(고가용성) 및 비HA 모드에서 원활하게 실행되도록 Operator SDK를 사용하여 클러스터의 인프라 토폴로지를 감지하고 클러스터의 토폴로지에 맞게 리소스 요구 사항을 설정할 수 있습니다.

OpenShift Container Platform 클러스터는 여러 노드를 사용하는 HA(고가용성) 모드로 구성하거나 단일 노드를 사용하는 비-HA 모드로 구성할 수 있습니다. 단일 노드 OpenShift라고도 하는 단일 노드 클러스터에는 보다 보수적인 리소스 제약 조건이 있을 수 있습니다. 따라서 단일 노드 클러스터에 설치된 Operator가 적절하게 조정되고 제대로 실행되는 것이 중요합니다.

Operator 작성자는 AWS의 Red Hat OpenShift Service에 제공된 클러스터 고가용성 모드 API에 액세스하여 Operator SDK를 사용하여 Operator가 HA 또는 비HA 모드 중 하나의 클러스터 인프라 토폴로지를 감지할 수 있습니다. 감지된 클러스터 토폴로지를 사용하여 Operator 및 관리하는 Operand 또는 워크로드 모두에 대해 리소스 요구 사항을 토폴로지에 가장 적합한 프로필로 자동 전환하는 사용자 정의 Operator 논리를 개발할 수 있습니다.

5.11.1. 클러스터 고가용성 모드 API 정보

AWS의 Red Hat OpenShift Service는 Operator가 인프라 토폴로지를 감지하는 데 사용할 수 있는 클러스터 고가용성 모드 API를 제공합니다. 인프라 API는 인프라와 관련된 클러스터 전체 정보를 보유합니다. OLM(Operator Lifecycle Manager)에서 관리하는 Operator는 고가용성 모드를 기반으로 Operand 또는 관리되는 워크로드를 다르게 구성해야 하는 경우 인프라 API를 사용할 수 있습니다.

인프라 API에서 infrastructureTopology 상태는 컨트롤 플레인 노드에서 실행되지 않는 인프라 서비스의 기대치를 표현하며, 일반적으로 master 이외의 role 값에 대한 노드 선택기로 표시됩니다. controlPlaneTopology 상태는 일반적으로 컨트롤 플레인 노드에서 실행되는 Operand에 대한 기대치를 나타냅니다.

두 상태의 기본 설정은 HighlyAvailable 로, Operator가 여러 노드 클러스터에 있는 동작을 나타냅니다. SingleReplica 설정은 단일 노드 OpenShift라고도 하는 단일 노드 클러스터에서 사용되며 Operator는 고가용성 작업을 위해 Operand를 구성하지 않아야 함을 나타냅니다.

AWS 설치 프로그램의 Red Hat OpenShift Service는 다음 규칙에 따라 클러스터의 복제본 수를 기반으로 controlPlaneTopologyinfrastructureTopology 상태 필드를 설정합니다.

  • 컨트롤 플레인 복제본 수가 3 미만이면 controlPlaneTopology 상태가 SingleReplica로 설정됩니다. 그렇지 않으면 HighlyAvailable로 설정됩니다.
  • 작업자 복제본 수가 0이면 컨트롤 플레인 노드도 작업자로 구성됩니다. 따라서 infrastructureTopology 상태는 controlPlaneTopology 상태와 동일합니다.
  • 작업자 복제본 수가 1이면 infrastructureTopologySingleReplica로 설정됩니다. 그렇지 않으면 HighlyAvailable로 설정됩니다.

5.11.2. Operator 프로젝트의 API 사용 예

Operator 작성자는 다음 예와 같이 일반적인 Kubernetes 구문 및 controller-runtime 라이브러리를 사용하여 Operator 프로젝트를 업데이트하여 Infrastructure API에 액세스할 수 있습니다.

controller-runtime 라이브러리 예

// Simple query
 nn := types.NamespacedName{
 Name: "cluster",
 }
 infraConfig := &configv1.Infrastructure{}
 err = crClient.Get(context.Background(), nn, infraConfig)
 if err != nil {
 return err
 }
 fmt.Printf("using crclient: %v\n", infraConfig.Status.ControlPlaneTopology)
 fmt.Printf("using crclient: %v\n", infraConfig.Status.InfrastructureTopology)

Kubernetes 생성 예

operatorConfigInformer := configinformer.NewSharedInformerFactoryWithOptions(configClient, 2*time.Second)
 infrastructureLister = operatorConfigInformer.Config().V1().Infrastructures().Lister()
 infraConfig, err := configClient.ConfigV1().Infrastructures().Get(context.Background(), "cluster", metav1.GetOptions{})
 if err != nil {
 return err
 }
// fmt.Printf("%v\n", infraConfig)
 fmt.Printf("%v\n", infraConfig.Status.ControlPlaneTopology)
 fmt.Printf("%v\n", infraConfig.Status.InfrastructureTopology)

Red Hat logoGithubRedditYoutubeTwitter

자세한 정보

평가판, 구매 및 판매

커뮤니티

Red Hat 문서 정보

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

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

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

Red Hat 소개

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

© 2024 Red Hat, Inc.