Azure에서 클러스터

이 항목에서는 Microsoft Azure에만 해당되고 클러스터의 플랫 구성 파일 또는 Kubernetes 스타일 개체 규격에서 완전히 구성할 수 없는 기능을 사용하도록 TKG(Tanzu Kubernetes Grid) 워크로드 클러스터를 구성하는 방법을 설명합니다.

구성 파일 및 개체 규격을 사용하여 Azure에서 워크로드 클러스터를 구성하는 방법에 대한 자세한 내용은 Azure 클러스터 구성 파일을 참조하십시오.

Azure 개인 클러스터

기본적으로 Azure 관리 및 워크로드 클러스터는 공용입니다. 그러나 API 서버가 Azure ILB(내부 로드 밸런서)를 사용하므로 클러스터의 자체 VNet 또는 피어링된 VNet 내에서만 액세스할 수 있도록 개인으로 구성할 수도 있습니다.

Azure 클러스터를 개인으로 설정하려면 구성 파일에 다음을 포함합니다.

  • AZURE_ENABLE_PRIVATE_CLUSTERtrue로 설정합니다.

  • (선택 사항) AZURE_FRONTEND_PRIVATE_IP 클러스터의 로드 밸런서의 내부 주소로 설정합니다.

    • 이 주소는 해당 제어부 서브넷 범위 내에 있어야 하며 다른 구성 요소에서 사용하지 않아야 합니다.
    • 설정하지 않으면 이 주소는 기본적으로 10.0.0.100입니다.
  • 다른 Azure 개인 클러스터에 사용하는 VNet 및 서브넷에 AZURE_VNET_NAME, AZURE_VNET_CIDR, AZURE_CONTROL_PLANE_SUBNET_NAME, AZURE_CONTROL_PLANE_SUBNET_CIDR, AZURE_NODE_SUBNET_NAME, AZURE_NODE_SUBNET_CIDR을 설정합니다.

    • Azure 개인 클러스터는 VNet 외부에서 액세스할 수 없으므로 관리 클러스터와 관리 클러스터가 관리하는 모든 워크로드 및 공유 서비스 클러스터는 동일한 개인 VNet에 있어야 합니다.
    • Tanzu CLI를 실행하여 개인 클러스터를 생성하고 사용하는 부트스트랩 시스템도 동일한 개인 VNet에 있어야 합니다.
  • (선택 사항) 제어부 및 Worker 노드가 Azure 인터넷 연결을 통해 인터넷에 액세스할 수 있도록 하려면 AZURE_ENABLE_CONTROL_PLANE_OUTBOUND_LBAZURE_ENABLE_NODE_OUTBOUND_LBtrue로 설정합니다.

    • 기본적으로, Azure 개인 클러스터는 로드 밸런서 유형의 각 Kubernetes 서비스에 공용 IP 주소를 생성합니다. 개인 IP 주소를 대신 사용하도록 로드 밸런서 서비스를 구성하려면 배포 매니페스트에 다음 주석을 추가합니다.

      ---
      metadata:
      annotations:
        service.beta.kubernetes.io/azure-load-balancer-internal: "true"
      

자세한 내용은 클러스터 API 제공자 Azure 설명서의 API 서버 끝점을 참조하십시오.

서로 다른 Azure 계정의 클러스터

Tanzu Kubernetes Grid는 여러 대상 플랫폼 계정에서 워크로드 클러스터를 실행할 수 있습니다. 예를 들어 서로 다른 팀 간에 클라우드 사용량을 분할하거나 프로덕션, 스테이징, 개발 워크로드에 서로 다른 보안 프로필을 적용할 수 있습니다.

워크로드 클러스터를 관리 클러스터를 배포하는 데 사용되는 계정과 다른 대체 Azure 서비스 주체 계정에 배포하려면 다음을 수행합니다.

  1. 대체 Azure 계정을 생성합니다. 이 계정의 세부 정보를 사용하여 이후 단계에서 AzureClusterIdentity를 생성합니다. Azure 서비스 주체 계정 생성에 대한 자세한 내용은 Azure 설명서의 방법: 포털을 사용하여 리소스에 액세스할 수 있는 Azure AD 애플리케이션 및 서비스 주체 생성을 참조하십시오.

  2. 관리 클러스터에 kubectl 컨텍스트를 설정합니다.

    kubectl config use-context MY-MGMT-CLUSTER@MY-MGMT-CLUSTER
    

    여기서 MY-MGMT-CLUSTER는 관리 클러스터의 이름입니다.

  3. 다음 내용으로 secret.yaml 파일을 생성합니다.

    apiVersion: v1
    kind: Secret
    metadata:
      name: SECRET-NAME
    type: Opaque
    data:
      clientSecret: CLIENT-SECRET
    

    형식 설명:

    • SECRET-NAME은 클라이언트 암호의 암호 이름입니다.
    • CLIENT-SECRET는 서비스 주체 ID의 클라이언트 암호입니다. 클라이언트 암호는 base64로 인코딩되어야 합니다.
  4. 파일을 사용하여 Secret 개체를 생성합니다.

    kubectl apply -f secret.yaml
    
  5. 다음 내용으로 identity.yaml 파일을 생성합니다.

    apiVersion: infrastructure.cluster.x-k8s.io/v1beta1
    kind: AzureClusterIdentity
    metadata:
      name: EXAMPLE-IDENTITY
      namespace: EXAMPLE-NAMESPACE
    spec:
      type: ManualServicePrincipal
      tenantID: AZURE-TENANT-ID
      clientID: CLIENT-ID
      clientSecret: {"name":"SECRET-NAME","namespace":"default"}
      allowedNamespaces:
        list:
        - CLUSTER-NAMESPACE-1
        - CLUSTER-NAMESPACE-1
    

    형식 설명:

    • EXAMPLE-IDENTITY는 AzureClusterIdentity에 사용할 이름입니다.
    • EXAMPLE-NAMESPACE는 AzureClusterIdentity의 네임스페이스입니다.
    • AZURE-TENANT-ID는 Azure 테넌트 ID입니다.
    • CLIENT-ID는 Azure AD 애플리케이션의 클라이언트 ID(AppID라고도 함)입니다.
    • SECRET-NAME은 클라이언트 암호의 암호 이름입니다.
    • CLUSTER-NAMESPACE-1CLUSTER-NAMESPACE-2는 클러스터에서 ID를 사용하도록 허용되는 Kubernetes 네임스페이스입니다. 이러한 네임스페이스는 네임스페이스 어레이를 사용하여 선택할 수 있습니다.
  6. 파일을 사용하여 AzureClusterIdentity 개체를 생성합니다.

    kubectl apply -f identity.yaml
    

이제 관리 클러스터는 새 AzureClusterIdentity 개체를 사용하여 워크로드 클러스터를 대체 계정에 배포할 수 있습니다.

대체 Azure 계정을 사용하는 워크로드 클러스터를 생성하려면 클러스터 구성 파일에서 다음 변수를 포함합니다.

AZURE_IDENTITY_NAME: EXAMPLE-IDENTITY
AZURE_IDENTITY_NAMESPACE: EXAMPLE-NAMESPACE

형식 설명:

  • EXAMPLE-IDENTITY는 AzureClusterIdentity에 사용할 이름입니다.
  • EXAMPLE-NAMESPACE는 AzureClusterIdentity의 네임스페이스입니다.

워크로드 클러스터를 생성한 후 대체 계정을 사용하여 Azure Portal에 로그인하면 클러스터가 실행 중이어야 합니다.

GPU 지원 클러스터

Azure에 NVIDIA GPU 지원 워크로드 클러스터를 배포하는 방법에는 두 가지가 있습니다.

  • GPU 작업자가 포함된 워크로드 클러스터를 생성하고 GPU 정책 및 연산자를 클러스터에 수동으로 설치합니다.
  • (기술 미리보기) 하나 이상의 GPU 지원 워크로드 클러스터를 자동으로 생성하도록 ClusterResourceSet(CRS)을 사용하여 관리 클러스터를 구성합니다.

아래 하위 섹션에서는 이러한 두 가지 접근 방식과 GPU 지원 클러스터를 테스트하는 방법을 설명합니다.

단일 클러스터 배포 및 GPU 사용

워크로드 클러스터를 배포하고 수동으로 구성하여 Azure에서 사용할 수 있는 NVIDIA GPU VM을 활용하려면 다음을 수행합니다.

  1. 클러스터용 구성 파일에서 Worker 노드에 AZURE_NODE_MACHINE_TYPE을 설정하여 Standard_NC4as_T4_v3와 같은 GPU 호환 VM 유형으로 설정합니다.

  2. 클러스터 구성 파일을 사용하여 클러스터를 배포합니다.

    tanzu cluster create MY-GPU-CLUSTER -f MY-GPU-CONFIG
    

    여기서 MY-GPU-CLUSTER는 클러스터에 제공하는 이름입니다.

  3. 클러스터에 GPU 클러스터 정책 및 GPU 연산자를 설치합니다.

    1. 현재 컨텍스트가 아닌 경우 kubectl context를 클러스터로 설정합니다.

    2. 클러스터 API 제공자 Azure 저장소에서 필요한 NVIDIA GPU 리소스를 다운로드하고 현재 디렉토리에 저장합니다.

    3. 클러스터 정책을 적용합니다.

      kubectl apply clusterpolicy-crd.yaml
      
    4. GPU 연산자를 적용합니다.

      kubectl apply gpu-operator-components.yaml
      
  4. kubectl get pods -A을 실행합니다. default 네임스페이스의 gpu-operator- 포드 및 gpu-operator-resources 네임스페이스의 nvidia- 포드 목록이 표시됩니다.

GPU 클러스터 배포를 위한 관리 클러스터 구성(기술 미리보기)

참고

이 기능은 지원되지 않는 기술 미리보기 상태입니다. TKG 기능 상태를 참조하십시오.

클러스터 매니페스트의 레이블에 gpu: nvidia를 추가할 때마다 GPU 지원 워크로드 클러스터를 자동으로 생성하도록 관리 클러스터를 구성할 수 있습니다. 이렇게 하려면 CRS(ClusterResourceSet)를 설치하고 다음과 같이 활성화합니다.

  1. GPU 클러스터를 생성하도록 관리 클러스터를 구성하려면 다음을 수행합니다.

    1. VMware {code} Sample Exchange에서 TKG용 GPU CRS를 검색하고 Tanzu Kubernetes Grid v1.4용 gpu-crs.yaml 파일을 다운로드합니다.

    2. kubectl 컨텍스트를 관리 클러스터의 컨텍스트로 설정합니다.

      kubectl config use-context my-management-cluster-admin@my-management-cluster
      
    3. --server-side 옵션을 사용하여 관리 클러스터에 CRS 파일을 적용하여 ConfigMap 데이터의 큰 크기를 처리합니다.

      kubectl apply -f gpu-crs.yaml --server-side
      
  2. GPU 워크로드 클러스터를 생성하려면 다음을 수행합니다.

    1. 클러스터용 구성 파일에서 Worker 노드에 AZURE_NODE_MACHINE_TYPE을 설정하여 Standard_NC4as_T4_v3와 같은 GPU 호환 VM 유형으로 설정합니다.

    2. --dry-run 옵션과 함께 tanzu cluster create를 사용하여 클러스터 구성 파일에서 배포 매니페스트를 생성합니다.

      tanzu cluster create MY-GPU-CLUSTER -f MY-GPU-CONFIG --dry-run > MY-GPU-CLUSTER-MANIFEST
      

      여기서 MY-GPU-CLUSTER는 클러스터에 제공하는 이름입니다.

    3. 클러스터를 kubectl apply에 전달하여 생성합니다.

      kubectl apply -f MY-GPU-CLUSTER-MANIFEST
      
    4. kubectl get pods -A을 실행합니다. default 네임스페이스의 gpu-operator- 포드 및 gpu-operator-resources 네임스페이스의 nvidia- 포드 목록이 표시됩니다.

GPU 지원 클러스터 테스트

GPU 지원 클러스터를 테스트하려면 다음을 수행합니다.

  1. NVIDIA 설명서의 CUDA VectorAdd 벡터 추가 테스트를 실행하여 GPU 처리를 테스트합니다.

  2. GPU 연산자를 테스트합니다.

    1. 워크로드 클러스터의 Worker 노드 수를 스케일 업합니다.

      tanzu cluster scale MY-GPU-CLUSTER -w 2
      
    2. kubectl get pods -A를 다시 실행합니다. 추가된 노드에 대해 추가 gpu-operator-nvidia- 포드가 표시됩니다.

check-circle-line exclamation-circle-line close-line
Scroll to top icon