Skip to main content
AI Data Engine
본 한국어 번역은 사용자 편의를 위해 제공되는 기계 번역입니다. 영어 버전과 한국어 버전이 서로 어긋나는 경우에는 언제나 영어 버전이 우선합니다.

AI Data Engine 멀티노드 배포 필수 조건

기여자 netapp-dbagwell

AI Data Engine(AIDE) 멀티 노드 배포를 위해서는 자체 Kubernetes 클러스터를 준비해야 합니다. 설치 프로그램은 기존 클러스터에 AI Data Engine을 배포하며, 이를 프로비저닝하거나 관리하지 않습니다. 설치 명령을 실행하기 전에 클러스터, 노드, 스토리지 및 설치 프로그램 호스트를 준비하십시오.

설치 명령을 실행하기 전에 환경이 다음 섹션의 요구 사항을 충족해야 합니다. 노드 크기 조정, 지원되는 Kubernetes 버전 및 네트워크 포트에 대한 자세한 내용은 "AIDE 요구 사항"을(를) 참조하십시오.

설치 호스트

설치 호스트는 경량 관리 머신입니다. AI Data Engine 워크로드를 실행하지 않습니다. bash가 있고 Kubernetes API 서버에 대한 네트워크 액세스가 가능한 Linux 머신이어야 합니다. macOS는 지원되지 않습니다. 이 페이지에서 셸 명령을 실행하기 전에 bash로 전환하십시오.

  • 대상 클러스터에 대한 유효한 kubeconfig가 있습니다. --kubeconfig 옵션이나 KUBECONFIG 환경 변수를 사용하여 지정하십시오. 제공하지 않으면 설치 프로그램에서 입력하라는 메시지가 표시됩니다. 현재 컨텍스트는 배포하려는 클러스터를 가리켜야 합니다. 이를 확인하거나 변경하려면 kubectl config current-context 또는 `kubectl config use-context <name>`를 실행하십시오.

  • kubeconfig 사용자는 대상 클러스터에서 cluster-admin 또는 그에 상응하는 권한을 가지고 있습니다. 최소한 해당 사용자는 다음 작업을 수행할 수 있습니다.

    • 네임스페이스, StorageClasses 및 노드를 읽습니다.

    • 사용자 지정 리소스를 적용합니다.

    • PersistentVolumes, PersistentVolumeClaims, Secrets, ConfigMaps, Deployments, Services, StatefulSets, DaemonSets, CronJobs 및 Jobs를 생성합니다.

    • CustomResourceDefinitions를 생성하고 업데이트합니다. 설치 프로그램은 aidecomponents, aideservices 및 aideoperators 정의를 설치합니다.

    • ClusterRoles 및 ClusterRoleBindings를 생성합니다.

    • aide 네임스페이스에 ServiceAccounts, Roles 및 RoleBindings를 생성합니다.

  • 설치 호스트는 Linux를 실행하며 bash 4.0 이상, curl 및 tar가 설치되어 있습니다.

  • 설치 프로그램은 자동으로 helm, kubectl 및 `jq`을(를) 툴 디렉터리에 다운로드합니다. `kubectl`가 이미 `PATH`에 있는 경우, 설치 프로그램은 해당 복사본을 사용하며 새로 다운로드하지 않습니다. 이러한 툴을 미리 설치할 필요는 없습니다. 설치 프로그램은 이를 `PATH`에 추가하지 않습니다.

  • 기본 툴 디렉터리는 /opt/netapp/aide/.aide-installer-tools`입니다. 설치 프로그램은 설치 로그도 해당 디렉터리에 기록합니다. 기본 디렉터리에 쓰기 권한이 있는 경우 `--tools-dir 옵션을 생략할 수 있습니다.

    • 기본 디렉터리에 쓰기 권한이 없고 터미널에서 설치 프로그램을 실행하는 경우, 설치 프로그램에서 다른 디렉터리를 지정하라는 메시지가 나타납니다. `$HOME/.cache/netapp/aide`을(를) 사용하려면 Enter 키를 누르십시오.

    • 기본 디렉터리에 쓸 수 없고 설치 프로그램에 터미널이 없는 경우 설치가 중지됩니다. --tools-dir 옵션을 사용하여 소유하고 있는 디렉터리를 지정하십시오(예: --tools-dir "$HOME/.aide-installer-tools").

  • 클러스터에 액세스할 수 있는 사용자로 설치 프로그램을 실행합니다.

관리형 클러스터 kubeconfig는 현재 사용자의 클라우드 CLI 로그인 정보를 읽는 exec 자격 증명 플러그인을 통해 인증합니다. 해당 로그인 정보를 가진 사용자로 설치 프로그램을 실행하십시오. AKS 관련 지침은 AKS 요구 사항을 참조하십시오.

시작 시 설치 프로그램은 kubectl config current-context 및 `kubectl cluster-info`를 실행하며, 두 명령 중 하나라도 실패하면 중지됩니다. 설치 프로그램에 사용하는 것과 동일한 사용자 및 권한으로 이 명령을 먼저 실행하십시오. 또한 설치 프로그램은 다음 섹션에서 노드, NFS 및 클러스터 준비를 완료했는지 확인하도록 요청합니다.

Kubernetes 클러스터

  • RKE2, OpenShift 또는 Azure Kubernetes Service(AKS)를 실행하고 "지원되는 Kubernetes 버전"을(를) 충족하는 Kubernetes 클러스터를 제공합니다.

  • AI Data Engine 구성 요소는 레이블을 지정한 노드에서 실행됩니다. 노드 레이블을(를) 참조하십시오. 해당 노드의 다른 워크로드는 호스트 포트 80 및 443을 사용할 수 없습니다.

  • 클러스터에는 구성을 위한 충분한 할당 가능 용량을 갖춘 노드가 3개 이상 있습니다. "노드 크기 조정"을(를) 참조하십시오.

  • 모든 노드는 NetApp 컨테이너 레지스트리에 대한 아웃바운드 네트워크 액세스 권한을 가지고 있습니다. "아웃바운드 인터넷 액세스"을(를) 참조하십시오. 이미지를 가져올 수 있는 위치를 제한하는 경우 NetApp 레지스트리를 허용하십시오.

  • 환경에 아웃바운드 프록시가 필요한 경우 "AI Data Engine용 프록시에 대해 알아보기"을(를) 참조하십시오. 모든 노드에서 컨테이너 런타임 프록시 및 CA 인증서 신뢰 구성을 포함하여 프록시를 사용하여 배포하려면 "프록시를 사용하여 다중 노드 배포로 AI Data Engine 배포"을(를) 따르십시오.

노드 준비

AI Data Engine 워크로드를 스케줄링하는 모든 노드에서 다음 단계를 완료하십시오.

커널 버전

공유 구성 볼륨에 필요한 처리량을 제공하는 nconnect NFS 마운트 옵션에는 Linux 커널 5.3 이상이 권장됩니다. 이 권장 사항을 충족하는 배포판 및 버전에 대해서는 "AIDE 요구 사항"의 Linux 커널 가이드를 참조하십시오. 커널 버전을 확인하려면 `uname -r`을(를) 실행하십시오.

커널 매개변수

  1. `net.core.somaxconn`의 값을 확인하십시오:

    sysctl net.core.somaxconn

    값이 511 이상이면 아무 조치도 필요하지 않습니다. 값이 더 낮은 경우 계속 진행하기 전에 NetApp 지원팀에 문의하십시오.

  2. `/etc/sysctl.conf`에 다음 줄을 추가합니다:

    vm.max_map_count=262144
    fs.inotify.max_user_instances=1280
    sunrpc.min_resvport=1000

    노드에 이미 vm.max_map_count 또는 `fs.inotify.max_user_instances`에 대한 더 높은 값이 있는 경우 더 높은 값을 유지합니다. 항상 `sunrpc.min_resvport=1000`를 설정합니다.

  3. sunrpc 모듈을 로드하고, 영구적으로 저장한 다음, 설정을 적용합니다:

    sudo modprobe sunrpc
    echo "sunrpc" | sudo tee /etc/modules-load.d/aide-sunrpc.conf
    sudo sysctl -p
  4. 각 노드의 설정을 확인하십시오:

    lsmod | grep sunrpc
    cat /etc/modules-load.d/aide-sunrpc.conf
    sysctl vm.max_map_count sunrpc.min_resvport
    `sunrpc` 모듈이 로드되어 있어야 하고, 파일에는  `sunrpc`이(가) 포함되어야 하며,  `vm.max_map_count`은(는) 최소 262144이어야 하고,  `sunrpc.min_resvport`은(는) 1000이어야 합니다.  `sysctl -p`이(가) 키에 대해  `cannot stat /proc/sys/...`을(를) 보고하는 경우, 해당 설정에 대한 커널 모듈(예:  `sudo modprobe sunrpc`)을 로드하고  `sudo sysctl -p`을(를) 다시 실행하십시오.

호스트 디렉터리

다음 디렉터리를 생성하고 소유권 및 권한을 설정하십시오:

sudo mkdir -p /var/lib/netapp/aide /var/lib/netapp/aide/filebeat /var/lib/netapp/aide/elasticsearch /var/log/netapp/aide
sudo chown 4321:4321 /var/lib/netapp/aide /var/lib/netapp/aide/filebeat /var/lib/netapp/aide/elasticsearch /var/log/netapp/aide
sudo chmod 775 /var/lib/netapp/aide /var/lib/netapp/aide/filebeat /var/lib/netapp/aide/elasticsearch /var/log/netapp/aide

Kerberos CIFS/SMB 지원(선택 사항)

`cifs-utils` 패키지는 AI Data Engine 워크로드를 예약하는 모든 노드에서 Kerberos 기반 CIFS/SMB 스캔에만 필요합니다. NTLM 전용 CIFS를 사용하거나 SMB 공유를 스캔하지 않는 경우에는 이 단계를 건너뛰십시오.
RHEL
sudo dnf install -y cifs-utils
Ubuntu
sudo apt-get update
sudo apt-get install -y cifs-utils

NFS 서버

AI Data Engine 구성 볼륨은 NFS를 기반으로 합니다. 설치 프로그램을 실행하기 전에 NFS 서버와 내보내기를 제공해야 합니다. 이 두 가지가 없으면 설치를 진행할 수 없습니다. 설치 명령을 실행할 때 NFS 서버 호스트 이름 또는 IP 주소는 --nfs-server <host>(으)로, 내보내기 경로는 --nfs-data-share <path>(으)로 지정하십시오.

배포 크기 및 스토리지 성능 요구 사항은 "노드 크기 조정"을 참조하십시오.

요구 사항 가치

내보내기 액세스

읽기/쓰기 가능하며 모든 Kubernetes 노드 IP 주소에서 접근 가능합니다.

소유자

UID:GID 4321:4321

권한 모드

0770

스쿼시

UID 4321을 다른 사용자에게 다시 매핑하지 마십시오. UID 4321은 마운트된 내보내기에 대한 쓰기 권한을 유지해야 합니다.

내보내기를 준비하려면 NFS 서버 또는 내보내기가 마운트된 호스트에서 다음 명령을 실행하십시오:

sudo mkdir -p <nfs-data-share>
sudo chown 4321:4321 <nfs-data-share>
sudo chmod 0770 <nfs-data-share>

설치 프로그램은 최초 설치 시 export 폴더 아래에 필요한 하위 디렉토리를 생성합니다.

클러스터 구성

네임스페이스

설치 프로그램을 실행하기 전에 aide Kubernetes 네임스페이스가 있어야 합니다. 설치 프로그램은 이를 생성하지 않습니다. AI Data Engine은 aide 네임스페이스만 지원합니다.

kubectl create namespace aide

노드 레이블

AI Data Engine은 노드 레이블을 사용하여 구성 요소를 스케줄링합니다. AI Data Engine 워크로드를 스케줄링하는 노드에 다음 레이블을 적용하십시오. 각 레이블은 최소 3개의 노드에 있어야 합니다. 일부 구성 크기는 더 많은 노드를 사용하므로 워크로드를 스케줄링하는 모든 노드에 레이블을 적용하십시오. `<node-name>`을(를) 각 노드의 이름으로 바꾸십시오.

설치 프로그램은 이러한 레이블을 적용하거나 확인하지 않습니다. 설치 프로그램을 실행하기 전에 노드에 레이블을 지정해야 합니다. 레이블이 누락된 경우 AI Data Engine 파드는 나중에 Pending 상태를 유지합니다.

다음 명령은 모든 레이블을 노드에 적용합니다:

kubectl label node <node-name> \
  3rdparty-aide-nginx=true 3rdparty-aide-postgres=true \
  3rdparty-aide-rabbitmq=true 3rdparty-aide-redis=true \
  3rdparty-aide-es=true 3rdparty-aide-kafka=true \
  3rdparty-aide-logstash=true 3rdparty-aide-filebeat=true \
  3rdparty-aide-k8s-event-exporter=true 3rdparty-aide-telegraf=true \
  microservices-aide=true --overwrite

테인트와 톨러레이션

이 단계는 선택 사항입니다. AI Data Engine이 다른 워크로드와 클러스터를 공유하는 경우에만 완료하십시오.

공유 클러스터에서는 일반적으로 AI Data Engine용으로 노드를 예약합니다. 다른 워크로드가 해당 노드에 접근하지 못하도록 Kubernetes 테인트를 적용합니다. 노드 레이블에서 적용한 레이블은 AI Data Engine Pod를 해당 노드에 유지시킵니다. 모든 AI Data Engine 워크로드에는 다음 테인트에 대한 내성이 내장되어 있으므로 해당 Pod는 테인트가 적용된 노드에 스케줄링될 수 있습니다.

netapp.com/aide=true:NoSchedule

테인트를 사용하지 않으면 톨러레이션은 아무런 영향을 미치지 않으므로 아무것도 변경할 필요가 없습니다.

구축 노드에 레이블을 지정하십시오 AI Data Engine 노드의 테인트 결과

전용 클러스터

예

필수 아님

내장된 톨러레이션은 아무런 효과가 없습니다.

공유 클러스터의 전용 노드

예

netapp.com/aide=true:NoSchedule

AI Data Engine 포드는 해당 노드에서만 실행되며, 다른 워크로드는 해당 노드에서 실행되지 않습니다.

참고 노드에 AI Data Engine 파드가 허용하지 않는 오염(taint)이 있는 경우, 파드는 Pending 상태를 유지합니다.
  1. 공유 클러스터의 경우 AI Data Engine을 위해 예약한 각 노드에 taint를 설정하십시오. `<node-name>`을(를) 노드 이름으로 바꾸십시오:

    kubectl taint node <node-name> netapp.com/aide=true:NoSchedule

    AI Data Engine이 아닌 Pod는 해당 노드에 스케줄링할 수 없습니다. AI Data Engine Pod는 테인트를 허용합니다.

  2. 노드에 다른 taint가 있는 경우, 설치 명령의 맨 끝, 마지막 기존 매개변수 뒤에 --extra-toleration 매개변수를 추가하십시오. 추가 taint마다 매개변수를 반복하십시오.

    • 키와 값을 일치시키려면 `--extra-toleration KEY=VALUE:EFFECT`을(를) 사용하십시오.

    • 키만 일치시키려면 `--extra-toleration KEY:EFFECT`을(를) 사용하십시오.

      EFFECT`은(는) `NoSchedule, PreferNoSchedule 또는 `NoExecute`입니다. 유효하지 않은 효과를 지정하면 설치 프로그램이 중지됩니다. 설치 프로그램은 추가 톨러레이션을 모든 AI Data Engine 구성 요소에 적용합니다.

      예를 들어, 노드 또한 테인트된 경우 dedicated=redis:NoSchedule, 다음 매개변수를 추가합니다:

    --extra-toleration dedicated=redis:NoSchedule

수신 포트

AI Data Engine은 3rdparty-aide-nginx=true 레이블이 있는 노드에 호스트 포트 TCP 80 및 443을 사용하는 인그레스 컨트롤러를 배포합니다. 다른 Kubernetes 워크로드는 해당 노드에서 이러한 포트를 사용할 수 없습니다. Traefik 등 다른 인그레스 컨트롤러를 제거 또는 비활성화하거나, 해당 노드에서 다른 위치로 스케줄링하거나, 호스트 포트 80 및 443을 사용하지 않도록 구성하십시오.

기존 Kubernetes 호스트 포트 클레임을 확인하려면 다음 명령을 실행하세요.

kubectl get pods -A -o json | jq -r '
  .items[] | . as $pod
  | .spec.containers[]?.ports[]?
  | select(.hostPort == 80 or .hostPort == 443)
  | "\($pod.spec.nodeName // "-")  \($pod.metadata.namespace)/\($pod.metadata.name)  hostPort=\(.hostPort)"
'

StorageClass

상태 저장 구성 요소(Elasticsearch, Kafka, PostgreSQL, RabbitMQ 및 Redis)에 대한 StorageClass가 클러스터에 존재해야 하며, "노드 크기 조정"에 지정된 IOPS 및 처리량을 충족해야 합니다. `--storage-class <name>`를 사용하여 설치 프로그램에 해당 이름을 전달하십시오. 기본 이름은 `aide-sc`입니다. 지정된 StorageClass가 존재하지 않으면 설치 프로그램이 중지되고 사용 가능한 StorageClasses를 나열합니다.

NVMe 또는 iSCSI 등 블록 스토리지를 사용하십시오. 공유 스토리지는 성능이 떨어집니다.

StorageClass는 NFS 구성 볼륨과 별개입니다.

관리형 Kubernetes 플랫폼에서 StorageClass가 프로비저닝한 디스크 유형은 워커 노드 인스턴스 유형에 연결할 수 있어야 합니다. 설치 프로그램은 이 호환성을 사전에 확인할 수 없습니다. 디스크 유형과 노드 유형이 호환되지 않으면 Pod는 스케줄링될 수 있지만 배포 중에 볼륨 연결이 실패합니다.

클라우드 관련 요구 사항

AKS

앞서 언급된 요구사항 외에도 AKS 클러스터는 다음 요구사항을 충족해야 합니다.

노드 VM 크기는 StorageClass가 프로비저닝하는 디스크 유형을 지원해야 합니다. Azure 프리미엄 디스크((Premium_LRS, Premium_ZRS, and PremiumV2_LRS)는 SKU에 s`가 포함된 프리미엄 지원 VM 크기에만 연결되며, `Standard_D16s_v5 등이 이에 해당합니다. VM 크기가 프로비저닝된 디스크를 지원하지 않으면 Pod는 예약되지만 볼륨 연결은 FailedAttachVolume 오류와 함께 실패합니다.

AIDE 상태 저장 구성 요소는 높은 IOPS와 처리량을 요구하므로 AIDE 노드 풀에 프리미엄급 VM 크기를 사용하십시오. 또는 현재 VM 크기에서 지원하는 디스크 SKU가 있는 StorageClass를 사용하십시오. 내장된 `managed-csi`은(는) `StandardSSD_LRS`을(를) 프로비저닝합니다. `managed-csi-premium`은(는) `Premium_LRS`을(를) 프로비저닝합니다.

StorageClass가 프로비저닝하는 디스크 유형과 노드의 VM 크기를 확인하려면 다음 명령을 실행하십시오.

kubectl get sc <name> -o jsonpath='{.provisioner}{"  "}{.parameters}{"\n"}'
kubectl get nodes -o custom-columns=NAME:.metadata.name,VMSIZE:.metadata.labels.node\.kubernetes\.io/instance-type

다음 예제는 Premium SSD v2 (PremiumV2_LRS)를 사용하며 IOPS와 처리량을 독립적으로 설정하는 방법을 보여줍니다. Premium SSD v2에는 프리미엄급 VM 크기 및 cachingMode: None`이(가) 필요합니다. `diskIOPSReadWrite 및 `diskMBpsReadWrite`을(를) "노드 크기 조정"의 해당 크기에 맞는 값으로 설정하십시오. 이 예제는 소규모 배포 값을 사용합니다:

apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: aide-sc
provisioner: disk.csi.azure.com
allowVolumeExpansion: true
volumeBindingMode: WaitForFirstConsumer
reclaimPolicy: Retain
parameters:
  skuName: PremiumV2_LRS
  cachingMode: None
  diskIOPSReadWrite: "8000"
  diskMBpsReadWrite: "1000"

매니페스트를 aide-sc.yaml(으)로 저장하고 `kubectl apply -f aide-sc.yaml`을(를) 실행하여 적용하십시오. 그런 다음 설치 명령을 실행할 때 `--storage-class aide-sc`을(를) 지정하십시오.

  • 설치 프로그램을 실행하는 사용자로 `az login`실행하십시오. AKS kubeconfig 파일은 현재 사용자의 Azure CLI 로그인을 사용하여 인증합니다. 소유하고 있는 툴 디렉터리를 지정하십시오.

  • AKS 클러스터가 프라이빗인 경우 설치 호스트는 가상 네트워크, 피어링된 네트워크 또는 VPN을 통해 API 서버에 연결해야 합니다. 설치 호스트에서 `kubectl cluster-info`을(를) 실행하여 액세스를 확인하십시오.