Inicio rápido: implementación de clústeres de Azure Kubernetes Service (AKS) con Terraform
Azure Kubernetes Service (AKS) es un servicio de Kubernetes administrado que le permite implementar y administrar clústeres rápidamente. En esta guía de inicio rápido:
- Implementar un clúster de AKS con Terraform.
- Ejecutar una aplicación de varios contenedores de ejemplo con un grupo de microservicios y front-ends web simulando un escenario comercial.
Nota:
Para empezar a aprovisionar rápidamente un clúster de AKS, en este artículo se incluyen los pasos para implementar un clúster con la configuración predeterminada solo con fines de evaluación. Antes de implementar un clúster listo para producción, se recomienda familiarizarse con nuestra arquitectura de referencia de línea de base para considerar cómo se alinea con sus requisitos empresariales.
Antes de empezar
- En esta guía rápida se presupone un conocimiento básico de los conceptos de Kubernetes. Para más información, consulte Conceptos básicos de Kubernetes de Azure Kubernetes Service (AKS).
- Necesita una cuenta de Azure con una suscripción activa. Si no tiene ninguna cuenta, cree una gratuita.
- Siga las instrucciones basadas en la interfaz de la línea de comandos.
- Para más información sobre cómo crear un grupo de nodos de Windows Server, consulte Creación de un clúster de AKS que admita contenedores de Windows Server.
Nota:
El grupo de nodos de Linux de Azure ya se encuentra en disponibilidad general (GA). Para obtener información sobre las ventajas y los pasos de implementación, consulte Introducción al host de contenedor de Linux en Azure para AKS.
- Instale y configure Terraform.
- Descargue kubectl.
- Cree un valor aleatorio para el nombre del grupo de recursos de Azure mediante random_pet.
- Cree un grupo de recursos de Azure mediante azurerm_resource_group.
- Acceda a la configuración del proveedor AzureRM para obtener el identificador de objeto de Azure mediante azurerm_client_config.
- Creación de un clúster de Kubernetes mediante azurerm_kubernetes_cluster.
- Cree un recurso de AzAPI azapi_resource.
- Cree un recurso de AzAPI para generar un par de claves SSH mediante azapi_resource_action.
Inicio de sesión en la cuenta de Azure
En primer lugar, inicie sesión en su cuenta de Azure y autentíquese con uno de los métodos descritos en la sección siguiente.
Terraform solo admite la autenticación en Azure con la CLI de Azure. No se admite la autenticación con Azure PowerShell. Por tanto, aunque puede usar el módulo de Azure PowerShell al realizar el trabajo de Terraform, primero debe autenticarse en Azure.
Implementación del código de Terraform
Nota
El código de ejemplo de este artículo se encuentra en el repositorio de GitHub de Azure Terraform. Puedes ver el archivo de registro que contiene los resultados de las pruebas de las versiones actuales y anteriores de Terraform.
Consulte más artículos y código de ejemplo sobre el uso Terraform para administrar recursos de Azure.
Cree un directorio que pueda usar para probar el código de ejemplo de Terraform y conviértalo en el directorio actual.
Cree un archivo denominado
providers.tf
e inserte el siguiente código:terraform { required_version = ">=1.0" required_providers { azapi = { source = "azure/azapi" version = "~>1.5" } azurerm = { source = "hashicorp/azurerm" version = "~>3.0" } random = { source = "hashicorp/random" version = "~>3.0" } time = { source = "hashicorp/time" version = "0.9.1" } } } provider "azurerm" { features {} }
Cree un archivo denominado
ssh.tf
e inserte el siguiente código:resource "random_pet" "ssh_key_name" { prefix = "ssh" separator = "" } resource "azapi_resource_action" "ssh_public_key_gen" { type = "Microsoft.Compute/sshPublicKeys@2022-11-01" resource_id = azapi_resource.ssh_public_key.id action = "generateKeyPair" method = "POST" response_export_values = ["publicKey", "privateKey"] } resource "azapi_resource" "ssh_public_key" { type = "Microsoft.Compute/sshPublicKeys@2022-11-01" name = random_pet.ssh_key_name.id location = azurerm_resource_group.rg.location parent_id = azurerm_resource_group.rg.id } output "key_data" { value = azapi_resource_action.ssh_public_key_gen.output.publicKey }
Cree un archivo denominado
main.tf
e inserte el siguiente código:# Generate random resource group name resource "random_pet" "rg_name" { prefix = var.resource_group_name_prefix } resource "azurerm_resource_group" "rg" { location = var.resource_group_location name = random_pet.rg_name.id } resource "random_pet" "azurerm_kubernetes_cluster_name" { prefix = "cluster" } resource "random_pet" "azurerm_kubernetes_cluster_dns_prefix" { prefix = "dns" } resource "azurerm_kubernetes_cluster" "k8s" { location = azurerm_resource_group.rg.location name = random_pet.azurerm_kubernetes_cluster_name.id resource_group_name = azurerm_resource_group.rg.name dns_prefix = random_pet.azurerm_kubernetes_cluster_dns_prefix.id identity { type = "SystemAssigned" } default_node_pool { name = "agentpool" vm_size = "Standard_D2_v2" node_count = var.node_count } linux_profile { admin_username = var.username ssh_key { key_data = azapi_resource_action.ssh_public_key_gen.output.publicKey } } network_profile { network_plugin = "kubenet" load_balancer_sku = "standard" } }
Cree un archivo denominado
variables.tf
e inserte el siguiente código:variable "resource_group_location" { type = string default = "eastus" description = "Location of the resource group." } variable "resource_group_name_prefix" { type = string default = "rg" description = "Prefix of the resource group name that's combined with a random ID so name is unique in your Azure subscription." } variable "node_count" { type = number description = "The initial quantity of nodes for the node pool." default = 3 } variable "msi_id" { type = string description = "The Managed Service Identity ID. Set this value if you're running this example using Managed Identity as the authentication method." default = null } variable "username" { type = string description = "The admin username for the new cluster." default = "azureadmin" }
Cree un archivo denominado
outputs.tf
e inserte el siguiente código:output "resource_group_name" { value = azurerm_resource_group.rg.name } output "kubernetes_cluster_name" { value = azurerm_kubernetes_cluster.k8s.name } output "client_certificate" { value = azurerm_kubernetes_cluster.k8s.kube_config[0].client_certificate sensitive = true } output "client_key" { value = azurerm_kubernetes_cluster.k8s.kube_config[0].client_key sensitive = true } output "cluster_ca_certificate" { value = azurerm_kubernetes_cluster.k8s.kube_config[0].cluster_ca_certificate sensitive = true } output "cluster_password" { value = azurerm_kubernetes_cluster.k8s.kube_config[0].password sensitive = true } output "cluster_username" { value = azurerm_kubernetes_cluster.k8s.kube_config[0].username sensitive = true } output "host" { value = azurerm_kubernetes_cluster.k8s.kube_config[0].host sensitive = true } output "kube_config" { value = azurerm_kubernetes_cluster.k8s.kube_config_raw sensitive = true }
Inicialización de Terraform
Para inicializar la implementación de Terraform, ejecute terraform init. Este comando descarga el proveedor de Azure necesario para administrar los recursos de Azure.
terraform init -upgrade
Puntos clave:
- El parámetro
-upgrade
actualiza los complementos de proveedor necesarios a la versión más reciente que cumpla con las restricciones de versión de la configuración.
Creación de un plan de ejecución de Terraform
Ejecute terraform plan para crear un plan de ejecución.
terraform plan -out main.tfplan
Puntos clave:
- El comando
terraform plan
crea un plan de ejecución, pero no lo ejecuta. En su lugar, determina qué acciones son necesarias para crear la configuración especificada en los archivos de configuración. Este patrón le permite comprobar si el plan de ejecución coincide con sus expectativas antes de realizar cambios en los recursos reales. - El parámetro
-out
opcional permite especificar un archivo de salida para el plan. El uso del parámetro-out
garantiza que el plan que ha revisado es exactamente lo que se aplica.
Aplicación de un plan de ejecución de Terraform
Ejecute terraform apply para aplicar el plan de ejecución a su infraestructura en la nube.
terraform apply main.tfplan
Puntos clave:
- El comando
terraform apply
de ejemplo asume que ejecutóterraform plan -out main.tfplan
previamente. - Si especificó un nombre de archivo diferente para el parámetro
-out
, use ese mismo nombre de archivo en la llamada aterraform apply
. - Si no ha utilizado el parámetro
-out
, llame aterraform apply
sin ningún parámetro.
Verificación de los resultados
Obtenga el nombre del grupo de recursos de Azure con el siguiente comando.
resource_group_name=$(terraform output -raw resource_group_name)
Muestre el nombre del nuevo clúster de Kubernetes con el comando az aks list.
az aks list \ --resource-group $resource_group_name \ --query "[].{\"K8s cluster name\":name}" \ --output table
Obtenga la configuración de Kubernetes del estado de Terraform y almacénela en un archivo que
kubectl
pueda leer con el siguiente comando.echo "$(terraform output kube_config)" > ./azurek8s
Verifique que el comando anterior no haya agregado un carácter ASCII EOT usando el siguiente comando .
cat ./azurek8s
Puntos clave:
- Si viera
<< EOT
al principio yEOT
al final, quite estos caracteres del archivo. En caso contrario, es posible que reciba el siguiente mensaje de error:error: error loading config file "./azurek8s": yaml: line 2: mapping values are not allowed in this context
- Si viera
Establezca una variable de entorno para que
kubectl
seleccione la configuración correcta con el siguiente comando.export KUBECONFIG=./azurek8s
Compruebe el estado del clúster mediante el comando
kubectl get nodes
.kubectl get nodes
Puntos clave:
- Cuando creó el clúster de AKS, se habilitó la supervisión para capturar métricas de mantenimiento para los nodos y pods del clúster. Estas métricas de mantenimiento están disponibles en Azure Portal. Para obtener más información sobre la supervisión del estado de los contenedores, consulte Monitor Azure Kubernetes Service health (Supervisión del estado de Azure Kubernetes Service).
- Varios valores de clave se clasificaron como salida cuando aplicó el plan de ejecución de Terraform. Por ejemplo, la dirección de host, el nombre de usuario del clúster de AKS y la contraseña del clúster de AKS son la salida.
Implementación de la aplicación
Para implementar la aplicación, se usa un archivo de manifiesto para crear todos los objetos necesarios para ejecutar la aplicación AKS Store. Un archivo de manifiesto de Kubernetes define el estado deseado del clúster, por ejemplo, qué imágenes de contenedor se van a ejecutar. El manifiesto incluye las siguientes implementaciones y servicios de Kubernetes:
- Escaparate: aplicación web para que los clientes vean productos y realicen pedidos.
- Servicio de producto: muestra información del producto.
- Servicio de pedidos: realiza pedidos.
- Rabbit MQ: cola de mensajes para una cola de pedidos.
Nota:
No se recomienda ejecutar contenedores con estado, como Rabbit MQ, sin almacenamiento persistente para producción. Estos se usan aquí para simplificar, pero se recomienda usar servicios administrados, como Azure CosmosDB o Azure Service Bus.
Cree un archivo denominado
aks-store-quickstart.yaml
y cópielo en el siguiente manifiesto:apiVersion: apps/v1 kind: Deployment metadata: name: rabbitmq spec: replicas: 1 selector: matchLabels: app: rabbitmq template: metadata: labels: app: rabbitmq spec: nodeSelector: "kubernetes.io/os": linux containers: - name: rabbitmq image: mcr.microsoft.com/mirror/docker/library/rabbitmq:3.10-management-alpine ports: - containerPort: 5672 name: rabbitmq-amqp - containerPort: 15672 name: rabbitmq-http env: - name: RABBITMQ_DEFAULT_USER value: "username" - name: RABBITMQ_DEFAULT_PASS value: "password" resources: requests: cpu: 10m memory: 128Mi limits: cpu: 250m memory: 256Mi volumeMounts: - name: rabbitmq-enabled-plugins mountPath: /etc/rabbitmq/enabled_plugins subPath: enabled_plugins volumes: - name: rabbitmq-enabled-plugins configMap: name: rabbitmq-enabled-plugins items: - key: rabbitmq_enabled_plugins path: enabled_plugins --- apiVersion: v1 data: rabbitmq_enabled_plugins: | [rabbitmq_management,rabbitmq_prometheus,rabbitmq_amqp1_0]. kind: ConfigMap metadata: name: rabbitmq-enabled-plugins --- apiVersion: v1 kind: Service metadata: name: rabbitmq spec: selector: app: rabbitmq ports: - name: rabbitmq-amqp port: 5672 targetPort: 5672 - name: rabbitmq-http port: 15672 targetPort: 15672 type: ClusterIP --- apiVersion: apps/v1 kind: Deployment metadata: name: order-service spec: replicas: 1 selector: matchLabels: app: order-service template: metadata: labels: app: order-service spec: nodeSelector: "kubernetes.io/os": linux containers: - name: order-service image: ghcr.io/azure-samples/aks-store-demo/order-service:latest ports: - containerPort: 3000 env: - name: ORDER_QUEUE_HOSTNAME value: "rabbitmq" - name: ORDER_QUEUE_PORT value: "5672" - name: ORDER_QUEUE_USERNAME value: "username" - name: ORDER_QUEUE_PASSWORD value: "password" - name: ORDER_QUEUE_NAME value: "orders" - name: FASTIFY_ADDRESS value: "0.0.0.0" resources: requests: cpu: 1m memory: 50Mi limits: cpu: 75m memory: 128Mi initContainers: - name: wait-for-rabbitmq image: busybox command: ['sh', '-c', 'until nc -zv rabbitmq 5672; do echo waiting for rabbitmq; sleep 2; done;'] resources: requests: cpu: 1m memory: 50Mi limits: cpu: 75m memory: 128Mi --- apiVersion: v1 kind: Service metadata: name: order-service spec: type: ClusterIP ports: - name: http port: 3000 targetPort: 3000 selector: app: order-service --- apiVersion: apps/v1 kind: Deployment metadata: name: product-service spec: replicas: 1 selector: matchLabels: app: product-service template: metadata: labels: app: product-service spec: nodeSelector: "kubernetes.io/os": linux containers: - name: product-service image: ghcr.io/azure-samples/aks-store-demo/product-service:latest ports: - containerPort: 3002 resources: requests: cpu: 1m memory: 1Mi limits: cpu: 1m memory: 7Mi --- apiVersion: v1 kind: Service metadata: name: product-service spec: type: ClusterIP ports: - name: http port: 3002 targetPort: 3002 selector: app: product-service --- apiVersion: apps/v1 kind: Deployment metadata: name: store-front spec: replicas: 1 selector: matchLabels: app: store-front template: metadata: labels: app: store-front spec: nodeSelector: "kubernetes.io/os": linux containers: - name: store-front image: ghcr.io/azure-samples/aks-store-demo/store-front:latest ports: - containerPort: 8080 name: store-front env: - name: VUE_APP_ORDER_SERVICE_URL value: "http://order-service:3000/" - name: VUE_APP_PRODUCT_SERVICE_URL value: "http://product-service:3002/" resources: requests: cpu: 1m memory: 200Mi limits: cpu: 1000m memory: 512Mi --- apiVersion: v1 kind: Service metadata: name: store-front spec: ports: - port: 80 targetPort: 8080 selector: app: store-front type: LoadBalancer
Para obtener un desglose de los archivos de manifiesto de YAML, consulte Implementaciones y manifiestos de YAML.
Si crea y guarda el archivo YAML localmente, para cargar el archivo de manifiesto en el directorio predeterminado de CloudShell, seleccione el botón Cargar y descargar archivos y elija el archivo en el sistema de archivos local.
Implemente la aplicación mediante el comando
kubectl apply
y especifique el nombre del manifiesto de YAML.kubectl apply -f aks-store-quickstart.yaml
La salida del siguiente ejemplo muestra las implementaciones y los servicios creados correctamente:
deployment.apps/rabbitmq 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
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.
Compruebe el estado de los pods implementados con el comando
kubectl get pods
. Haga que todos los pods tengan el estadoRunning
antes de continuar.kubectl get pods
Compruebe si hay una dirección IP pública para la aplicación de escaparate (store-front). Para supervisar el progreso, utilice el comando
kubectl get service
con el argumento--watch
.kubectl get service store-front --watch
La salida de EXTERNAL-IP del servicio
store-front
aparece inicialmente como pending (pendiente):NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE store-front LoadBalancer 10.0.100.10 <pending> 80:30025/TCP 4h4m
Una vez que la dirección EXTERNAL-IP cambia de pendiente a una dirección IP pública real, use
CTRL-C
para detener elkubectl
proceso de inspección.En la salida del ejemplo siguiente se muestra una dirección IP pública válida asignada al servicio:
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE store-front LoadBalancer 10.0.100.10 20.62.159.19 80:30025/TCP 4h5m
Abra un explorador web en la dirección IP externa del servicio para ver la aplicación Azure Store en acción.
Limpieza de recursos
Eliminación de recursos de AKS
Cuando ya no necesite los recursos creados a través de Terraform, realice los pasos siguientes:
Ejecute el comando terraform plan y especifique la marca
destroy
.terraform plan -destroy -out main.destroy.tfplan
Puntos clave:
- El comando
terraform plan
crea un plan de ejecución, pero no lo ejecuta. En su lugar, determina qué acciones son necesarias para crear la configuración especificada en los archivos de configuración. Este patrón le permite comprobar si el plan de ejecución coincide con sus expectativas antes de realizar cambios en los recursos reales. - El parámetro
-out
opcional permite especificar un archivo de salida para el plan. El uso del parámetro-out
garantiza que el plan que ha revisado es exactamente lo que se aplica.
- El comando
Ejecute terraform apply para aplicar el plan de ejecución.
terraform apply main.destroy.tfplan
Eliminación de la entidad de servicio
Obtenga el identificador de la entidad de servicio con el siguiente comando.
sp=$(terraform output -raw sp)
Elimine la entidad de servicio con el comando az ad sp delete.
az ad sp delete --id $sp
- Instale Azure Developer CLI (AZD)
- Instale y configure Terraform.
- Revise el código de la aplicación usado en el repositorio Azure-Samples/aks-store-demo.
Clonación de la plantilla de Azure Developer CLI
Azure Developer CLI permite descargar rápidamente ejemplos del repositorio Azure-Samples. En el inicio rápido, descargará la aplicación aks-store-demo
. Para obtener más información sobre los casos de uso generales, consulte la azd
información general.
Clona la plantilla de demostración de la Tienda AKS del repositorio Azure-Samples mediante el comando
azd init
con el parámetro--template
.azd init --template Azure-Samples/aks-store-demo
Escriba un nombre de entorno para el proyecto que solo tenga caracteres alfanuméricos y guiones, como aks-terraform-1.
Enter a new environment name: aks-terraform-1
Inicie sesión en la cuenta de Azure Cloud.
La plantilla de azd
contiene todo el código necesario para crear los servicios, pero debes iniciar sesión en la cuenta de Azure a fin de hospedar la aplicación en AKS.
Inicia sesión en tu cuenta mediante el comando
azd auth login
.azd auth login
Copia el código del dispositivo que aparece en la salida y presiona Entrar para iniciar sesión.
Start by copying the next code: XXXXXXXXX Then press enter and continue to log in from your browser...
Importante
Si usas una máquina virtual fuera de red o un codespace de GitHub, determinadas directivas de seguridad de Azure provocan conflictos cuando se usan para iniciar sesión con
azd auth login
. Si se produjese un problema aquí, siga la solución alternativa azd auth proporcionada, lo que implicará el uso de una solicitudcurl
a la dirección URL de localhost a la que se redirigió después de ejecutarazd auth login
.Autentícate con tus credenciales en la página de inicio de sesión de la organización.
Confirma que estás intentando conectarte desde la CLI de Azure.
Compruebe que el mensaje "Autenticación de código de dispositivo completada. Ha iniciado sesión en Azure." aparece en el terminal original.
Waiting for you to complete authentication in the browser... Device code authentication completed. Logged in to Azure.
Solución alternativa azd auth
Esta solución alternativa requiere que tengas instalada la CLI de Azure.
Abre una ventana de terminal e inicia sesión con la CLI de Azure mediante el comando
az login
con el parámetro--scope
establecido enhttps://graph.microsoft.com/.default
.az login --scope https://graph.microsoft.com/.default
Debes redirigirte a una página de autenticación en una nueva pestaña para crear un token de acceso del explorador, como se muestra en el ejemplo siguiente:
https://login.microsoftonline.com/organizations/oauth2/v2.0/authorize?clientid=<your_client_id>.
Copia la dirección URL de localhost de la página web que recibiste después de intentar iniciar sesión con
azd auth login
.En una nueva ventana de terminal, usa la siguiente solicitud
curl
para iniciar sesión. Asegúrate de reemplazar el marcador de posición<localhost>
por la dirección URL de localhost que copiaste en el paso anterior.curl <localhost>
Un inicio de sesión correcto genera una página web HTML, como se muestra en el ejemplo siguiente:
<!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <meta http-equiv="refresh" content="60;url=https://docs.microsoft.com/cli/azure/"> <title>Login successfully</title> <style> body { font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif; } code { font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace; display: inline-block; background-color: rgb(242, 242, 242); padding: 12px 16px; margin: 8px 0px; } </style> </head> <body> <h3>You have logged into Microsoft Azure!</h3> <p>You can close this window, or we will redirect you to the <a href="https://docs.microsoft.com/cli/azure/">Azure CLI documentation</a> in 1 minute.</p> <h3>Announcements</h3> <p>[Windows only] Azure CLI is collecting feedback on using the <a href="https://learn.microsoft.com/windows/uwp/security/web-account-manager">Web Account Manager</a> (WAM) broker for the login experience.</p> <p>You may opt-in to use WAM by running the following commands:</p> <code> az config set core.allow_broker=true<br> az account clear<br> az login </code> </body> </html>
Cierra el terminal actual y abre el terminal original. Deberías ver una lista JSON de las suscripciones.
Copia el campo
id
de la suscripción que quieres usar.Establece la suscripción ejecutando el comando
az account set
.az account set --subscription <subscription_id>
Creación e implementación de recursos para el clúster
Para implementar la aplicación, use el comando azd up
para crear todos los objetos necesarios para ejecutar la aplicación AKS Store.
- Un archivo
azure.yaml
define el estado deseado de un clúster, como las imágenes de contenedor que se vayan a capturar, e incluye las siguientes implementaciones y servicios de Kubernetes:
- Escaparate: aplicación web para que los clientes vean productos y realicen pedidos.
- Servicio de producto: muestra información del producto.
- Servicio de pedidos: realiza pedidos.
- Rabbit MQ: cola de mensajes para una cola de pedidos.
Nota:
No se recomienda ejecutar contenedores con estado, como Rabbit MQ, sin almacenamiento persistente para producción. Estos se usan aquí para simplificar, pero se recomienda usar servicios administrados, como Azure Cosmos DB o Azure Service Bus.
Implementación de recursos de aplicación
La plantilla de azd
para esta guía de inicio rápido crea un grupo de recursos nuevo con un clúster de AKS y una instancia de Azure Key Vault. El almacén de claves almacena los secretos de cliente y ejecuta los servicios en el espacio de nombres pets
.
Crea todos los recursos de la aplicación mediante el comando
azd up
.azd up
azd up
ejecuta todos los enlaces dentro de la carpetaazd-hooks
para registrar previamente, aprovisionar e implementar los servicios de aplicación.Personalice los enlaces para agregar código personalizado a las fases de flujo de trabajo de
azd
. Para obtener más información, consulte la referencia deazd
enlaces.Selecciona una suscripción de Azure para el uso de facturación.
? Select an Azure Subscription to use: [Use arrows to move, type to filter] > 1. My Azure Subscription (xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx)
Selecciona una región en la que quieras implementar la aplicación.
Select an Azure location to use: [Use arrows to move, type to filter] 1. (South America) Brazil Southeast (brazilsoutheast) 2. (US) Central US (centralus) 3. (US) East US (eastus) > 43. (US) East US 2 (eastus2) 4. (US) East US STG (eastusstg) 5. (US) North Central US (northcentralus) 6. (US) South Central US (southcentralus)
azd
ejecuta automáticamente los enlaces de aprovisionamiento previo y aprovisionamiento posterior para crear los recursos de la aplicación. Este proceso puede tardar unos minutos en completarse. Una vez completado, deberías ver una salida similar al ejemplo siguiente:SUCCESS: Your workflow to provision and deploy to Azure completed in 9 minutes 40 seconds.
Generación de planes de Terraform
Dentro de la plantilla de Azure Developer, la carpeta /infra/terraform
contiene todo el código usado para generar el plan de Terraform.
Terraform implementa y ejecuta comandos mediante terraform apply
como parte del paso de aprovisionamiento de azd
. Una vez completado, deberías ver una salida similar al ejemplo siguiente:
Plan: 5 to add, 0 to change, 0 to destroy.
...
Saved the plan to: /workspaces/aks-store-demo/.azure/aks-terraform-azd/infra/terraform/main.tfplan
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.
Establece el espacio de nombres como espacio de nombres de demostración
pets
con el comandokubectl set-context
.kubectl config set-context --current --namespace=pets
Compruebe el estado de los pods implementados con el comando
kubectl get pods
. Asegúrate de que todos los pods tengan el estadoRunning
antes de continuar.kubectl get pods
Comprueba si hay una IP pública para la aplicación de escaparate y supervisa el progreso mediante el comando
kubectl get service
con el argumento--watch
.kubectl get service store-front --watch
La salida de EXTERNAL-IP del servicio
store-front
aparece inicialmente como pending (pendiente):NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE store-front LoadBalancer 10.0.100.10 <pending> 80:30025/TCP 4h4m
Una vez que la dirección EXTERNAL-IP cambia de pendiente a una dirección IP pública real, use
CTRL-C
para detener elkubectl
proceso de inspección.En la salida del ejemplo siguiente se muestra una dirección IP pública válida asignada al servicio:
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE store-front LoadBalancer 10.0.100.10 20.62.159.19 80:30025/TCP 4h5m
Abra un explorador web en la dirección IP externa del servicio para ver la aplicación Azure Store en acción.
Eliminación del clúster
Cuando hayas terminado con el inicio rápido, limpia todos los recursos innecesarios para evitar cargos de Azure.
Elimine todos los recursos creados en el inicio rápido mediante el comando
azd down
.azd down
Confirma la decisión de quitar todos los recursos usados de la suscripción; para ello, escribe
y
y presionaEnter
.? Total resources to delete: 14, are you sure you want to continue? (y/N)
Permite una purga para reutilizar las variables de inicio rápido, si procede; para ello, escribe
y
y presionaEnter
.[Warning]: These resources have soft delete enabled allowing them to be recovered for a period or time after deletion. During this period, their names can't be reused. In the future, you can use the argument --purge to skip this confirmation.
Solución de problemas de Terraform en Azure
Solución de problemas comunes al usar Terraform en Azure.
Pasos siguientes
En este inicio rápido, ha implementado un clúster de Kubernetes y luego ha implementado en él una aplicación simple de varios contenedores. Esta aplicación de ejemplo es solo para fines de demostración y no representa todos los procedimientos recomendados para las aplicaciones de Kubernetes. Para instrucciones sobre cómo crear soluciones completas con AKS para producción, consulte Guía de soluciones de AKS.
Para obtener más información sobre AKS y un ejemplo completo desde el código hasta la implementación, continúe con el tutorial del clúster de Kubernetes.
Azure Kubernetes Service