Inicio rápido: Implementación de un clúster de Kubernetes mediante una plantilla de Azure Resource Manager
Se aplica a: Azure Local, versión 23H2
En este inicio rápido se muestra cómo implementar un clúster de Kubernetes en AKS Arc mediante una plantilla de Azure Resource Manager. Azure Arc amplía las funcionalidades de administración de Azure a los clústeres de Kubernetes en cualquier lugar, lo que proporciona un enfoque unificado para administrar diferentes entornos.
Antes de empezar
En este artículo se presupone un conocimiento básico de los conceptos de Kubernetes.
Para implementar una plantilla de Resource Manager, necesita acceso de escritura en los recursos que va a implementar y acceso a todas las operaciones en el tipo de recurso Microsoft.Resources/deployments . Por ejemplo, para implementar una máquina virtual, necesita permisos Microsoft.Compute/virtualMachines/write y Microsoft.Resources/deployments/* . Para obtener una lista de roles y permisos, consulte Roles integrados de Azure.
Requisitos previos
- Una cuenta de Azure con una suscripción activa.
- Un clúster de Azure Local, versión 23H2.
- La versión más reciente de la CLI de Azure.
Paso 1: preparar la cuenta de Azure
Inicie sesión en Azure: abra el terminal o el símbolo del sistema e inicie sesión en su cuenta de Azure mediante la CLI de Azure:
az login
Establezca la suscripción: reemplace por
<your-subscription-id>
el identificador de suscripción:az account set --subscription "<your-subscription-id>"
Paso 2: creación de un par de claves SSH mediante la CLI de Azure
az sshkey create --name "mySSHKey" --resource-group "myResourceGroup"
o bien, cree un par de claves SSH mediante ssh-keygen:
ssh-keygen -t rsa -b 4096
Para implementar la plantilla, debe proporcionar la clave pública del par SSH. Para recuperar la clave pública, use el az sshkey show
comando :
az sshkey show --name "mySSHKey" --resource-group "myResourceGroup" --query "publicKey"
De forma predeterminada, los archivos de clave SSH se crean en el directorio ~/.ssh. Ejecute el az sshkey create
comando o ssh-keygen
para sobrescribir cualquier par de claves SSH existente con el mismo nombre.
Para más información sobre cómo crear claves SSH, consulte el artículo sobre Creación y administración de claves SSH para la autenticación en Azure.
Paso 3: Revisar la plantilla
La plantilla que se usa en este inicio rápido procede del repositorio plantillas de inicio rápido de 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"
}
}
]
}
Paso 4: Implementación de la plantilla
Para implementar la plantilla, ejecute el siguiente comando para implementar el clúster de 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..."
La operación de creación del clúster tarda unos minutos. Espere a que el clúster se implemente correctamente para pasar al siguiente paso.
Paso 5: Comprobación de la implementación
Una vez completada la implementación, use el siguiente comando para comprobar que el clúster de Kubernetes está en funcionamiento:
az aksarc show --resource-group "<resource-group-name>" --name "<cluster-name>" --output table
Paso 6: Conexión al clúster
Para conectarse al clúster, ejecute el
az connectedk8s proxy
comando . El comando descarga y ejecuta un archivo binario proxy en el equipo cliente y captura un archivo kubeconfig asociado al clúster:az connectedk8s proxy --name <cluster name> -g <resource group>
O bien, use el cliente de línea de comandos de Kubernetes, kubectl. Si usa Azure Cloud Shell, kubectl ya está instalado. Para instalar y ejecutar kubectl localmente, ejecute el
az aksarc install-cli
comando .Configure kubectl para conectarse al clúster de Kubernetes mediante el
az aksarc get-credentials
comando . Con este comando se descargan las credenciales y se configura la CLI de Kubernetes para usarlas:az aksarc get-credentials --resource-group "<resource-group-name>" --name "<cluster-name>"
Compruebe la conexión al clúster con el comando
kubectl get
. Este comando devuelve una lista de los nodos del clúster:kubectl get nodes -A --kubeconfig .\<path to kubecofig>
La salida del siguiente ejemplo muestra los tres nodos creados en los pasos anteriores. Asegúrese de que el estado del nodo es Listo:
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
Recursos de plantilla
connectedClusters
Nombre | Descripción | Valor |
---|---|---|
type |
Tipo de recurso. | Microsoft.Kubernetes/ConnectedClusters |
apiVersion |
Versión de la API de recursos. | 2024-01-01 |
name |
Nombre del recurso. | String (obligatorio) Límite de caracteres: 1-63 Caracteres válidos: caracteres alfanuméricos, caracteres de subrayado y guiones. Comience y termine con un carácter alfanumérico. |
location |
Ubicación geográfica en la que reside el recurso. | String (obligatorio). |
tags |
Etiquetas del recurso. | Diccionario de nombres y valores de etiqueta. Consulte Etiquetas en plantillas. |
extendedLocation |
Ubicación extendida de la máquina virtual. | ExtendedLocation |
identity |
Identidad del clúster conectado, si está configurado. | |
properties |
Propiedades de un clúster conectado. |
ProvisionedClusterInstances
Nombre | Descripción | Valor |
---|---|---|
type |
El tipo de recurso | microsoft.hybridcontainerservice/provisionedclusterinstances |
apiVersion |
La versión de la API de recursos | 2024-01-01 |
name |
El nombre del recurso | String (obligatorio). No cambie esto de forma predeterminada. |
properties |
Propiedades de un clúster conectado. | |
extendedLocation |
Ubicación extendida del clúster. | ExtendedLocation |
ExtendedLocation
Nombre | Descripción | Valor |
---|---|---|
name |
Identificador de la ubicación extendida. | string |
type |
Tipo de la ubicación extendida. | CustomLocation |