연습 - Azure CNI를 사용하여 Azure Kubernetes Service 클러스터 배포
참고
이 연습은 선택 사항입니다. 이 연습을 완료하려면 시작하기 전에 Azure 구독을 만들어야 합니다. Azure 계정이 없거나 지금 만들지 않으려는 경우 제시되는 정보를 이해할 수 있도록 지침을 끝까지 읽어 보세요.
이 연습에서는 가상 네트워크, 서브넷 및 ID를 배포한 다음 Azure CNI(Container Networking Interface) 플러그 인을 사용하여 AKS(Azure Kubernetes Service) 클러스터를 배포합니다.
회사의 IT 부서에 연락하여 애플리케이션 요구 사항, VM(가상 머신) 크기 및 네트워크 크기에 대해 수집한 정보를 제공했습니다. IT 부서는 클러스터에 사용할 수 있는 몇 가지 네트워크 주소 범위를 제공했습니다.
다음 표에는 IT 부서에서 제공하는 요구 사항과 IP 주소가 나와 있습니다.
항목 | 설명 | IP 주소 |
---|---|---|
AKS 서브넷 | 클러스터의 노드 및 Pod에 대한 IP 주소입니다. 사용 가능한 IP 주소 248개가 필요합니다. | 10.150.20.0/24 |
Kubernetes Service 서브넷 | Kubernetes Service에 대한 클러스터 내에서 사용되는 IP 주소입니다. 다른 가상 네트워크 또는 온-프레미스 네트워크와 충돌하지 않아야 합니다. | 10.240.0.0/24 |
DNS(도메인 이름 시스템) 서비스 IP 주소 | Kubernetes Service 서브넷에 있어야 하지만, 사용 가능한 범위의 첫 번째 IP 주소가 될 수는 없습니다. | 10.240.0.10 |
- AKS 서브넷에 사용 가능한 IP 주소가 248개 필요하다고 확인했습니다. IT 부서는 Azure가 모든 서브넷에서 예약하는 5개 주소를 고려한 후 사용 가능한 IP 주소 251개를 제공하는 네트워크 10.150.20.0/24를 제공했습니다.
- Kubernetes Service 서브넷은 다른 Azure 가상 네트워크에서 사용되지 않으며 온-프레미스 네트워크 범위와 충돌하지 않는 IP 주소 그룹입니다. 이 주소 범위는 클러스터 내에서만 사용됩니다. IT 부서로부터 10.240.0.0/24를 사용해야 한다고 지시받았습니다.
- DNS 서비스 IP 주소는 Kubernetes Service 서브넷 주소 범위 내의 단일 IP 주소지만, 해당 범위의 첫 번째 IP 주소일 수 없습니다. DNS IP 주소로 10.240.0.10을 사용하기로 결정했습니다.
가상 네트워크 및 서브넷 만들기
이 연습에서는 가상 네트워크와 서브넷을 만듭니다. 실제 환경에서는 IT 부서에 네트워크 관리를 담당하는 팀이 있어 해당 팀이 이러한 리소스를 만들 수도 있습니다.
Azure Cloud Shell을 시작합니다.
아직 Azure에 로그인하지 않은 경우
az login
명령을 사용하여 Azure 계정에 로그인합니다.az login
가까운 Azure 지역(예: eastus)을 선택합니다. 나머지 연습에서 사용할 수 있도록 값을 환경 변수에 저장합니다.
AKSLocation=eastus
az group create
명령을 사용하여 이 연습에서 리소스를 보관할 리소스 그룹 AKSLearn을 만듭니다.az group create --location $AKSLocation --name AKSLearn
az network vnet create
명령을 사용하여 가상 네트워크 AKSVirtualNetwork를 만듭니다.az network vnet create \ --name AKSVirtualNetwork \ --resource-group AKSLearn \ --address-prefixes 10.150.0.0/16 \ --location $AKSLocation
az network vnet subnet create
명령을 사용하여 서브넷 AKSSubnet을 만들고 IT 부서에서 제공하는 주소 범위를 지정합니다.az network vnet subnet create \ --resource-group AKSLearn \ --vnet-name AKSVirtualNetwork \ --name AKSSubnet \ --address-prefixes 10.150.20.0/24
Azure 관리 ID 만들기
Azure 구독 내의 리소스에 AKS가 액세스하는 데 사용할 Azure 관리 ID를 만들어야 합니다. 다음 두 명령은 Azure Managed Identity를 만든 다음, 나중에 사용할 수 있도록 고유한 ID 값을 환경 변수에 저장합니다.
명령을 사용하여 Azure 관리 ID
az identity create
AKSIdentity를 만듭니다.az identity create \ --name AKSIdentity \ --resource-group AKSLearn
az identity show
명령을 사용하여 관리 ID의 ID를 가져오고 이후 명령에서 사용할 환경 변수 identityId에 저장합니다.identityId=$(az identity show \ --name AKSIdentity \ --resource-group AKSLearn \ --query id \ --output tsv)
AKS 클러스터 만들기
az network vnet subnet list
명령을 사용하여 관리 ID의 ID를 가져와 이후 명령에서 사용할 환경 변수 identityId에 저장합니다.subnetId=$(az network vnet subnet list \ --vnet-name AKSVirtualNetwork \ --resource-group AKSLearn \ --query "[?name=='AKSSubnet'].id" \ --output tsv)
az aks create
명령을 사용하여 AKS 클러스터 AKSCluster를 만듭니다.az aks create \ --name AKSCluster \ --resource-group AKSLearn \ --location $AKSLocation \ --network-plugin azure \ --vnet-subnet-id $subnetId \ --service-cidr 10.240.0.0/24 \ --dns-service-ip 10.240.0.10 \ --generate-ssh-keys \ --enable-managed-identity \ --assign-identity $identityId \ --node-vm-size Standard_F8s_v2 \ --node-count 3
다음 표는
az aks create
명령에 사용되는 매개 변수를 나타냅니다.매개 변수 설명 --name
만들려는 클러스터의 이름입니다. --resource-group
클러스터를 만들어야 하는 리소스 그룹입니다. --location
클러스터를 만들어야 하는 Azure 지역입니다. --network-plugin
사용할 네트워크 플러그 인을 지정합니다. --vnet-subnet-id
사용할 서브넷의 리소스 ID를 지정합니다. --service-cidr
사용할 Kubernetes 서비스 주소 범위를 지정합니다. --dns-service-ip
사용할 DNS IP 주소를 지정합니다. --generate-ssh-keys
노드를 보호하는 데 사용되는 SSH 키 집합을 만듭니다. --enable-managed-identity
Azure 구독의 리소스에 액세스하기 위한 Azure 관리 ID를 사용하도록 설정합니다. --assign-identity
사용할 Azure 관리 ID의 ID 값을 지정합니다. --node-vm-size
사용할 VM 크기를 지정합니다. --node-count
만들 노드 수를 지정합니다. 클러스터가 성공적으로 배포되면
az aks nodepool list
명령을 사용하여 노드 풀의 세부 정보를 확인합니다.az aks nodepool list \ --cluster-name AKSCluster \ --resource-group AKSLearn \ --output table
출력은 다음 예제 출력과 비슷하게 됩니다.
Name OsType VmSize Count MaxPods ProvisioningState Mode --------- -------- --------------- ------- --------- ------------------- ------ nodepool1 Linux Standard_F8s_v2 3 30 Succeeded System
출력에서 세 개의 Standard_F8s_v2 형식 노드, MaxPods 값 30,
System
의 노드 풀 모드가 있음을 확인할 수 있습니다.
클러스터에 대한 IP 주소 사용량 확인
az network vnet subnet list
명령을 사용하여 클러스터에서 사용 중인 IP 주소 개수를 확인합니다.az network vnet subnet list \ --vnet-name AKSVirtualNetwork \ --resource-group AKSLearn \ --query "[].ipConfigurations.length(@)" \ --output table
이 명령은 JMESPath 쿼리 문자열을 사용하여 서브넷에 정의된
ipConfigurations
수를 확인합니다. 최대 출력은 93이어야 합니다. 시작할 세 개의 노드를 배포했기 때문에 각 노드에 하나의 IP 주소가 있습니다. 최대 Pod에 기본값 30을 사용했기 때문에 각 노드에 Pod에서 사용할 미리 할당된 30개의 IP 주소가 있습니다. 지금까지 할당된 총 IP 주소 수는3 x nodes + (30 pods * 3 nodes) = 93
개입니다. 그러나 일부 주소는 예약되어 있으므로 출력이 줄어들 수 있습니다.
클러스터에 노드 추가
클러스터를 도용하여 노드를 하나 더 추가하면 IP 주소 사용이 어떻게 영향을 받는지 살펴보겠습니다.
클러스터를 스케일 업하고
az aks scale
명령을 사용하여 노드를 하나 더 추가합니다.az aks scale \ --name AKSCluster \ --resource-group AKSLearn \ --node-count=4
명령이 성공적으로 완료되면
az aks nodepool list
명령을 사용하여 노드 풀의 새 세부 정보를 확인합니다.az aks nodepool list \ --cluster-name AKSCluster \ --resource-group AKSLearn \ --output table
출력은 다음 출력 예와 비슷하며, 이제 4개의 노드가 있습니다.
Name OsType VmSize Count MaxPods ProvisioningState Mode --------- -------- --------------- ------- --------- ------------------- ------ nodepool1 Linux Standard_F8s_v2 4 30 Succeeded System
az network vnet subnet list
명령을 사용하여 클러스터에서 현재 사용 중인 IP 주소 개수를 확인합니다.az network vnet subnet list \ --vnet-name AKSVirtualNetwork \ --resource-group AKSLearn \ --query "[].ipConfigurations.length(@)" \ --output table
이번에는 최대 출력이 지난번보다 31이 늘어나 124가 되어야 합니다. 이는 새 노드에 대한 하나 이상의 IP 주소와 해당 노드에서 실행할 Pod에 대해 미리 할당된 다른 30개의 IP 주소입니다. 그러나 일부 주소는 예약되어 있으므로 출력이 줄어들 수 있습니다.