Inicio rápido: Implementación de un host de contenedor de Linux en Azure para un clúster de AKS mediante una plantilla de ARM
Empiece a trabajar con el host de contenedor de Linux en Azure mediante una plantilla de Azure Resource Manager (ARM) para implementar un clúster de host de contenedor de Linux en Azure. Después de instalar los requisitos previos, creará un par de claves SSH, revisará la plantilla, implementará la plantilla y la validará y, a continuación, implementará una aplicación.
Una plantilla de Azure Resource Manager es un archivo de notación de objetos JavaScript (JSON) que define tanto la infraestructura como la configuración de un proyecto. La plantilla usa sintaxis declarativa. Se describe la implementación deseada sin escribir la secuencia de comandos de programación para crear la implementación.
Requisitos previos
-
Si no tiene una suscripción a Azure, cree una cuenta gratuita de Azure antes de empezar.
Use el entorno de Bash en Azure Cloud Shell. Para más información, vea Inicio rápido de Azure Cloud Shell: Bash.
Si prefiere ejecutar comandos de referencia de la CLI localmente, instale la CLI de Azure. Si utiliza Windows o macOS, considere la posibilidad de ejecutar la CLI de Azure en un contenedor Docker. Para más información, vea Ejecución de la CLI de Azure en un contenedor de Docker.
Si usa una instalación local, inicie sesión en la CLI de Azure mediante el comando az login. Siga los pasos que se muestran en el terminal para completar el proceso de autenticación. Para ver otras opciones de inicio de sesión, consulte Inicio de sesión con la CLI de Azure.
En caso de que se le solicite, instale las extensiones de la CLI de Azure la primera vez que la use. Para más información sobre las extensiones, consulte Uso de extensiones con la CLI de Azure.
Ejecute az version para buscar cuál es la versión y las bibliotecas dependientes que están instaladas. Para realizar la actualización a la versión más reciente, ejecute az upgrade.
Si aún no tiene kubectl instalado, instálelo a través de la CLI de Azure mediante
az aks install-cli
o siga las instrucciones ascendentes.Para crear un clúster de AKS con una plantilla de administración de recursos, proporcione una clave pública SSH. Si necesita este recurso, consulte la sección siguiente; en caso contrario, vaya a la sección Revisión de la plantilla.
La identidad que usa para crear el clúster tiene los permisos mínimos adecuados. Para más información sobre el acceso y la identidad en AKS, consulte Opciones de acceso e identidad en Azure Kubernetes Service (AKS).
Para implementar un archivo de Bicep o una plantilla de ARM, se necesita acceso de escritura en los recursos que implementa y acceso a todas las operaciones del tipo de recurso Microsoft.Resources/deployments. Por ejemplo, para implementar una máquina virtual, necesita los permisos Microsoft.Compute/virtualMachines/write y Microsoft.Resources/deployments/*. Para obtener una lista de roles y permisos, consulte Roles integrados de Azure.
Creación de un par de claves SSH
Para acceder a los nodos de AKS, se conectará mediante un par de claves SSH (pública y privada), que se genera mediante el comando ssh-keygen
. De forma predeterminada, estos archivos se crean en el directorio ~/.ssh. La ejecución del comando ssh-keygen
sobrescribe cualquier par de claves SSH con el mismo nombre que ya exista en la ubicación especificada.
Vaya a https://shell.azure.com para abrir Cloud Shell en el explorador.
Ejecute el comando
ssh-keygen
. En el ejemplo siguiente se crea un par de claves SSH con cifrado RSA y una longitud en bits de 4096:ssh-keygen -t rsa -b 4096
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.
Revisión de la plantilla
En la siguiente implementación se usa una plantilla de ARM que se encuentra en Plantillas de inicio rápido de Azure.
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.1",
"parameters": {
"clusterName": {
"type": "string",
"defaultValue": "azurelinuxakscluster",
"metadata": {
"description": "The name of the Managed Cluster resource."
}
},
"location": {
"type": "string",
"defaultValue": "[resourceGroup().location]",
"metadata": {
"description": "The location of the Managed Cluster resource."
}
},
"dnsPrefix": {
"type": "string",
"metadata": {
"description": "Optional DNS prefix to use with hosted Kubernetes API server FQDN."
}
},
"osDiskSizeGB": {
"type": "int",
"defaultValue": 0,
"minValue": 0,
"maxValue": 1023,
"metadata": {
"description": "Disk size (in GB) to provision for each of the agent pool nodes. This value ranges from 0 to 1023. Specifying 0 will apply the default disk size for that agentVMSize."
}
},
"agentCount": {
"type": "int",
"defaultValue": 3,
"minValue": 1,
"maxValue": 50,
"metadata": {
"description": "The number of nodes for the cluster."
}
},
"agentVMSize": {
"type": "string",
"defaultValue": "Standard_DS2_v2",
"metadata": {
"description": "The size of the Virtual Machine."
}
},
"linuxAdminUsername": {
"type": "string",
"metadata": {
"description": "User name for the Linux Virtual Machines."
}
},
"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 azureuser@linuxvm'"
}
},
"osType": {
"type": "string",
"defaultValue": "Linux",
"allowedValues": [
"Linux"
],
"metadata": {
"description": "The type of operating system."
}
},
"osSKU": {
"type": "string",
"defaultValue": "AzureLinux",
"allowedValues": [
"AzureLinux",
"Ubuntu"
],
"metadata": {
"description": "The Linux SKU to use."
}
}
},
"resources": [
{
"type": "Microsoft.ContainerService/managedClusters",
"apiVersion": "2021-03-01",
"name": "[parameters('clusterName')]",
"location": "[parameters('location')]",
"properties": {
"dnsPrefix": "[parameters('dnsPrefix')]",
"agentPoolProfiles": [
{
"name": "agentpool",
"mode": "System",
"osDiskSizeGB": "[parameters('osDiskSizeGB')]",
"count": "[parameters('agentCount')]",
"vmSize": "[parameters('agentVMSize')]",
"osType": "[parameters('osType')]",
"osSKU": "[parameters('osSKU')]",
"storageProfile": "ManagedDisks"
}
],
"linuxProfile": {
"adminUsername": "[parameters('linuxAdminUsername')]",
"ssh": {
"publicKeys": [
{
"keyData": "[parameters('sshRSAPublicKey')]"
}
]
}
}
},
"identity": {
"type": "SystemAssigned"
}
}
],
"outputs": {
"controlPlaneFQDN": {
"type": "string",
"value": "[reference(parameters('clusterName')).fqdn]"
}
}
}
Para agregar Linux de Azure a una plantilla de ARM existente, debe agregar "osSKU": "AzureLinux"
y "mode": "System"
a agentPoolProfiles
y establecer apiVersion en 2021-03-01 o posterior ("apiVersion": "2021-03-01"
).
Implementación de la plantilla
Seleccione el botón siguiente para iniciar sesión en Azure y abrir una plantilla.
Seleccione o escriba los siguientes valores.
Para este inicio rápido, deje los valores predeterminados de Tamaño del disco del SO GB, Número de agentes, Tamaño de VM del agente, Tipo de SO y Versión de Kubernetes. Proporcione sus propios valores para los siguientes parámetros de plantilla:
- Suscripción: Seleccione una suscripción de Azure.
- Grupo de recursos: Seleccione Crear nuevo. Escriba un nombre único para el grupo de recursos, como testAzureLinuxResourceGroup, y elija Aceptar.
- Ubicación: seleccione una ubicación, como Este de EE. UU.
- Nombre del clúster: escriba un nombre único para el clúster de AKS, como testAzureLinuxCluster.
- Prefijo de DNS: escriba un prefijo de DNS único para el clúster, como myAzureLinuxCluster.
- Nombre de usuario administrador de Linux: escriba un nombre de usuario para conectarse mediante SSH, como azureUser.
- SSH RSA Public Key (Clave pública SSH RSA): copie y pegue la parte pública del par de claves SSH (de forma predeterminada, el contenido de ~/.ssh/id_rsa.pub).
Seleccione Revisar + crear.
Se tarda unos minutos en crear el clúster de host de contenedor de Linux en Azure. Espere a que el clúster se implemente correctamente para pasar al siguiente paso.
Validación de la implementación
Conectarse al clúster
Para administrar un clúster de Kubernetes, use la línea de comandos de Kubernetes, kubectl.
Instale
kubectl
localmente mediante el comandoaz aks install-cli
:az aks install-cli
Configure
kubectl
para conectarse a su clúster de Kubernetes, use el comandoaz aks get-credentials
. Con este comando se descargan las credenciales y se configura la CLI de Kubernetes para usarlas.az aks get-credentials --resource-group testAzureLinuxResourceGroup --name testAzureLinuxCluster
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
El siguiente ejemplo de salida 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-41324942-0 Ready agent 6m44s v1.12.6 aks-agentpool-41324942-1 Ready agent 6m46s v1.12.6 aks-agentpool-41324942-2 Ready agent 6m45s v1.12.6
Implementación de la aplicación
Un archivo de manifiesto de Kubernetes define el estado deseado del clúster, por ejemplo, qué imágenes de contenedor se van a ejecutar.
En este inicio rápido usará un manifiesto a fin de crear todos los objetos necesarios para ejecutar la aplicación Azure Vote. Este manifiesto incluye dos implementaciones de Kubernetes:
- Las aplicaciones de Python de ejemplo de Azure Vote.
- Una instancia de Redis.
También se crean dos servicios de Kubernetes:
- Un servicio interno para la instancia de Redis.
- Un servicio externo para acceder a la aplicación Azure Vote desde Internet.
Cree un archivo llamado
azure-vote.yaml
.- Si usa Azure Cloud Shell, este archivo se puede crear mediante
code
,vi
onano
como si trabajara en un sistema físico o virtual:
- Si usa Azure Cloud Shell, este archivo se puede crear mediante
Copie la siguiente definición de código YAML:
apiVersion: apps/v1 kind: Deployment metadata: name: azure-vote-back spec: replicas: 1 selector: matchLabels: app: azure-vote-back template: metadata: labels: app: azure-vote-back spec: nodeSelector: "kubernetes.io/os": linux containers: - name: azure-vote-back image: mcr.microsoft.com/oss/bitnami/redis:6.0.8 env: - name: ALLOW_EMPTY_PASSWORD value: "yes" resources: requests: cpu: 100m memory: 128Mi limits: cpu: 250m memory: 256Mi ports: - containerPort: 6379 name: redis --- apiVersion: v1 kind: Service metadata: name: azure-vote-back spec: ports: - port: 6379 selector: app: azure-vote-back --- apiVersion: apps/v1 kind: Deployment metadata: name: azure-vote-front spec: replicas: 1 selector: matchLabels: app: azure-vote-front template: metadata: labels: app: azure-vote-front spec: nodeSelector: "kubernetes.io/os": linux containers: - name: azure-vote-front image: mcr.microsoft.com/azuredocs/azure-vote-front:v1 resources: requests: cpu: 100m memory: 128Mi limits: cpu: 250m memory: 256Mi ports: - containerPort: 80 env: - name: REDIS value: "azure-vote-back" --- apiVersion: v1 kind: Service metadata: name: azure-vote-front spec: type: LoadBalancer ports: - port: 80 selector: app: azure-vote-front
Para ver un desglose de los archivos de manifiesto de YAML, consulte Implementaciones y manifiestos de YAML.
Implemente la aplicación mediante el comando kubectl apply y especifique el nombre del manifiesto de YAML:
kubectl apply -f azure-vote.yaml
El ejemplo siguiente se parece a la salida que muestra las implementaciones y servicios creados correctamente:
deployment "azure-vote-back" created service "azure-vote-back" created deployment "azure-vote-front" created service "azure-vote-front" created
Prueba de la aplicación
Cuando se ejecuta la aplicación, un servicio de Kubernetes expone el front-end de la aplicación a Internet. Este proceso puede tardar unos minutos en completarse.
Para supervisar el progreso, utilice el comando kubectl get service con el argumento --watch
.
kubectl get service azure-vote-front --watch
La salida de EXTERNAL-IP del servicio azure-vote-front
aparecerá inicialmente como pendiente.
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
azure-vote-front LoadBalancer 10.0.37.27 <pending> 80:30572/TCP 6s
Una vez que la dirección EXTERNAL-IP cambia de pendiente a una dirección IP pública real, use CTRL-C
para detener el kubectl
proceso de inspección. En la salida del ejemplo siguiente se muestra una dirección IP pública válida asignada al servicio:
azure-vote-front LoadBalancer 10.0.37.27 52.179.23.131 80:30572/TCP 2m
Para ver la aplicación Azure Vote en acción, abra un explorador web en la dirección IP externa del servicio.
Eliminación del clúster
Si no va a continuar con los siguientes tutoriales, para evitar los cargos de Azure, elimine los recursos innecesarios. Use el comando az group delete
para eliminar el grupo de recursos y todos los recursos relacionados.
az group delete --name testAzureLinuxCluster --yes --no-wait
Pasos siguientes
En este inicio rápido, ha implementado un clúster de host de contenedor de Linux en Azure. Para obtener más información sobre el host de contenedor de Linux en Azure y recorrer un ejemplo completo de implementación y administración de clústeres, continúe con el tutorial sobre el host de contenedor de Linux en Azure.