편집

다음을 통해 공유


Apache NiFi용 Helm 기반 배포

AKS(Azure Kubernetes Service)

이 솔루션에서는 AKS(Azure Kubernetes Service)에 NiFi를 배포할 때 Helm 차트를 사용하는 방법을 보여 줍니다. Helm은 Kubernetes 애플리케이션을 설치하고 관리하는 프로세스를 간소화합니다.

Apache®, Apache NiFi® 및 NiFi®는 미국 및/또는 기타 국가에서 Apache Software Foundation의 등록 상표 또는 상표입니다. 이러한 표시의 사용은 Apache Software Foundation에 의한 보증을 암시하지 않습니다.

아키텍처

사용자가 Kubernetes에 애플리케이션을 배포하도록 Helm 차트를 구성하는 방법을 보여 주는 다이어그램. 구성 요소는 Kubernetes에서 만드는 Pod 및 볼륨을 포함합니다.

이 아키텍처의 Visio 파일을 다운로드합니다.

워크플로

  • Helm 차트에는 values.yaml 파일이 포함됩니다. 이 파일에는 사용자가 편집할 수 있는 입력 값이 나열됩니다.

  • 사용자는 다음 값을 포함하여 차트의 설정을 조정합니다.

    • 볼륨 크기.
    • Pod 수.
    • 사용자 인증 및 권한 부여 메커니즘.
  • 사용자는 Helm install 명령을 실행하여 차트를 배포합니다.

  • Helm은 사용자 입력에 필요한 모든 변수의 값이 포함되어 있는지 여부를 확인합니다.

  • Helm은 Kubernetes에 배포할 개체를 설명하는 매니페스트를 만듭니다.

  • Helm은 매니페스트를 Kubernetes 클러스터로 보냅니다. Apache ZooKeeper는 클러스터 조정을 제공합니다.

  • Kubernetes는 지정된 개체를 만듭니다. NiFi 배포에는 다음 개체가 필요합니다.

    • 구성 개체.
    • 데이터 볼륨. Pod 스토리지는 일시적입니다.
    • 로그 볼륨.
    • 이미지를 사용하여 컨테이너에서 NiFi를 실행하는 Pod. Kubernetes는 StatefulSet 워크로드 리소스를 사용하여 Pod를 관리합니다.
    • 사용자가 NiFi UI를 사용할 수 있도록 하는 Kubernetes 서비스.
    • 클러스터가 수신을 사용하여 외부에서 UI를 사용할 수 있도록 하는 경우 수신 경로.

구성 요소

Helm 차트는 트리 구조가 있는 폴더의 파일 컬렉션입니다. 이 파일은 Kubernetes 리소스를 설명합니다. Helm 차트에서 다음 구성 요소를 구성할 수 있습니다.

ZooKeeper

ZooKeeper는 별도의 차트를 사용합니다. Kubernetes가 인큐베이터 차트 리포지토리에서 제공하는 표준 ZooKeeper 차트를 사용할 수 있습니다. 그러나 종속성에 퍼블릭 레지스트리 콘텐츠가 포함된 경우 이미지 개발 및 배포 워크플로에 위험이 도입됩니다. 이 위험을 완화하려면 가능한 경우 퍼블릭 콘텐츠의 로컬 복사본을 유지합니다. 자세한 내용은 Azure Container Registry를 사용하여 퍼블릭 콘텐츠 관리를 참조하세요.

또는 ZooKeeper를 직접 배포할 수 있습니다. 이 옵션을 선택하는 경우 NiFi를 실행하는 Pod가 ZooKeeper 서비스에 액세스할 수 있도록 ZooKeeper 서버 및 포트 번호를 제공합니다.

Kubernetes StatefulSet

Kubernetes에서 애플리케이션을 실행하려면 Pod를 실행합니다. 이 기본 단위에서는 애플리케이션의 다양한 작업을 구현하는 여러 컨테이너를 실행합니다.

Kubernetes는 NiFi와 같은 애플리케이션을 실행하는 Pod를 관리하기 위한 두 가지 솔루션을 제공합니다.

  • ReplicaSet - 지정된 시간에 실행되는 복제본 Pod의 안정적인 세트를 유지 관리합니다. 일반적으로 ReplicaSet를 사용하여 지정된 수만큼 동일 Pod의 가용성을 보장합니다.
  • StatefulSet - 상태 저장 애플리케이션을 관리하는 데 사용하는 워크로드 API 개체입니다. StatefulSet는 동일한 컨테이너 사양을 기반으로 하는 Pod를 관리합니다. Kubernetes는 동일한 사양에 따라 이 Pod를 만듭니다. 그러나 이 Pod는 서로 교환할 수 없습니다. 각 Pod에는 다시 예약을 통해 유지 관리하는 영구 식별자가 있습니다.

NiFi를 사용하여 데이터를 관리하므로 StatefulSet는 NiFi 배포에 가장 적합한 솔루션을 제공합니다.

ConfigMaps

Kubernetes는 기밀이 아닌 데이터를 저장하기 위한 ConfigMaps를 제공합니다. Kubernetes는 이러한 개체를 사용하여 nifi.properties 같은 다양한 구성 파일을 관리합니다. 애플리케이션을 실행하는 컨테이너는 탑재된 볼륨과 파일을 통해 구성 정보에 액세스합니다. ConfigMaps를 사용하여 배포 후 구성 변경 내용을 쉽게 관리할 수 있습니다.

ServiceAccount

보안 인스턴스에서 NiFi는 인증과 권한 부여를 사용합니다. NiFi는 파일 시스템 파일에서 이 정보를 관리합니다. 특히 각 클러스터 노드는 authorizations.xml 파일과 users.xml 파일을 유지 관리해야 합니다. 모든 멤버는 해당 파일에 쓸 수 있어야 합니다. 또한 클러스터의 각 노드에는 이 정보의 동일한 복사본이 있어야 합니다. 그렇지 않으면 클러스터가 동기화되지 않고 중단됩니다.

관련 조건을 충족하기 위해 클러스터의 첫 번째 멤버에서 생성되는 모든 멤버로 이러한 파일을 복사할 수 있습니다. 그런 다음, 새로운 각 멤버는 자체 복사본을 유지 관리합니다. 일반적으로 Pod에는 다른 Pod의 콘텐츠를 복사할 수 있는 권한이 없습니다. 그러나 Kubernetes ServiceAccount는 권한을 부여받는 방법을 제공합니다.

서비스

Kubernetes 서비스는 Kubernetes 클러스터의 사용자가 애플리케이션 서비스를 사용할 수 있도록 합니다. 서비스 개체를 사용하면 NiFi 클러스터의 멤버 노드가 서로 통신할 수도 있습니다. Helm 차트 배포의 경우 헤드리스 서비스와 IP 기반 서비스의 두 가지 서비스 유형을 사용합니다.

수신

수신은 클러스터 서비스에 대한 외부 액세스를 관리합니다. 특히 미리 구성된 수신 컨트롤러는 클러스터 외부에서 클러스터 내의 서비스로 HTTP 및 HTTPS 경로를 노출합니다. 컨트롤러가 트래픽을 라우팅하는 방법을 결정하는 수신 규칙을 정의할 수 있습니다. Helm 차트에는 구성의 수신 경로가 포함됩니다.

비밀

보안 NiFi 클러스터를 구성하려면 자격 증명을 저장해야 합니다. Kubernetes 비밀은 이 자격 증명을 저장하고 검색하는 안전한 방법을 제공합니다.

시나리오 정보

Apache NiFi 사용자는 일반적으로 Kubernetes에 NiFi를 배포해야 합니다. Kubernetes 배포에는 Pod, 볼륨, 서비스 등의 다양한 개체가 포함됩니다. Kubernetes가 이 개수의 개체에 대해 사용하는 매니페스트 또는 사양 파일을 관리하는 것은 어렵습니다. 다양한 구성을 사용하는 여러 NiFi 클러스터를 배포할 때 어려움이 커집니다.

Helm 차트는 매니페스트를 관리하기 위한 솔루션을 제공합니다. Helm은 Kubernetes의 패키지 관리자입니다. Helm 도구를 사용하여 Kubernetes 애플리케이션을 설치하고 관리하는 프로세스를 간소화할 수 있습니다.

차트는 Helm에서 사용하는 패키징 형식입니다. 구성 요구 사항을 차트 파일에 입력합니다. Helm은 각 차트의 기록과 버전을 추적합니다. 그런 다음, Helm은 차트를 사용하여 Kubernetes 매니페스트 파일을 생성합니다.

단일 차트에서 다양한 구성을 사용하는 애플리케이션을 배포할 수 있습니다. Azure의 NiFi를 실행하는 경우 Helm 차트를 사용하여 Kubernetes에 다른 NiFi 구성을 배포할 수 있습니다.

Apache®, Apache NiFi® 및 NiFi®는 미국 및/또는 기타 국가에서 Apache Software Foundation의 등록 상표 또는 상표입니다. 이러한 표시의 사용은 Apache Software Foundation에 의한 보증을 암시하지 않습니다.

고려 사항

이러한 고려 사항은 워크로드의 품질을 향상시키는 데 사용할 수 있는 일단의 지침 원칙인 Azure Well-Architected Framework의 핵심 요소를 구현합니다. 자세한 내용은 Microsoft Azure Well-Architected Framework를 참조하세요.

데이터 디스크

디스크 사용량의 경우 리포지토리에 스트라이프 세트의 디스크를 사용하는 것이 좋습니다. 가상 머신 확장 집합을 사용한 테스트 배포에서는 이 접근 방식이 가장 적합했습니다. nifi.properties의 다음 발췌는 디스크 사용량 구성을 보여 줍니다.

nifi.flowfile.repository.directory=/data/partition1/flowfiles
nifi.provenance.repository.directory.stripe1=/data/partition1/provenancenifi.provenance.repository.directory.stripe2=/data/partition2/provenancenifi.provenance.repository.directory.stripe3=/data/partition3/provenancenifi.content.repository.directory.stripe2=/data/partition2/content
nifi.content.repository.directory.stripe3=/data/partition3/content

이 구성은 크기가 같은 세 개의 볼륨을 사용합니다. 시스템 요구 사항에 맞게 값과 스트라이프를 조정할 수 있습니다.

배포 시나리오

퍼블릭 또는 프라이빗 부하 분산 장치나 수신 컨트롤러를 사용하여 NiFi 클러스터를 노출할 수 있습니다. 이 구현에 Helm 차트를 사용하는 경우 다음 두 가지 구성을 사용할 수 있습니다.

  • 사용자 인증 또는 권한 부여 없이 HTTP URL을 통해 액세스할 수 있는 보호되지 않은 NiFi 클러스터.
  • HTTPS URL을 통해 액세스할 수 있는 보호된 NiFi 클러스터. 이 종류의 클러스터는 TLS를 사용하여 보호됩니다. 보호된 클러스터를 구성할 때 고유한 인증서를 제공할 수 있습니다. 또는 차트에서 인증서를 생성할 수 있습니다. 이를 위해 차트는 자체 서명된 CA(인증 기관)를 제공하는 NiFi 도구 키트를 사용합니다.

TLS 통신을 통해 보호된 클러스터로 실행되도록 NiFi 클러스터를 구성하는 경우 사용자 인증을 켜야 합니다. 지원되는 다음 사용자 인증 방법 중 하나를 사용합니다.

  • 인증서 기반 사용자 인증. 사용자는 NiFi UI에 제공하는 인증서를 통해 인증됩니다. 이 종류의 사용자 인증 시스템을 사용하려면 CA의 퍼블릭 인증서를 NiFi 배포에 추가합니다.
  • LDAP 기반 사용자 인증. LDAP 서버는 사용자 자격 증명을 인증합니다. 차트를 배포할 때 LDAP 서버와 정보 트리에 관한 정보를 제공합니다.
  • OpenID 기반 사용자 인증. 사용자는 배포를 구성하기 위해 OpenID 서버에 정보를 제공합니다.

리소스 구성 및 사용량

리소스 사용량을 최적화하려면 다음 Helm 옵션을 사용하여 CPU 및 메모리 값을 구성합니다.

  • request 옵션 - 컨테이너가 요청하는 초기 리소스 양을 지정합니다.
  • limit 옵션 - 컨테이너에서 사용할 수 있는 최대 리소스 양을 지정합니다.

NiFi를 구성할 때 시스템의 메모리 구성을 고려합니다. NiFi는 Java 애플리케이션이므로 최소 및 최대 JVM(Java 가상 머신) 메모리 값과 같은 설정을 조정해야 합니다. 다음 설정을 사용합니다.

  • jvmMinMemory
  • jvmMaxMemory
  • g1ReservePercent
  • conGcThreads
  • parallelGcThreads
  • initiatingHeapOccupancyPercent

보안

우수한 보안은 중요한 데이터 및 시스템에 대한 고의적인 공격과 악용을 방어합니다. 자세한 내용은 보안 요소의 개요를 참조하세요.

Kubernetes 보안 컨텍스트를 사용하여 NiFi 이진 파일을 실행하는 기본 컨테이너의 보안을 개선합니다. 보안 컨텍스트는 해당 컨테이너와 컨테이너의 Pod에 대한 액세스를 관리합니다. 보안 컨텍스트를 통해 루트가 아닌 사용자에게 컨테이너를 실행할 수 있는 권한을 부여할 수 있습니다.

보안 컨텍스트의 다른 용도는 다음과 같습니다.

  • 컨테이너를 실행하는 OS 기반 사용자의 액세스 제한.
  • 컨테이너에 액세스할 수 있는 그룹 지정.
  • 파일 시스템에 대한 액세스 제한.

컨테이너 이미지

Kubernetes 컨테이너는 NiFi 이진 파일을 실행하는 기본 단위입니다. NiFi 클러스터를 구성하려면 이 컨테이너를 실행하는 데 사용하는 이미지에 초점을 맞춥니다. 이 이미지에 대한 두 가지 옵션이 있습니다.

  • 표준 NiFi 이미지를 사용하여 NiFi 차트를 실행합니다. Apache NiFi 커뮤니티는 해당 이미지를 제공합니다. 그러나 보호된 클러스터를 구성하려면 컨테이너에 kubectl 이진 파일을 추가해야 합니다.
  • 사용자 지정 이미지를 사용합니다. 이 접근 방식을 사용하는 경우 파일 시스템 요구 사항을 고려합니다. NiFi 이진 파일의 위치가 올바른지 확인합니다. 구성된 파일 시스템에 관한 자세한 내용은 Apache NiFi 원본 코드의 Dockerfile을 참조하세요.

참가자

Microsoft에서 이 문서를 유지 관리합니다. 원래 다음 기여자가 작성했습니다.

보안 주체 작성자:

비공개 LinkedIn 프로필을 보려면 LinkedIn에 로그인합니다.

다음 단계