빠른 시작: Azure Resource Manager 템플릿을 사용하여 Kubernetes 클러스터 배포
적용 대상: Azure Stack HCI, 버전 23H2
이 빠른 시작에서는 Azure Resource Manager 템플릿을 사용하여 AKS Arc에 Kubernetes 클러스터를 배포하는 방법을 보여 줍니다. Azure Arc는 Azure 관리 기능을 어디서나 Kubernetes 클러스터로 확장하여 다양한 환경을 관리하는 통합된 접근 방식을 제공합니다.
시작하기 전에
이 문서에서는 Kubernetes 개념에 대한 기본 지식이 있다고 가정합니다.
Resource Manager 템플릿을 배포하려면 배포 중인 리소스에 대한 쓰기 액세스 권한과 Microsoft.Resources/deployments 리소스 유형의 모든 작업에 대한 액세스 권한이 필요합니다. 예를 들어 가상 머신을 배포하려면 Microsoft.Compute/virtualMachines/write 및 Microsoft.Resources/deployments/* 권한이 필요합니다. 역할 및 사용 권한 목록은 Azure 기본 제공 역할을 참조하세요.
사전 요구 사항
- 활성 구독이 있는 Azure 계정.
- Azure Stack HCI 23H2 클러스터.
- 최신 Azure CLI 버전입니다.
1단계: Azure 계정 준비
Azure에 로그인: 터미널 또는 명령 프롬프트를 열고 Azure CLI를 사용하여 Azure 계정에 로그인합니다.
az login
구독 설정: 을 구독 ID로 대체
<your-subscription-id>
합니다.az account set --subscription "<your-subscription-id>"
2단계: Azure CLI를 사용하여 SSH 키 쌍 만들기
az sshkey create --name "mySSHKey" --resource-group "myResourceGroup"
또는 ssh-keygen을 사용하여 SSH 키 쌍을 만듭니다.
ssh-keygen -t rsa -b 4096
템플릿을 배포하려면 SSH 쌍에서 공개 키를 제공해야 합니다. 공개 키를 검색하려면 다음 명령을 사용합니다 az sshkey show
.
az sshkey show --name "mySSHKey" --resource-group "myResourceGroup" --query "publicKey"
기본적으로 SSH 키 파일은 ~/.ssh 디렉터리에 만들어집니다.
az sshkey create
또는 ssh-keygen
명령을 실행하여 동일한 이름의 기존 SSH 키 쌍을 덮어씁니다.
SSH 생성에 대한 자세한 내용은 Azure에서 인증용 SSH 키 생성 및 관리를 참조하세요.
3단계: 템플릿 검토
이 빠른 시작에서 사용되는 템플릿은 Azure 빠른 시작 템플릿 리포지토리에서 가져옵니다.
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"provisionedClusterName": {
"type": "string",
"defaultValue": "aksarc-armcluster",
"metadata": {
"description": "The name of the AKS Arc Cluster resource."
}
},
"location": {
"type": "string",
"defaultValue": "eastus",
"metadata": {
"description": "The location of the AKS Arc Cluster resource."
}
},
"resourceTags": {
"type": "object",
"defaultValue": {}
},
"sshRSAPublicKey": {
"type": "string",
"metadata": {
"description": "Configure all linux machines with the SSH RSA public key string. Your key should include three parts, for example 'ssh-rsa AAAAB...snip...UcyupgH '"
}
},
"enableAHUB": {
"type": "string",
"defaultValue": "NotApplicable",
"metadata": {
"description": "Azure Hybrid Benefit for Windows Server licenses. NotApplicable, True, False."
}
},
"agentName": {
"type": "string",
"defaultValue": "nodepool",
"metadata": {
"description": "The name of the node pool."
}
},
"agentVMSize": {
"type": "string",
"defaultValue": "Standard_A4_v2",
"metadata": {
"description": "The VM size for node pools."
}
},
"agentCount": {
"type": "int",
"defaultValue": 1,
"minValue": 1,
"maxValue": 50,
"metadata": {
"description": "The number of nodes for the cluster."
}
},
"agentOsType": {
"type": "string",
"defaultValue": "Linux",
"metadata": {
"description": "The OS Type for the agent pool. Values are Linux and Windows."
}
},
"loadBalancerCount": {
"type": "int",
"defaultValue": 0,
"metadata": {
"description": "The number of load balancers."
}
},
"kubernetesVersion": {
"type": "string",
"metadata": {
"description": "The version of Kubernetes."
}
},
"controlPlaneNodeCount": {
"type": "int",
"defaultValue": 1,
"minValue": 1,
"maxValue": 5,
"metadata": {
"description": "The number of control plane nodes for the cluster."
}
},
"controlPlaneIp": {
"type": "string",
"defaultValue": "<default_value>",
"metadata": {
"description": "Control plane IP address."
}
},
"controlPlaneVMSize": {
"type": "string",
"defaultValue": "Standard_A4_v2",
"metadata": {
"description": "The VM size for control plane."
}
},
"vnetSubnetIds": {
"type": "array",
"metadata": {
"description": "List of subnet Ids for the AKS cluster."
}
},
"podCidr": {
"type": "string",
"defaultValue": "10.244.0.0/16",
"metadata": {
"description": "The VM size for control plane."
}
},
"networkPolicy": {
"type": "string",
"defaultValue": "calico",
"metadata": {
"description": "Network policy to use for Kubernetes pods. Only options supported is calico."
}
},
"customLocation": {
"type": "string",
"metadata": {
"description": "Fully qualified custom location resource Id."
}
}
},
"resources": [
{
"apiVersion": "2024-01-01",
"type": "Microsoft.Kubernetes/ConnectedClusters",
"kind": "ProvisionedCluster",
"location": "[parameters('location')]",
"name": "[parameters('provisionedClusterName')]",
"tags": "[parameters('resourceTags')]",
"identity": {
"type": "SystemAssigned"
},
"properties": {
"agentPublicKeyCertificate":"" ,
"aadProfile": {
"enableAzureRBAC": false
}
}
},
{
"apiVersion": "2024-01-01",
"type": "microsoft.hybridcontainerservice/provisionedclusterinstances",
"name": "default",
"scope": "[concat('Microsoft.Kubernetes/ConnectedClusters', '/', parameters('provisionedClusterName'))]",
"dependsOn": [
"[resourceId('Microsoft.Kubernetes/ConnectedClusters', parameters('provisionedClusterName'))]"
],
"properties": {
"agentPoolProfiles": [
{
"count": "[parameters('agentCount')]",
"name":"[parameters('agentName')]",
"osType": "[parameters('agentOsType')]",
"vmSize": "[parameters('agentVMSize')]"
}
],
"cloudProviderProfile": {
"infraNetworkProfile": {
"vnetSubnetIds": "[parameters('vnetSubnetIds')]"
}
},
"controlPlane": {
"count": "[parameters('controlPlaneNodeCount')]",
"controlPlaneEndpoint": {
"hostIP": "[parameters('controlPlaneIp')]"
},
"vmSize": "[parameters('controlPlaneVMSize')]"
},
"licenseProfile": {
"azureHybridBenefit": "[parameters('enableAHUB')]"
},
"kubernetesVersion": "[parameters('kubernetesVersion')]",
"linuxProfile": {
"ssh": {
"publicKeys": [
{
"keyData": "[parameters('sshRSAPublicKey')]"
}
]
}
},
"networkProfile": {
"loadBalancerProfile": {
"count": "[parameters('loadBalancerCount')]"
},
"networkPolicy": "[parameters('networkPolicy')]",
"podCidr": "[parameters('podCidr')]"
},
"storageProfile": {
"nfsCsiDriver": {
"enabled": false
},
"smbCsiDriver": {
"enabled": false
}
}
},
"extendedLocation": {
"name": "[parameters('customLocation')]",
"type": "CustomLocation"
}
}
]
}
4단계: 템플릿 배포
템플릿을 배포하려면 다음 명령을 실행하여 Kubernetes 클러스터를 배포합니다.
az deployment group create \
--name "<deployment-name>" \
--resource-group "<resource-group-name>" \
--template-uri "https://raw.githubusercontent.com/Azure/azure-quickstart-templates/master/quickstarts/microsoft.kubernetes/aks-arc/azuredeploy.json" \
--parameters provisionedClusterName="<cluster-name> location="eastus" sshRSApublicKey="" etc..."
클러스터를 만드는 데 몇 분이 걸립니다. 다음 단계로 넘어가기 전에 클러스터가 성공적으로 배포될 때까지 기다립니다.
5단계: 배포 확인
배포가 완료되면 다음 명령을 사용하여 Kubernetes 클러스터가 실행 중인지 확인합니다.
az aksarc show --resource-group "<resource-group-name>" --name "<cluster-name>" --output table
6단계: 클러스터에 연결
클러스터에 연결하려면 명령을 실행합니다
az connectedk8s proxy
. 명령은 클라이언트 컴퓨터에서 프록시 이진 파일을 다운로드하고 실행하고 클러스터와 연결된 kubeconfig 파일을 가져옵니다.az connectedk8s proxy --name <cluster name> -g <resource group>
또는 Kubernetes 명령줄 클라이언트 kubectl을 사용합니다. Azure Cloud Shell 사용하는 경우 kubectl이 이미 설치되어 있습니다. kubectl을 로컬로 설치하고 실행하려면 명령을 실행합니다
az aksarc install-cli
.명령을 사용하여 Kubernetes 클러스터에 연결하도록 kubectl 을 구성합니다
az aksarc get-credentials
. 이 명령은 자격 증명을 다운로드하고 해당 자격 증명을 사용하도록 Kubernetes CLI를 구성합니다.az aksarc get-credentials --resource-group "<resource-group-name>" --name "<cluster-name>"
kubectl get
명령을 사용하여 클러스터에 대한 연결을 확인합니다. 이 명령은 클러스터 노드 목록을 반환합니다.kubectl get nodes -A --kubeconfig .\<path to kubecofig>
다음 예제 출력은 이전 단계에서 만든 세 개의 노드를 보여 줍니다. 노드 상태가 준비인지 확인합니다.
NAME STATUS ROLES AGE VERSION aks-agentpool-27442051-vmss000000 Ready agent 10m v1.27.7 aks-agentpool-27442051-vmss000001 Ready agent 10m v1.27.7 aks-agentpool-27442051-vmss000002 Ready agent 11m v1.27.7
템플릿 리소스
connectedClusters
Name | Description | 값 |
---|---|---|
type |
리소스 종류입니다. | Microsoft.Kubernetes/ConnectedClusters |
apiVersion |
리소스 API 버전입니다. | 2024-01-01 |
name |
리소스 이름입니다. | 문자열(필수) 문자 제한: 1-63 유효한 문자: 영숫자, 밑줄 및 하이픈. 영숫자로 시작하고 끝납니다. |
location |
리소스가 있는 지리적 위치입니다. | 문자열(필수)입니다. |
tags |
리소스 태그. | 태그 이름 및 값의 사전입니다. 템플릿의 태그를 참조하세요. |
extendedLocation |
가상 머신의 확장된 위치입니다. | ExtendedLocation |
identity |
구성된 경우 연결된 클러스터의 ID입니다. | |
properties |
연결된 클러스터의 속성입니다. |
ProvisionedClusterInstances
Name | Description | 값 |
---|---|---|
type |
리소스 종류 | microsoft.hybridcontainerservice/provisionedclusterinstances |
apiVersion |
리소스 API 버전 | 2024-01-01 |
name |
리소스 이름 | 문자열(필수)입니다. 이를 기본값에서 변경하지 마세요. |
properties |
연결된 클러스터의 속성입니다. | |
extendedLocation |
클러스터의 확장된 위치입니다. | ExtendedLocation |
ExtendedLocation
Name | Description | 값 |
---|---|---|
name |
확장된 위치의 ID입니다. | 문자열 |
type |
확장된 위치의 형식입니다. | CustomLocation |