빠른 시작: Azure CLI를 사용하여 Azure Nexus Kubernetes 클러스터 만들기
- Azure CLI를 사용하여 Azure Nexus Kubernetes 클러스터를 배포합니다.
시작하기 전에
Azure를 구독하고 있지 않다면 시작하기 전에 Azure 체험 계정을 만듭니다.
Azure Cloud Shell에서 Bash 환경을 사용합니다. 자세한 내용은 Azure Cloud Shell의 Bash에 대한 빠른 시작을 참조하세요.
CLI 참조 명령을 로컬에서 실행하려면 Azure CLI를 설치합니다. Windows 또는 macOS에서 실행 중인 경우 Docker 컨테이너에서 Azure CLI를 실행하는 것이 좋습니다. 자세한 내용은 Docker 컨테이너에서 Azure CLI를 실행하는 방법을 참조하세요.
로컬 설치를 사용하는 경우 az login 명령을 사용하여 Azure CLI에 로그인합니다. 인증 프로세스를 완료하려면 터미널에 표시되는 단계를 수행합니다. 다른 로그인 옵션은 Azure CLI를 사용하여 로그인을 참조하세요.
메시지가 표시되면 처음 사용할 때 Azure CLI 확장을 설치합니다. 확장에 대한 자세한 내용은 Azure CLI에서 확장 사용을 참조하세요.
az version을 실행하여 설치된 버전과 종속 라이브러리를 찾습니다. 최신 버전으로 업그레이드하려면 az upgrade를 실행합니다.
필요한 Azure CLI 확장의 최신 버전을 설치합니다.
이 문서에는 Azure CLI 버전 2.61.0 이상이 필요합니다. Azure Cloud Shell을 사용하는 경우 최신 버전이 이미 설치되어 있습니다.
Azure 구독이 여러 개인 경우
az account
명령을 사용하여 리소스가 청구되어야 하는 적절한 구독 ID를 선택합니다.지원되는 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 Operator Nexus 클러스터의
custom location
리소스 ID가 필요합니다.특정 워크로드 요구 사항에 따라 다양한 네트워크를 만들어야 하며 워크로드에 사용할 수 있는 적절한 IP 주소를 확보해야 합니다. 원활한 구현을 위해서는 관련 지원 팀에 문의하여 도움을 받는 것이 좋습니다.
이 빠른 시작에서는 Kubernetes 기본 개념을 이해하고 있다고 가정합니다. 자세한 내용은 AKS(Azure Kubernetes Service)의 Kubernetes 핵심 개념을 참조하세요.
Azure Nexus Kubernetes 클러스터 만들기
다음 예제에서는 eastus 위치에 있는 myResourceGroup 리소스 그룹에 myNexusK8sCluster라는 클러스터를 만듭니다.
명령을 실행하기 전에 클러스터에 대한 구성을 정의하기 위해 여러 변수를 설정해야 합니다. 다음은 설정해야 하는 변수와 함께 특정 변수에 사용할 수 있는 몇 가지 기본값입니다.
변수 | 설명 |
---|---|
위치 | 클러스터를 만들 Azure 지역입니다. |
RESOURCE_GROUP | 클러스터를 만들 Azure 리소스 그룹의 이름입니다. |
SUBSCRIPTION_ID | Azure 구독의 ID입니다. |
CUSTOM_LOCATION | 이 인수는 Nexus 인스턴스의 사용자 지정 위치를 지정합니다. |
CSN_ARM_ID | CSN ID는 사용할 클라우드 서비스 네트워크의 고유 식별자입니다. |
CNI_ARM_ID | CNI ID는 컨테이너 런타임에서 사용할 네트워크 인터페이스의 고유 식별자입니다. |
AAD_ADMIN_GROUP_OBJECT_ID | 클러스터에 대한 관리자 권한이 있어야 하는 Microsoft Entra 그룹의 개체 ID입니다. |
CLUSTER_NAME | Nexus Kubernetes 클러스터에 지정하려는 이름입니다. |
K8S_VERSION | 사용하려는 Kubernetes의 버전입니다. |
ADMIN_USERNAME | 클러스터 관리자의 사용자 이름입니다. |
SSH_PUBLIC_KEY | 클러스터와의 보안 통신에 사용되는 SSH 공개 키입니다. |
CONTROL_PLANE_COUNT | 클러스터의 컨트롤 플레인 노드 수입니다. |
CONTROL_PLANE_VM_SIZE | 컨트롤 플레인 노드의 가상 머신 크기입니다. |
INITIAL_AGENT_POOL_NAME | 초기 에이전트 풀의 이름입니다. |
INITIAL_AGENT_POOL_COUNT | 초기 에이전트 풀의 노드 수입니다. |
INITIAL_AGENT_POOL_VM_SIZE | 초기 에이전트 풀의 가상 머신 크기입니다. |
POD_CIDR | 클러스터의 Kubernetes Pod에 대한 네트워크 범위(CIDR 표기법)입니다. |
SERVICE_CIDR | 클러스터의 Kubernetes 서비스에 대한 네트워크 범위(CIDR 표기법)입니다. |
DNS_SERVICE_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"
Important
이러한 명령을 실행하기 전에 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을 사용하여 리소스를 볼 수 있습니다.
myResourceGroup
리소스 그룹에 있는 myNexusK8sCluster
클러스터의 세부 정보를 보려면 다음 Azure CLI 명령을 실행합니다.
az networkcloud kubernetescluster show \
--name myNexusK8sCluster \
--resource-group myResourceGroup
또한 myResourceGroup
리소스 그룹의 myNexusK8sCluster
클러스터와 연결된 에이전트 풀 이름 목록을 가져오려면 다음 Azure CLI 명령을 사용할 수 있습니다.
az networkcloud kubernetescluster agentpool list \
--kubernetes-cluster-name myNexusK8sCluster \
--resource-group myResourceGroup \
--output table
클러스터에 연결
이제 Nexus Kubernetes 클러스터가 성공적으로 만들어져 Azure Arc에 연결되었으므로 클러스터 연결 기능을 사용하여 쉽게 연결할 수 있습니다. 클러스터 연결을 사용하면 어디에서나 클러스터에 안전하게 액세스하고 관리할 수 있으므로 대화형 개발, 디버깅 및 클러스터 관리 작업이 편리해집니다.
사용 가능한 옵션에 대한 자세한 내용은 Azure Operator Nexus Kubernetes 클러스터에 연결을 참조하세요.
참고 항목
Nexus Kubernetes 클러스터를 만들면 Nexus는 클러스터 리소스 저장 전용 관리되는 리소스 그룹을 자동으로 만들며, 이 그룹 내에서 Arc 연결 클러스터 리소스가 설정됩니다.
클러스터에 액세스하려면 클러스터 연결 kubeconfig
를 설정해야 합니다. 관련 Microsoft Entra 엔터티를 사용하여 Azure CLI에 로그인하면 클러스터를 둘러싸고 있는 방화벽 외부에서도 어디에서나 클러스터와 통신하는 데 필요한 kubeconfig
를 가져올 수 있습니다.
CLUSTER_NAME
,RESOURCE_GROUP
및SUBSCRIPTION_ID
변수를 설정합니다.CLUSTER_NAME="myNexusK8sCluster" RESOURCE_GROUP="myResourceGroup" SUBSCRIPTION_ID=<set the correct subscription_id>
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)
다음 명령은 지정된 Nexus Kubernetes 클러스터에 대한 Kubernetes API 서버에 연결할 수 있게 해주는 connectedk8s 프록시를 시작합니다.
az connectedk8s proxy -n $CLUSTER_NAME -g $MANAGED_RESOURCE_GROUP &
kubectl
을 사용하여 클러스터로 요청을 보냅니다.kubectl get pods -A
이제 모든 노드 목록이 포함된 클러스터의 응답이 표시됩니다.
참고 항목
“클라이언트 프록시에 액세스 토큰을 게시하지 못했습니다. MSI에 연결하지 못함” 오류 메시지가 표시되면 az login
을 수행하여 Azure에 다시 인증해야 할 수 있습니다.
에이전트 풀 추가
이전 단계에서 만든 클러스터에는 노드 풀이 하나 있습니다. 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
리소스 정리
더 이상 필요하지 않은 경우 리소스 그룹을 삭제합니다. 리소스 그룹 및 리소스 그룹의 모든 리소스가 삭제됩니다.
리소스 그룹, Kubernetes 클러스터 및 Operator Nexus 네트워크 리소스를 제외한 모든 관련 리소스를 제거하려면 az group delete 명령을 사용합니다.
az group delete --name myResourceGroup --yes --no-wait
다음 단계
이제 클러스터 연결을 통해 직접 또는 Azure Operator Service Manager를 통해 CNF를 배포할 수 있습니다.