다음을 통해 공유


빠른 시작: Azure CLI를 사용하여 Azure Nexus Kubernetes 클러스터 만들기

  • Azure CLI를 사용하여 Azure Nexus Kubernetes 클러스터를 배포합니다.

시작하기 전 주의 사항:

Azure 계정이 없는 경우 시작하기 전에 체험 계정을 만듭니다.

  • 필요한 Azure CLI 확장의 최신 버전을 설치합니다.

  • 이 문서에는 Azure CLI 버전 2.61.0 이상이 필요합니다. Azure Cloud Shell을 사용하는 경우 최신 버전이 이미 설치되어 있습니다.

  • 여러 Azure 구독이 있는 경우 명령을 사용하여 리소스를 청구해야 하는 적절한 구독 ID를 az account 선택합니다.

  • 지원되는 VM SKU 목록은 참조 섹션 의 VM SKU 테이블을 참조하세요.

  • 지원되는 Kubernetes 버전 목록은 지원되는 Kubernetes 버전을 참조하세요.

  • az group create 명령을 사용하여 리소스 그룹을 만듭니다. Azure 리소스 그룹은 Azure 리소스가 배포되고 관리되는 논리 그룹입니다. 리소스 그룹을 만들 때 위치를 지정하라는 메시지가 표시됩니다. 이 위치는 리소스 그룹 메타데이터의 스토리지 위치이며 리소스를 만드는 중에 다른 지역을 지정하지 않은 경우 Azure에서 리소스가 실행되는 위치입니다. 다음 예제에서는 eastus 위치에 myResourceGroup이라는 리소스 그룹을 만듭니다.

    az group create --name myResourceGroup --___location eastus
    

    다음 출력 예제는 리소스 그룹을 성공적으로 만드는 것과 유사합니다.

    {
      "id": "/subscriptions/<guid>/resourceGroups/myResourceGroup",
      "___location": "eastus",
      "managedBy": null,
      "name": "myResourceGroup",
      "properties": {
        "provisioningState": "Succeeded"
      },
      "tags": null
    }
    
  • Bicep 파일 또는 ARM 템플릿을 배포하려면 배포하는 리소스에 대한 쓰기 액세스 권한과 Microsoft.Resources/deployments 리소스 유형의 모든 작업에 액세스해야 합니다. 예를 들어 클러스터를 배포하려면 Microsoft.NetworkCloud/kubernetesclusters/write 및 Microsoft.Resources/deployments/* 권한이 필요합니다. 역할 및 권한 목록은 Azure 기본 제공 역할을 참조하세요.

  • Azure 운영자 Nexus 클러스터의 custom ___location 리소스 ID가 필요합니다.

  • 특정 워크로드 요구 사항에 따라 다양한 네트워크를 만들어야 하며 워크로드에 적절한 IP 주소를 사용할 수 있어야 합니다. 원활한 구현을 위해 관련 지원 팀에 도움을 문의하는 것이 좋습니다.

  • 이 빠른 시작에서는 Kubernetes 기본 개념을 이해하고 있다고 가정합니다. 자세한 내용은 AKS(Azure Kubernetes Service)의 Kubernetes 핵심 개념을 참조하세요.

Azure Nexus Kubernetes 클러스터 만들기

다음 예제에서는 eastus 위치의 리소스 그룹 myResourceGroupmyNexusK8sCluster라는 클러스터를 만듭니다.

명령을 실행하기 전에 클러스터에 대한 구성을 정의하기 위해 여러 변수를 설정해야 합니다. 다음은 특정 변수에 사용할 수 있는 몇 가지 기본값과 함께 설정해야 하는 변수입니다.

변수 Description
위치 클러스터를 만들려는 Azure 지역입니다.
리소스 그룹 클러스터를 만들 Azure 리소스 그룹의 이름입니다.
구독 ID Azure 구독의 ID입니다.
CUSTOM_LOCATION 이 인수는 Nexus 인스턴스의 사용자 지정 위치를 지정합니다.
CSN_ARM_ID CSN ID는 사용하려는 클라우드 서비스 네트워크의 고유 식별자입니다.
CNI_ARM_ID CNI ID는 컨테이너 런타임에서 사용할 네트워크 인터페이스의 고유 식별자입니다.
AAD 관리자 그룹 개체 ID (AAD_ADMIN_GROUP_OBJECT_ID) 클러스터에 대한 관리자 권한이 있어야 하는 Microsoft Entra 그룹의 개체 ID입니다.
CLUSTER_NAME Nexus Kubernetes 클러스터에 지정하려는 이름입니다.
K8S_VERSION 사용하려는 Kubernetes의 버전입니다.
ADMIN_USERNAME 클러스터 관리자의 사용자 이름입니다.
SSH_PUBLIC_KEY 클러스터와의 보안 통신에 사용되는 SSH 공개 키입니다.
제어 평면 수량 클러스터의 컨트롤 플레인 노드 수입니다.
CONTROL_PLANE_VM_SIZE 컨트롤 플레인 노드에 대한 가상 머신의 크기입니다.
초기_에이전트_풀_이름 초기 에이전트 풀의 이름입니다.
INITIAL_AGENT_POOL_COUNT 초기 에이전트 풀의 노드 수입니다.
INITIAL_AGENT_POOL_VM_SIZE 초기 에이전트 풀에 대한 가상 머신의 크기입니다.
POD_CIDR 클러스터의 Kubernetes Pod에 대한 네트워크 범위(CIDR 표기법)입니다.
SERVICE_CIDR 클러스터의 Kubernetes 서비스에 대한 네트워크 범위(CIDR 표기법)입니다.
DNS 서비스 IP Kubernetes DNS 서비스의 IP 주소입니다.

이러한 변수를 정의한 후에는 Azure CLI 명령을 실행하여 클러스터를 만들 수 있습니다. --debug 문제 해결을 위해 더 자세한 출력을 제공하려면 끝에 플래그를 추가합니다.

이러한 변수를 정의하려면 다음 집합 명령을 사용하고 예제 값을 기본 설정 값으로 바꿉니다. 다음 예제와 같이 일부 변수에 대한 기본값을 사용할 수도 있습니다.

RESOURCE_GROUP="myResourceGroup"
SUBSCRIPTION_ID="<Azure subscription ID>"
LOCATION="$(az group show --name $RESOURCE_GROUP --query ___location --subscription $SUBSCRIPTION_ID -o tsv)"
CUSTOM_LOCATION="/subscriptions/<subscription_id>/resourceGroups/<managed_resource_group>/providers/microsoft.extendedlocation/customlocations/<custom-___location-name>"
CSN_ARM_ID="/subscriptions/<subscription_id>/resourceGroups/<resource_group>/providers/Microsoft.NetworkCloud/cloudServicesNetworks/<csn-name>"
CNI_ARM_ID="/subscriptions/<subscription_id>/resourceGroups/<resource_group>/providers/Microsoft.NetworkCloud/l3Networks/<l3Network-name>"
AAD_ADMIN_GROUP_OBJECT_ID="00000000-0000-0000-0000-000000000000"
CLUSTER_NAME="myNexusK8sCluster"
K8S_VERSION="v1.24.9"
ADMIN_USERNAME="azureuser"
SSH_PUBLIC_KEY="$(cat ~/.ssh/id_rsa.pub)"
CONTROL_PLANE_SSH_PUBLIC_KEY="$(cat ~/.ssh/id_rsa.pub)"
AGENT_POOL_SSH_PUBLIC_KEY="$(cat ~/.ssh/id_rsa.pub)"
CONTROL_PLANE_COUNT="1"
CONTROL_PLANE_VM_SIZE="NC_G6_28_v1"
INITIAL_AGENT_POOL_NAME="${CLUSTER_NAME}-nodepool-1"
INITIAL_AGENT_POOL_COUNT="1"
INITIAL_AGENT_POOL_VM_SIZE="NC_P10_56_v1"
POD_CIDR="10.244.0.0/16"
SERVICE_CIDR="10.96.0.0/16"
DNS_SERVICE_IP="10.96.0.10"

중요합니다

이러한 명령을 실행하기 전에 CUSTOM_LOCATION, CSN_ARM_ID, CNI_ARM_ID 및 AAD_ADMIN_GROUP_OBJECT_ID 자리 표시자를 실제 값으로 바꿔야 합니다.

이러한 변수를 정의한 후 다음 Azure CLI 명령을 실행하여 Kubernetes 클러스터를 만들 수 있습니다.

az networkcloud kubernetescluster create \
  --name "${CLUSTER_NAME}" \
  --resource-group "${RESOURCE_GROUP}" \
  --subscription "${SUBSCRIPTION_ID}" \
  --extended-___location name="${CUSTOM_LOCATION}" type=CustomLocation \
  --___location "${LOCATION}" \
  --kubernetes-version "${K8S_VERSION}" \
  --aad-configuration admin-group-object-ids="[${AAD_ADMIN_GROUP_OBJECT_ID}]" \
  --admin-username "${ADMIN_USERNAME}" \
  --ssh-key-values "${SSH_PUBLIC_KEY}" \
  --control-plane-node-configuration \
    count="${CONTROL_PLANE_COUNT}" \
    vm-sku-name="${CONTROL_PLANE_VM_SIZE}" \
    ssh-key-values='["${CONTROL_PLANE_SSH_PUBLIC_KEY}"]' \
  --initial-agent-pool-configurations "[{count:${INITIAL_AGENT_POOL_COUNT},mode:System,name:${INITIAL_AGENT_POOL_NAME},vm-sku-name:${INITIAL_AGENT_POOL_VM_SIZE},ssh-key-values:['${AGENT_POOL_SSH_PUBLIC_KEY}']}]" \
  --network-configuration \
    cloud-services-network-id="${CSN_ARM_ID}" \
    cni-network-id="${CNI_ARM_ID}" \
    pod-cidrs="[${POD_CIDR}]" \
    service-cidrs="[${SERVICE_CIDR}]" \
    dns-service-ip="${DNS_SERVICE_IP}"

요청된 클러스터 노드를 배포할 용량이 충분하지 않으면 오류 메시지가 나타납니다. 그러나 이 메시지는 사용 가능한 용량에 대한 세부 정보를 제공하지 않습니다. 용량 부족으로 인해 클러스터 만들기를 진행할 수 없다고 명시됩니다.

비고

용량 계산은 개별 랙으로 제한되지 않고 전체 플랫폼 클러스터를 고려합니다. 따라서, 용량이 부족한 특정 영역(랙이 곧 영역임)에 에이전트 풀을 생성하는 경우 다른 영역에 충분한 용량이 있다고 해도 클러스터 생성은 계속 진행되지만 결국에는 시간 초과될 것입니다. 이러한 용량 검사 접근 방식은 클러스터 또는 에이전트 풀 생성 시 특정 영역을 지정하지 않는 경우에만 의미가 있습니다.

몇 분 후에 명령이 완료되고 클러스터에 대한 정보를 반환합니다. 고급 옵션은 빠른 시작: Bicep을 사용하여 Azure Nexus Kubernetes 클러스터 배포를 참조하세요.

배포된 리소스 검토

배포가 완료되면 CLI 또는 Azure Portal을 사용하여 리소스를 볼 수 있습니다.

리소스 그룹에서 클러스터 myNexusK8sClustermyResourceGroup 세부 정보를 보려면 다음 Azure CLI 명령을 실행합니다.

az networkcloud kubernetescluster show \
  --name myNexusK8sCluster \
  --resource-group myResourceGroup

또한 리소스 그룹의 클러스터 myNexusK8sClustermyResourceGroup 연결된 에이전트 풀 이름 목록을 얻으려면 다음 Azure CLI 명령을 사용할 수 있습니다.

az networkcloud kubernetescluster agentpool list \
  --kubernetes-cluster-name myNexusK8sCluster \
  --resource-group myResourceGroup \
  --output table

클러스터에 연결

이제 Nexus Kubernetes 클러스터가 성공적으로 만들어지고 Azure Arc에 연결되었으므로 클러스터 연결 기능을 사용하여 쉽게 연결할 수 있습니다. 클러스터 연결을 사용하면 어디서나 클러스터에 안전하게 액세스하고 관리할 수 있으므로 대화형 개발, 디버깅 및 클러스터 관리 작업에 편리합니다.

사용 가능한 옵션에 대한 자세한 내용은 Azure 운영자 Nexus Kubernetes 클러스터에 연결을 참조하세요.

비고

Nexus Kubernetes 클러스터를 만들 때 Nexus는 클러스터 리소스를 저장하는 전용 관리되는 리소스 그룹을 자동으로 만듭니다. 이 그룹 내에서 Arc 연결된 클러스터 리소스가 설정됩니다.

클러스터에 액세스하려면 클러스터 연결을 kubeconfig설정해야 합니다. 관련 Microsoft Entra 엔터티를 사용하여 Azure CLI에 로그인한 후에는 클러스터를 둘러싸는 방화벽 외부에서도 어디서나 클러스터와 통신하는 데 필요한 정보를 얻을 kubeconfig 수 있습니다.

  1. CLUSTER_NAME RESOURCE_GROUP 및 변수를 설정합니다SUBSCRIPTION_ID.

    CLUSTER_NAME="myNexusK8sCluster"
    RESOURCE_GROUP="myResourceGroup"
    SUBSCRIPTION_ID=<set the correct subscription_id>
    
  2. 관리 리소스 그룹을 az으로 쿼리하고 MANAGED_RESOURCE_GROUP에 저장합니다.

     az account set -s $SUBSCRIPTION_ID
     MANAGED_RESOURCE_GROUP=$(az networkcloud kubernetescluster show -n $CLUSTER_NAME -g $RESOURCE_GROUP --output tsv --query managedResourceGroupConfiguration.name)
    
  3. 다음 명령은 지정된 Nexus Kubernetes 클러스터에 대한 Kubernetes API 서버에 연결할 수 있는 connectedk8s 프록시를 시작합니다.

    az connectedk8s proxy -n $CLUSTER_NAME  -g $MANAGED_RESOURCE_GROUP &
    
  4. 클러스터에 요청을 보내는 데 사용합니다 kubectl .

    kubectl get pods -A
    

    이제 모든 노드 목록을 포함하는 클러스터의 응답이 표시됩니다.

비고

오류 메시지 "MSI에 연결하기 위해 클라이언트 프록시에 액세스 토큰을 게시하지 못했습니다. MSI에 연결할 수 없습니다."가 표시되면 Azure에서 다시 인증을 수행해야 az login 할 수 있습니다.

에이전트 풀 추가

이전 단계에서 만든 클러스터에는 노드 풀이 하나 있습니다. 명령을 사용하여 두 번째 에이전트 풀을 az networkcloud kubernetescluster agentpool create 추가해 보겠습니다. 다음 예제에서는 다음과 같은 에이전트 myNexusK8sCluster-nodepool-2풀을 만듭니다.

다음 예제와 같이 일부 변수에 대한 기본값을 사용할 수도 있습니다.

RESOURCE_GROUP="myResourceGroup"
CUSTOM_LOCATION="/subscriptions/<subscription_id>/resourceGroups/<managed_resource_group>/providers/microsoft.extendedlocation/customlocations/<custom-___location-name>"
CLUSTER_NAME="myNexusK8sCluster"
AGENT_POOL_NAME="${CLUSTER_NAME}-nodepool-2"
AGENT_POOL_VM_SIZE="NC_P10_56_v1"
AGENT_POOL_COUNT="1"
AGENT_POOL_MODE="User"

이러한 변수를 정의한 후 다음 Azure CLI 명령을 실행하여 에이전트 풀을 추가할 수 있습니다.

az networkcloud kubernetescluster agentpool create \
  --name "${AGENT_POOL_NAME}" \
  --kubernetes-cluster-name "${CLUSTER_NAME}" \
  --resource-group "${RESOURCE_GROUP}" \
  --subscription "${SUBSCRIPTION_ID}" \
  --extended-___location name="${CUSTOM_LOCATION}" type=CustomLocation \
  --count "${AGENT_POOL_COUNT}" \
  --mode "${AGENT_POOL_MODE}" \
  --vm-sku-name "${AGENT_POOL_VM_SIZE}"

몇 분 후에 명령이 완료되고 에이전트 풀에 대한 정보를 반환합니다. 고급 옵션은 빠른 시작: Bicep을 사용하여 Azure Nexus Kubernetes 클러스터 배포를 참조하세요.

비고

초기 에이전트 풀 구성을 사용하여 클러스터 자체를 처음 만드는 동안 여러 에이전트 풀을 추가할 수 있습니다. 그러나 초기 생성 후 에이전트 풀을 추가하려는 경우 위의 명령을 사용하여 Nexus Kubernetes 클러스터에 대한 추가 에이전트 풀을 만들 수 있습니다.

다음 출력 예제는 에이전트 풀을 성공적으로 만드는 것과 유사합니다.

$ az networkcloud kubernetescluster agentpool list --kubernetes-cluster-name myNexusK8sCluster --resource-group myResourceGroup --output table
This command is experimental and under development. Reference and support levels: https://aka.ms/CLI_refstatus
Count    Location    Mode    Name                          ProvisioningState    ResourceGroup    VmSkuName
-------  ----------  ------  ----------------------------  -------------------  ---------------  -----------
1        eastus      System  myNexusK8sCluster-nodepool-1  Succeeded            myResourceGroup  NC_P10_56_v1
1        eastus      User    myNexusK8sCluster-nodepool-2  Succeeded            myResourceGroup  NC_P10_56_v1

자원을 정리하세요

더 이상 필요하지 않은 경우 리소스 그룹을 삭제합니다. 리소스 그룹 및 리소스 그룹의 모든 리소스가 삭제됩니다.

az group delete 명령을 사용하여 리소스 그룹, Kubernetes 클러스터 및 운영자 Nexus 네트워크 리소스를 제외한 모든 관련 리소스를 제거합니다.

az group delete --name myResourceGroup --yes --no-wait

다음 단계

이제 클러스터 연결을 통해 직접 또는 Azure 운영자 서비스 관리자를 통해 CNF를 배포할 수 있습니다.