적용 대상: ✔️ AKS Automatic
AKS(Azure Kubernetes Service) 자동 개발자, DevOps 엔지니어 및 플랫폼 엔지니어에게 가장 쉽게 관리되는 Kubernetes 환경을 제공합니다. 최신 및 AI 애플리케이션에 이상적인 AKS Automatic은 AKS 클러스터 설정 및 작업을 자동화하고 모범 사례 구성을 포함합니다. 모든 기술 수준의 사용자는 애플리케이션에 대한 AKS Automatic의 보안, 성능 및 신뢰성을 활용할 수 있습니다. AKS Automatic에는 5분 이내에 99.9%의 적격 Pod 준비 작업이 완료되는 것을 보장하는 Pod 준비 SLA가 포함되어 있어, 애플리케이션에 대한 신뢰할 수 있는 자체 복구 인프라를 제공합니다. 이 빠른 시작에서는 Kubernetes 기본 개념을 이해하고 있다고 가정합니다. 자세한 내용은 AKS(Azure Kubernetes Service) 대한 핵심 개념을 참조하세요.
이 빠른 시작에서는 다음을 알아봅니다.
- 가상 네트워크를 만듭니다.
- 가상 네트워크를 통해 권한이 있는 관리 ID를 만듭니다.
- 가상 네트워크에 프라이빗 AKS 자동 클러스터를 배포합니다.
- 프라이빗 클러스터에 연결합니다.
- 소매 시나리오를 시뮬레이션하는 마이크로 서비스 및 웹 프런트 엔드 그룹을 사용하여 샘플 다중 컨테이너 애플리케이션을 실행합니다.
필수 조건
- Azure 계정이 없는 경우 free 계정 만듭니다.
- 이 문서에는 Azure CLI 버전 2.77.0 이상이 필요합니다. Azure Cloud Shell 사용하는 경우 최신 버전이 이미 설치되어 있습니다. 설치 또는 업그레이드가 필요하면 Azure CLI 설치를 참조하세요.
- API 서버 서브넷에
Network Contributor기본 제공 역할 할당이 있는 클러스터 ID입니다. -
Network Contributor을 지원하기 위해 가상 네트워크에 기본 제공 역할 할당이 있는 클러스터 ID입니다. -
Azure Kubernetes Service Cluster User Role및Azure Kubernetes Service RBAC Writer사용하여 클러스터에 액세스하는 사용자 ID입니다. -
*/28에 위임된Microsoft.ContainerService/managedClusters크기 이상의 전용 API 서버 서브넷이 있는 가상 네트워크입니다.- 서브넷에 NSG(네트워크 보안 그룹)가 연결된 경우 규칙에서 노드와 API 서버 간, Azure Load Balancer와 API 서버 간, 및 Pod 간 통신에 다음 트래픽을 허용하도록 해야 합니다.
- Azure Firewall 또는 기타 아웃바운드 제한 방법 또는 어플라이언스가 있는 경우 필수 아웃바운드 네트워크 규칙 및 FQDN 허용되었는지 확인합니다.
- AKS Automatic은 AKS 클러스터에서 Azure Policy를 활성화하지만, 더 원활한 환경을 위해 구독에
Microsoft.PolicyInsights리소스 공급자를 미리 등록해야 합니다. 자세한 내용은 Azure 리소스 공급자 및 형식 참조하세요.
제한점
- AKS 자동 클러스터의 시스템 노드 풀은 3개 이상의 사용 가능 영역, 임시 OS 디스크 및 Azure Linux OS를 지원하는 Azure 지역에 배포해야 합니다.
- AKS Automatic은 다음 지역에서 사용할 수 있습니다:
australiaeast,austriaeast,belgiumcentral,brazilsouth,canadacentral,centralindia,centralus,chilecentral,denmarkeast,eastasia,eastus,eastus2,francecentral,germanywestcentral,indonesiacentral,israelcentral,italynorth,japaneast,japanwest,koreacentral,malaysiawest,mexicocentral,newzealandnorth,northeurope,norwayeast,polandcentral,southafricanorth,southcentralus,southeastasia,spaincentral,swedencentral,switzerlandnorth,uaenorth,uksouth,westeurope,westus2,westus3. - AKS 자동 클러스터에는 node 리소스 그룹 잠금 미리 구성되어 있어 MC_ 리소스 그룹을 변경할 수 없으므로 기본 프라이빗 DNS 영역에서 가상 네트워크 링크가 차단됩니다. VNet 간 또는 사용자 지정 DNS 시나리오의 경우 사용자 지정 가상 네트워크에서 프라이빗 AKS(Azure Kubernetes Service) 자동 클러스터 만들기 따라 사용자 지정 네트워크 및 프라이빗 DNS를 사용합니다.
중요합니다
AKS Automatic은 구독에서 사용할 수 있는 용량에 따라 노드 풀에 대한 system 가상 머신 크기를 동적으로 선택하려고 시도합니다. 클러스터를 배포할 지역에서 다음 크기의 16개 vCPU 할당량이 구독에 있는지 확인합니다. Standard_D4lds_v5, Standard_D4ads_v5, Standard_D4ds_v5, Standard_D4d_v5, Standard_D4d_v4, Standard_DS3_v2, Standard_DS12_v2, Standard_D4alds_v6, Standard_D4lds_v6 또는 Standard_D4alds_v5. Azure 포털을 통해 특정 VM 제품군에 대한 할당량을 확인하고 할당량 증가 요청 제출할 수 있습니다.
추가 질문이 있는 경우 문제 해결 문서를 통해 자세히 알아보세요.
변수 정의
후속 단계에서 사용할 다음 변수를 정의합니다.
RG_NAME=automatic-rg
VNET_NAME=automatic-vnet
CLUSTER_NAME=automatic
IDENTITY_NAME=automatic-uami
LOCATION=eastus
SUBSCRIPTION_ID=$(az account show --query id -o tsv)
리소스 그룹 만들기
Azure 리소스 그룹은 Azure 리소스가 배포되고 관리되는 논리 그룹입니다.
az group create 명령을 사용하여 리소스 그룹을 만듭니다.
az group create -n ${RG_NAME} -l ${LOCATION}
다음 샘플 출력은 리소스 그룹을 성공적으로 만드는 것과 유사합니다.
{
"id": "/subscriptions/<guid>/resourceGroups/automatic-rg",
"location": "eastus",
"managedBy": null,
"name": "automatic-rg",
"properties": {
"provisioningState": "Succeeded"
},
"tags": null
}
가상 네트워크 만들기
az network vnet create 명령을 사용하여 가상 네트워크를 만듭니다. 명령을 사용하여 API 서버 서브넷 및 클러스터 서브넷을 만듭니다 az network vnet subnet create .
AKS Automatic에서 사용자 지정 가상 네트워크를 사용하는 경우 API 서버 서브넷을 만들고 Microsoft.ContainerService/managedClusters 위임해야 합니다. 이 서브넷은 AKS 서비스 권한을 부여하여 API 서버 Pod 및 내부 부하 분산 장치를 해당 서브넷에 삽입합니다. 다른 워크로드에는 서브넷을 사용할 수 없지만 동일한 가상 네트워크에 있는 여러 AKS 클러스터에 사용할 수 있습니다. 지원되는 최소 API 서버 서브넷 크기는 /28입니다.
경고
AKS 클러스터는 서브넷 주소 공간에 9개 이상의 IP를 예약합니다. IP 주소가 부족하면 API 서버 확장이 방지되고 API 서버가 중단될 수 있습니다.
az network vnet create --name ${VNET_NAME} \
--resource-group ${RG_NAME} \
--location ${LOCATION} \
--address-prefixes 172.19.0.0/16
az network vnet subnet create --resource-group ${RG_NAME} \
--vnet-name ${VNET_NAME} \
--name apiServerSubnet \
--delegations Microsoft.ContainerService/managedClusters \
--address-prefixes 172.19.0.0/28
az network vnet subnet create --resource-group ${RG_NAME} \
--vnet-name ${VNET_NAME} \
--name clusterSubnet \
--address-prefixes 172.19.1.0/24
네트워크 보안 그룹 규칙
가상 네트워크 내의 모든 트래픽은 기본적으로 허용됩니다. 그러나 서로 다른 서브넷 간의 트래픽을 제한하는 NSG(네트워크 보안 그룹) 규칙을 추가한 경우 NSG 보안 규칙에서 다음 유형의 통신을 허용하는지 확인합니다.
| 목적지 | 출처 | 프로토콜 | 항구 | 사용 |
|---|---|---|---|---|
| APIServer 서브넷 CIDR | 클러스터 서브넷 | TCP | 443 및 4443 | 노드와 API 서버 간 통신을 사용하도록 설정하는 데 필요합니다. |
| APIServer 서브넷 CIDR | Azure 부하 분산 장치 | TCP | 9988 | Azure Load Balancer API 서버 간의 통신을 사용하도록 설정하는 데 필요합니다. Azure Load Balancer와 API 서버 서브넷 CIDR 간의 모든 통신을 활성화할 수도 있습니다. |
| 노드 CIDR | 노드 CIDR | 모든 프로토콜 | 모든 포트 | 노드 간 통신을 사용하도록 설정하는 데 필요합니다. |
| 노드 CIDR | Pod CIDR | 모든 프로토콜 | 모든 포트 | 서비스 트래픽 라우팅에 필요합니다. |
| Pod CIDR | Pod CIDR | 모든 프로토콜 | 모든 포트 | Pod 간 및 Pod에서 서비스로의 트래픽(DNS 포함)에 필요합니다. |
관리 ID 만들기 및 가상 네트워크에 대한 권한 부여
az identity create 명령어를 사용하여 관리형 ID를 만들고 주체 ID를 검색합니다. 명령을 사용하여 가상 네트워크의 네트워크 기여자 역할을 관리 ID에 할당합니다 az role assignment create .
az identity create \
--resource-group ${RG_NAME} \
--name ${IDENTITY_NAME} \
--location ${LOCATION}
IDENTITY_PRINCIPAL_ID=$(az identity show --resource-group ${RG_NAME} --name ${IDENTITY_NAME} --query principalId -o tsv)
az role assignment create \
--scope "/subscriptions/${SUBSCRIPTION_ID}/resourceGroups/${RG_NAME}/providers/Microsoft.Network/virtualNetworks/${VNET_NAME}" \
--role "Network Contributor" \
--assignee-object-id "${IDENTITY_PRINCIPAL_ID}" \
--assignee-principal-type ServicePrincipal
사용자 지정 가상 네트워크에서 프라이빗 AKS 자동 클러스터 만들기
프라이빗 AKS 자동 클러스터를 만들려면 az aks create 명령을 사용합니다.
--enable-private-cluster 플래그의 사용을 유념하세요.
비고
클러스터의 공용 FQDN을 사용하지 않도록 설정 및 프라이빗 DNS 영역 구성과 같은 추가 옵션을 구성하려면 프라이빗 클러스터 설명서를 참조할 수 있습니다.
az aks create \
--resource-group ${RG_NAME} \
--name ${CLUSTER_NAME} \
--location ${LOCATION} \
--apiserver-subnet-id "/subscriptions/${SUBSCRIPTION_ID}/resourceGroups/${RG_NAME}/providers/Microsoft.Network/virtualNetworks/${VNET_NAME}/subnets/apiServerSubnet" \
--vnet-subnet-id "/subscriptions/${SUBSCRIPTION_ID}/resourceGroups/${RG_NAME}/providers/Microsoft.Network/virtualNetworks/${VNET_NAME}/subnets/clusterSubnet" \
--assign-identity "/subscriptions/${SUBSCRIPTION_ID}/resourcegroups/${RG_NAME}/providers/Microsoft.ManagedIdentity/userAssignedIdentities/${IDENTITY_NAME}" \
--sku automatic \
--enable-private-cluster \
--no-ssh-key
몇 분 후 명령이 완료되면 클러스터에 대한 JSON 형식 정보가 반환됩니다.
클러스터에 연결
AKS 자동 클러스터가 프라이빗 클러스터로 만들어지면 API 서버 엔드포인트에 공용 IP 주소가 없습니다. 예를 들어 kubectl 통해 API 서버를 관리하려면 클러스터의 Azure 가상 네트워크에 액세스할 수 있는 컴퓨터를 통해 연결해야 합니다. 프라이빗 클러스터에 대한 네트워크 연결을 설정할 경우, 몇 가지 옵션이 있습니다.
-
az vm create명령어에--vnet-name플래그를 사용하여 AKS 자동 클러스터와 동일한 가상 네트워크에 가상 머신을 만듭니다. - 별도의 가상 네트워크에서 가상 머신을 사용하고 가상 네트워크 피어링을 설정합니다.
- Express Route 또는 VPN 연결을 사용합니다.
- 프라이빗 엔드포인트 연결을 사용합니다.
AKS 클러스터와 동일한 가상 네트워크에 가상 머신을 만드는 것이 가장 쉬운 옵션입니다. ExpressRoute 및 VPN은 비용을 추가하고 추가 네트워킹 복잡성이 필요합니다. 가상 네트워크 피어링을 사용하려면 중첩되는 범위가 없도록 네트워크 CIDR 범위를 계획해야 합니다. 자세한 내용은 프라이빗 클러스터에 연결하기 위한 옵션을 참조하세요.
Kubernetes 클러스터를 관리하려면 Kubernetes 명령줄 클라이언트인 kubectl을 사용합니다. Azure Cloud Shell 사용하는 경우 kubectl 이미 설치되어 있습니다. 로컬로 설치 kubectl 하려면 az aks install-cli 명령을 실행합니다. AKS 자동 클러스터는 Microsoft Entra ID로 Kubernetes 역할 기반 액세스 제어 (RBAC)에 대해 구성됩니다.
Azure CLI을 사용하여 클러스터를 생성할 때, 사용자는 에 대해 Azure Kubernetes Service RBAC Cluster Admin이 할당됩니다.
kubectl 명령을 사용하여 Kubernetes 클러스터에 연결하도록 을 구성합니다. 이 명령은 자격 증명을 다운로드하고 이를 사용하도록 Kubernetes CLI를 구성합니다.
az aks get-credentials --resource-group ${RG_NAME} --name ${CLUSTER_NAME}
kubectl get 명령을 사용하여 클러스터에 대한 연결을 확인합니다. 이 명령은 클러스터 노드 목록을 반환합니다.
kubectl get nodes
다음 샘플 출력은 로그인하라는 메시지가 표시되는 방법을 보여줍니다.
To sign in, use a web browser to open the page https://microsoft.com/devicelogin and enter the code AAAAAAAAA to authenticate.
로그인한 후 다음 샘플 출력은 관리되는 시스템 노드 풀을 보여 줍니다. 노드 상태가 준비인지 확인합니다.
NAME STATUS ROLES AGE VERSION
aks-nodepool1-13213685-vmss000000 Ready agent 2m26s v1.28.5
aks-nodepool1-13213685-vmss000001 Ready agent 2m26s v1.28.5
aks-nodepool1-13213685-vmss000002 Ready agent 2m26s v1.28.5
가상 네트워크 만들기
이 Bicep 파일은 가상 네트워크를 정의합니다.
@description('The location of the managed cluster resource.')
param location string = resourceGroup().location
@description('The name of the virtual network.')
param vnetName string = 'aksAutomaticVnet'
@description('The address prefix of the virtual network.')
param addressPrefix string = '172.19.0.0/16'
@description('The name of the API server subnet.')
param apiServerSubnetName string = 'apiServerSubnet'
@description('The subnet prefix of the API server subnet.')
param apiServerSubnetPrefix string = '172.19.0.0/28'
@description('The name of the cluster subnet.')
param clusterSubnetName string = 'clusterSubnet'
@description('The subnet prefix of the cluster subnet.')
param clusterSubnetPrefix string = '172.19.1.0/24'
// Virtual network with an API server subnet and a cluster subnet
resource virtualNetwork 'Microsoft.Network/virtualNetworks@2023-09-01' = {
name: vnetName
location: location
properties: {
addressSpace: {
addressPrefixes: [ addressPrefix ]
}
subnets: [
{
name: apiServerSubnetName
properties: {
addressPrefix: apiServerSubnetPrefix
}
}
{
name: clusterSubnetName
properties: {
addressPrefix: clusterSubnetPrefix
}
}
]
}
}
output apiServerSubnetId string = resourceId('Microsoft.Network/virtualNetworks/subnets', vnetName, apiServerSubnetName)
output clusterSubnetId string = resourceId('Microsoft.Network/virtualNetworks/subnets', vnetName, clusterSubnetName)
Bicep 파일 virtualNetwork.bicep을 로컬 컴퓨터에 저장합니다.
중요합니다
Bicep 파일은
Azure CLI 사용하여 Bicep 파일을 배포합니다.
az deployment group create --resource-group <resource-group> --template-file virtualNetwork.bicep
가상 네트워크 내의 모든 트래픽은 기본적으로 허용됩니다. 그러나 서로 다른 서브넷 간의 트래픽을 제한하는 NSG(네트워크 보안 그룹) 규칙을 추가한 경우 NSG 보안 규칙에서 다음 유형의 통신을 허용하는지 확인합니다.
| 목적지 | 출처 | 프로토콜 | 항구 | 사용 |
|---|---|---|---|---|
| APIServer 서브넷 CIDR | 클러스터 서브넷 | TCP | 443 및 4443 | 노드와 API 서버 간 통신을 사용하도록 설정하는 데 필요합니다. |
| APIServer 서브넷 CIDR | Azure 부하 분산 장치 | TCP | 9988 | Azure Load Balancer API 서버 간의 통신을 사용하도록 설정하는 데 필요합니다. Azure Load Balancer와 API 서버 서브넷 CIDR 간의 모든 통신을 활성화할 수도 있습니다. |
관리 ID 만들기
이 Bicep 파일은 사용자가 할당한 관리 ID를 정의합니다.
param location string = resourceGroup().location
param uamiName string = 'aksAutomaticUAMI'
resource userAssignedManagedIdentity 'Microsoft.ManagedIdentity/userAssignedIdentities@2023-01-31' = {
name: uamiName
location: location
}
output uamiId string = userAssignedManagedIdentity.id
output uamiPrincipalId string = userAssignedManagedIdentity.properties.principalId
output uamiClientId string = userAssignedManagedIdentity.properties.clientId
Bicep 파일 uami.bicep을 로컬 컴퓨터에 저장하세요.
중요합니다
Bicep 파일은 uamiName 매개 변수를 aksAutomaticUAMI 설정합니다. 다른 ID 이름을 사용하려면 문자열을 원하는 이름으로 업데이트해야 합니다.
Azure CLI 사용하여 Bicep 파일을 배포합니다.
az deployment group create --resource-group <resource-group> --template-file uami.bicep
가상 네트워크를 통해 네트워크 기여자 역할 할당
이 Bicep 파일은 가상 네트워크를 통해 역할 할당을 정의합니다.
@description('The name of the virtual network.')
param vnetName string = 'aksAutomaticVnet'
@description('The principal ID of the user assigned managed identity.')
param uamiPrincipalId string
// Get a reference to the virtual network
resource virtualNetwork 'Microsoft.Network/virtualNetworks@2023-09-01' existing ={
name: vnetName
}
// Assign the Network Contributor role to the user assigned managed identity on the virtual network
// '4d97b98b-1d4f-4787-a291-c67834d212e7' is the built-in Network Contributor role definition
// See: https://dotnet.territoriali.olinfo.it/en-us/azure/role-based-access-control/built-in-roles/networking#network-contributor
resource networkContributorRoleAssignmentToVirtualNetwork 'Microsoft.Authorization/roleAssignments@2022-04-01' = {
name: guid(uamiPrincipalId, '4d97b98b-1d4f-4787-a291-c67834d212e7', resourceGroup().id, virtualNetwork.name)
scope: virtualNetwork
properties: {
roleDefinitionId: resourceId('Microsoft.Authorization/roleDefinitions', '4d97b98b-1d4f-4787-a291-c67834d212e7')
principalId: uamiPrincipalId
}
}
Bicep 파일 roleAssignments.bicep을 로컬 컴퓨터에 저장하세요.
중요합니다
Bicep 파일은 vnetName 매개 변수를 aksAutomaticVnet 설정합니다. 다른 가상 네트워크 이름을 사용한 경우 문자열을 기본 가상 네트워크 이름으로 업데이트해야 합니다.
Azure CLI 사용하여 Bicep 파일을 배포합니다. 사용자 할당 ID 보안 주체 ID를 제공해야 합니다.
az deployment group create --resource-group <resource-group> --template-file roleAssignments.bicep \
--parameters uamiPrincipalId=<user assigned identity prinicipal id>
사용자 지정 가상 네트워크에서 프라이빗 AKS 자동 클러스터 만들기
이 Bicep 파일은 AKS 자동 클러스터를 정의합니다.
비고
프라이빗 클러스터 설명서를 참조하여 클러스터 공용 FQDN을 사용하지 않도록 설정 및 프라이빗 DNS 영역 구성과 같은 추가 옵션을 구성할 수 있습니다.
@description('The name of the managed cluster resource.')
param clusterName string = 'aksAutomaticCluster'
@description('The location of the managed cluster resource.')
param location string = resourceGroup().location
@description('The resource ID of the API server subnet.')
param apiServerSubnetId string
@description('The resource ID of the cluster subnet.')
param clusterSubnetId string
@description('The resource ID of the user assigned managed identity.')
param uamiId string
/// Create the private AKS Automatic cluster using the custom virtual network and user assigned managed identity
resource aks 'Microsoft.ContainerService/managedClusters@2024-03-02-preview' = {
name: clusterName
location: location
sku: {
name: 'Automatic'
}
properties: {
agentPoolProfiles: [
{
name: 'systempool'
mode: 'System'
count: 3
vnetSubnetID: clusterSubnetId
}
]
apiServerAccessProfile: {
subnetId: apiServerSubnetId
enablePrivateCluster: true
}
networkProfile: {
outboundType: 'loadBalancer'
}
}
identity: {
type: 'UserAssigned'
userAssignedIdentities: {
'${uamiId}': {}
}
}
}
Bicep 파일 aks.bicep을(를) 로컬 컴퓨터에 저장합니다.
중요합니다
Bicep 파일은 clusterName 매개 변수를 aksAutomaticCluster 설정합니다. 다른 클러스터 이름을 원하는 경우 문자열을 기본 클러스터 이름으로 업데이트해야 합니다.
Azure CLI 사용하여 Bicep 파일을 배포합니다. API 서버 서브넷 리소스 ID, 클러스터 서브넷 리소스 ID 및 사용자 할당 ID 보안 주체 ID를 제공해야 합니다.
az deployment group create --resource-group <resource-group> --template-file aks.bicep \
--parameters apiServerSubnetId=<API server subnet resource id> \
--parameters clusterSubnetId=<cluster subnet resource id> \
--parameters uamiPrincipalId=<user assigned identity prinicipal id>
클러스터에 연결
AKS 자동 클러스터가 프라이빗 클러스터로 만들어지면 API 서버 엔드포인트에 공용 IP 주소가 없습니다. 예를 들어 kubectl 통해 API 서버를 관리하려면 클러스터의 Azure 가상 네트워크에 액세스할 수 있는 컴퓨터를 통해 연결해야 합니다. 프라이빗 클러스터에 대한 네트워크 연결을 설정할 경우, 몇 가지 옵션이 있습니다.
-
az vm create명령어에--vnet-name플래그를 사용하여 AKS 자동 클러스터와 동일한 가상 네트워크에 가상 머신을 만듭니다. - 별도의 가상 네트워크에서 가상 머신을 사용하고 가상 네트워크 피어링을 설정합니다.
- Express Route 또는 VPN 연결을 사용합니다.
- 프라이빗 엔드포인트 연결을 사용합니다.
AKS 클러스터와 동일한 가상 네트워크에 가상 머신을 만드는 것이 가장 쉬운 옵션입니다. Express Route 및 VPN은 비용을 증가시키며 추가적인 네트워킹 복잡성을 요구합니다. 가상 네트워크 피어링을 사용하려면 중첩되는 범위가 없도록 네트워크 CIDR 범위를 계획해야 합니다. 자세한 내용은 프라이빗 클러스터에 연결하기 위한 옵션을 참조하세요.
Kubernetes 클러스터를 관리하려면 Kubernetes 명령줄 클라이언트인 kubectl을 사용합니다. Azure Cloud Shell 사용하는 경우 kubectl 이미 설치되어 있습니다. 로컬로 설치 kubectl 하려면 az aks install-cli 명령을 실행합니다. AKS 자동 클러스터는 Microsoft Entra ID로 Kubernetes 역할 기반 액세스 제어 (RBAC)에 대해 구성됩니다.
중요합니다
Bicep를 사용하여 클러스터를 만들 때, 클러스터 또는 특정 네임스페이스 범위로 사용자에게 내장 역할 중 하나를 할당해야 합니다. 예를 들어 Azure Kubernetes Service RBAC Reader, Azure Kubernetes Service RBAC Writer, Azure Kubernetes Service RBAC Admin 또는 Azure Kubernetes Service RBAC Cluster Admin과 같은 역할을 az role assignment create --role "Azure Kubernetes Service RBAC Cluster Admin" --scope <AKS cluster resource id> --assignee user@contoso.com을 사용하여 할당할 수 있습니다. 또한 사용자에게 Azure Kubernetes Service Cluster User 실행할 수 있는 az aks get-credentials 기본 제공 역할이 있는지 확인한 다음, az aks get-credentials 명령을 사용하여 AKS 클러스터의 kubeconfig를 가져옵니다.
kubectl 명령을 사용하여 Kubernetes 클러스터에 연결하도록 을 구성합니다. 이 명령은 자격 증명을 다운로드하고 이를 사용하도록 Kubernetes CLI를 구성합니다.
az aks get-credentials --resource-group <resource-group> --name <cluster-name>
kubectl get 명령을 사용하여 클러스터에 대한 연결을 확인합니다. 이 명령은 클러스터 노드 목록을 반환합니다.
kubectl get nodes
다음 샘플 출력은 로그인하라는 메시지가 표시되는 방법을 보여줍니다.
To sign in, use a web browser to open the page https://microsoft.com/devicelogin and enter the code AAAAAAAAA to authenticate.
로그인한 후 다음 샘플 출력은 관리되는 시스템 노드 풀을 보여 줍니다. 노드 상태가 준비인지 확인합니다.
NAME STATUS ROLES AGE VERSION
aks-nodepool1-13213685-vmss000000 Ready agent 2m26s v1.28.5
aks-nodepool1-13213685-vmss000001 Ready agent 2m26s v1.28.5
aks-nodepool1-13213685-vmss000002 Ready agent 2m26s v1.28.5
애플리케이션 배포
애플리케이션을 배포하려면 매니페스트 파일을 사용하여 AKS Store 애플리케이션 실행하는 데 필요한 모든 개체를 만듭니다. Kubernetes 매니페스트 파일은 실행할 컨테이너 이미지와 같은 클러스터에 대해 원하는 상태를 정의합니다. 매니페스트에는 다음 Kubernetes 배포 및 서비스가 포함됩니다.
- 스토어 프런트: 고객이 제품을 보고 주문을 할 수 있는 웹 애플리케이션입니다.
- 제품 서비스: 제품 정보를 표시합니다.
- 주문 서비스: 주문을 합니다.
- Rabbit MQ: 주문 큐에 대한 메시지 큐입니다.
비고
프로덕션을 위한 영구 스토리지 없이 Rabbit MQ와 같은 상태 저장 컨테이너를 실행하지 않는 것이 좋습니다. 이러한 컨테이너는 간단히 하기 위해 사용되지만 Azure Cosmos DB 또는 Azure Service Bus 같은 관리되는 서비스를 사용하는 것이 좋습니다.
Kubernetes 리소스를 배포할 네임스페이스
aks-store-demo를 만듭니다.kubectl create ns aks-store-demokubectl apply 명령을 사용하여 네임스페이스에 애플리케이션을
aks-store-demo배포합니다. 배포를 정의하는 YAML 파일은 GitHub.kubectl apply -n aks-store-demo -f https://raw.githubusercontent.com/Azure-Samples/aks-store-demo/main/aks-store-ingress-quickstart.yaml다음 샘플 출력은 배포 및 서비스를 보여 줍니다.
statefulset.apps/rabbitmq created configmap/rabbitmq-enabled-plugins created service/rabbitmq created deployment.apps/order-service created service/order-service created deployment.apps/product-service created service/product-service created deployment.apps/store-front created service/store-front created ingress/store-front created
애플리케이션 테스트
애플리케이션이 실행되면 애플리케이션 프런트 엔드를 인터넷에 공개하는 Kubernetes 서비스가 만들어집니다. 이 프로세스를 완료하는 데 몇 분 정도 걸릴 수 있습니다.
배포된 Pod의 상태는 kubectl get pods 명령을 사용하여 확인합니다. 계속하기 전에 모든 Pod가
Running인지 확인합니다. 배포하는 첫 번째 워크로드인 경우 노드 자동 프로비저닝 에서 Pod를 실행하는 노드 풀을 만드는 데 몇 분 정도 걸릴 수 있습니다.kubectl get pods -n aks-store-demostore-front 응용 프로그램의 공용 IP 주소를 확인합니다. 인수와 함께
--watch명령을 사용하여 진행 상황을 모니터링합니다.kubectl get ingress store-front -n aks-store-demo --watch서비스에 대한
store-front출력은 처음에 비어 있습니다.NAME CLASS HOSTS ADDRESS PORTS AGE store-front webapprouting.kubernetes.azure.com * 80 12m비어 있는 주소가 실제 공용 IP 주소로 변경되면
CTRL-C를 사용하여kubectl감시 프로세스를 중지합니다.다음 샘플 출력은 서비스에 할당된 유효한 공용 IP 주소를 보여 줍니다.
NAME CLASS HOSTS ADDRESS PORTS AGE store-front webapprouting.kubernetes.azure.com * 4.255.22.196 80 12m인그레스의 외부 IP 주소로 웹 브라우저를 열고, Azure 스토어 앱이 작동하는 모습을 확인해 보세요.
클러스터 삭제
AKS 자습서 진행하지 않으려면 불필요한 리소스를 정리하여 Azure 요금을 방지합니다. az group delete 명령을 실행하여 리소스 그룹, 컨테이너 서비스 및 모든 관련 리소스를 제거합니다.
az group delete --name <resource-group> --yes --no-wait
비고
AKS 클러스터는 사용자 할당 관리 ID를 사용하여 만들어졌습니다. 해당 ID가 더 이상 필요하지 않은 경우 수동으로 제거할 수 있습니다.
다음 단계
이 빠른 시작에서는 사용자 지정 가상 네트워크 내에서 AKS Automatic 을 사용하여 프라이빗 Kubernetes 클러스터를 배포한 다음 간단한 다중 컨테이너 애플리케이션을 배포했습니다. 이 샘플 응용 프로그램은 데모 목적으로만 사용되며 Kubernetes 응용 프로그램에 대한 모든 모범 사례를 나타내지는 않습니다. 프로덕션용 AKS를 사용하여 전체 솔루션을 만드는 방법에 대한 지침은 AKS 솔루션 지침을 참조하세요.
AKS Automatic에 대해 자세히 알아보려면 계속 소개하세요.