Краткое руководство. Развертывание кластера Служба Azure Kubernetes (AKS) с помощью Terraform
Служба Azure Kubernetes (AKS) — это управляемая служба Kubernetes, которая позволяет быстро развертывать кластеры и управлять ими. В этом кратком руководстве вы:
- Разверните кластер AKS с помощью Terraform.
- Запустите пример мультиконтейнерного приложения с группой микрослужб и веб-интерфейсов с имитацией сценария розничной торговли.
Примечание.
Чтобы приступить к быстрой подготовке кластера AKS, в этой статье содержатся действия по развертыванию кластера с параметрами по умолчанию только для оценки. Прежде чем развертывать готовый к работе кластер, рекомендуется ознакомиться с базовой эталонной архитектурой , чтобы понять, как она соответствует вашим бизнес-требованиям.
Подготовка к работе
- В этом руководстве предполагается, что у вас есть некоторое представление о функциях Kubernetes. Дополнительные сведения см. в статье Ключевые концепции Kubernetes для службы Azure Kubernetes (AKS).
- Вам потребуется учетная запись Azure с активной подпиской. Если у вас нет учетной записи, создайте бесплатную учетную запись.
- Следуйте инструкциям на основе интерфейса командной строки.
- Дополнительные сведения о создании пула узлов Windows Server см. в разделе Создание кластера AKS, поддерживающего контейнеры Windows Server.
Примечание.
Пул узлов Linux Azure теперь доступен в общем режиме доступности. Дополнительные сведения о преимуществах и действиях по развертыванию см. в статье "Общие сведения о узле контейнеров Linux Azure для AKS".
- Установите и настройте Terraform.
- Скачайте kubectl.
- Создайте случайное значение для имени группы ресурсов Azure с помощью random_pet.
- Создайте группу ресурсов Azure с помощью azurerm_resource_group.
- Перейдите к конфигурации поставщика AzureRM, чтобы получить идентификатор объекта Azure с помощью azurerm_client_config.
- Создайте кластер Kubernetes с помощью azurerm_kubernetes_cluster.
- Создайте azapi_resource ресурса AzAPI.
- Создайте ресурс AzAPI для создания пары ключей SSH с помощью azapi_resource_action.
Вход в учетную запись Azure.
Сначала войдите в учетную запись Azure и выполните проверку подлинности с помощью одного из методов, описанных в следующем разделе.
Terraform поддерживает проверку подлинности только в Azure с помощью Azure CLI. Проверка подлинности с помощью Azure PowerShell не поддерживается. Таким образом, хотя при выполнении работы Terraform можно использовать модуль Azure PowerShell, сначала необходимо выполнить проверку подлинности в Azure.
Реализация кода Terraform
Примечание.
Пример кода для этой статьи находится в репозитории Azure Terraform GitHub. Вы можете просмотреть файл журнала, содержащий результаты теста из текущих и предыдущих версий Terraform.
См. другие статьи и примеры кода, в которых показано, как использовать Terraform для управления ресурсами Azure.
Создайте каталог, который можно использовать для тестирования примера кода Terraform и сделать его текущим каталогом.
Создайте файл с именем
providers.tf
и вставьте следующий код: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 {} }
Создайте файл с именем
ssh.tf
и вставьте следующий код: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 }
Создайте файл с именем
main.tf
и вставьте следующий код:# 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" } }
Создайте файл с именем
variables.tf
и вставьте следующий код: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" }
Создайте файл с именем
outputs.tf
и вставьте следующий код: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 }
Инициализация Terraform
Запустите terraform init, чтобы инициализировать развертывание Terraform. Эта команда скачивает поставщик Azure, необходимый для управления ресурсами Azure.
terraform init -upgrade
Основные моменты:
- Параметр
-upgrade
обновляет необходимые подключаемые модули поставщика до последней версии, которая соответствует ограничениям версии конфигурации.
Создание плана выполнения Terraform
Чтобы создать план выполнения, выполните terraform plan.
terraform plan -out main.tfplan
Основные моменты:
- Команда
terraform plan
создает план выполнения, но не выполняет его. Вместо этого она определяет, какие действия необходимы для создания конфигурации, заданной в файлах конфигурации. Этот шаблон позволяет проверить, соответствует ли план выполнения вашим ожиданиям, прежде чем вы начнете вносить изменения в фактические ресурсы. - Необязательный параметр
-out
позволяет указать выходной файл для плана. Использование параметра-out
гарантирует, что проверяемый план полностью соответствует применяемому.
Применение плана выполнения Terraform
Выполните terraform apply, чтобы применить план выполнения к вашей облачной инфраструктуре.
terraform apply main.tfplan
Основные моменты:
- В примере
terraform apply
команды предполагается, что вы ранее выполнили.terraform plan -out main.tfplan
- Если для параметра
-out
указано другое имя файла, используйте то же имя в вызове кterraform apply
. - Если вы не использовали параметр
-out
, вызовитеterraform apply
без параметров.
Проверка результатов
Получите имя группы ресурсов Azure с помощью следующей команды.
resource_group_name=$(terraform output -raw resource_group_name)
Отображение имени нового кластера Kubernetes с помощью команды az aks list .
az aks list \ --resource-group $resource_group_name \ --query "[].{\"K8s cluster name\":name}" \ --output table
Получите конфигурацию Kubernetes из состояния Terraform и сохраните ее в файле, который
kubectl
может прочитать с помощью следующей команды.echo "$(terraform output kube_config)" > ./azurek8s
Убедитесь, что предыдущая команда не добавила символ EOT ASCII, используя следующую команду.
cat ./azurek8s
Основные моменты:
- Если вы видите
<< EOT
в начале иEOT
конце, удалите эти символы из файла. В противном случае может появиться следующее сообщение об ошибке:error: error loading config file "./azurek8s": yaml: line 2: mapping values are not allowed in this context
- Если вы видите
Задайте переменную среды, чтобы
kubectl
получить правильную конфигурацию с помощью следующей команды.export KUBECONFIG=./azurek8s
Проверьте работоспособность кластера с помощью
kubectl get nodes
команды.kubectl get nodes
Основные моменты:
- При создании кластера AKS мониторинг был включен для записи метрик работоспособности для узлов кластера и модулей pod. Эти метрики работоспособности доступны на портале Azure. Дополнительные сведения о мониторинге работоспособности контейнеров см. в разделе Включение мониторинга для существующих управляемых кластеров.
- При применении плана выполнения Terraform несколько ключевых значений, классифицируемых как выходные данные. Например, адрес узла, имя пользователя кластера AKS и пароль кластера AKS выходные данные.
Развертывание приложения
Чтобы развернуть приложение, используйте файл манифеста для создания всех объектов, необходимых для запуска приложения AKS Store. Файл манифеста Kubernetes используется для определения требуемого состояния кластера, например выполняемых в нем образов контейнеров. Манифест включает следующие развертывания и службы Kubernetes:
- Интерфейс магазина: веб-приложение для пользователей для просмотра продуктов и размещения заказов.
- Служба продуктов: отображает сведения о продукте.
- Служба заказов: помещает заказы.
- Rabbit MQ: очередь сообщений для очереди заказов.
Примечание.
Не рекомендуется запускать контейнеры с отслеживанием состояния, такие как Rabbit MQ, без постоянного хранения для рабочей среды. Они используются здесь для простоты, но мы рекомендуем использовать управляемые службы, такие как Azure CosmosDB или Служебная шина Azure.
Создайте файл с именем
aks-store-quickstart.yaml
и скопируйте его в следующем манифесте: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
Сведения о разбивке файлов манифеста YAML см. в разделе "Развертывания" и "Манифесты YAML".
Если вы создаете и сохраняете файл YAML локально, вы можете отправить файл манифеста в каталог по умолчанию в CloudShell, нажав кнопку "Отправить и скачать файлы " и выбрав файл из локальной файловой системы.
Разверните приложение с помощью
kubectl apply
команды и укажите имя манифеста YAML.kubectl apply -f aks-store-quickstart.yaml
В следующем примере выходных данных показаны развертывания и службы:
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
Тестирование приложения
При запуске приложения Служба Kubernetes предоставляет внешний интерфейс приложения в Интернете. Процесс создания может занять несколько минут.
Проверьте состояние развернутых модулей pod с помощью
kubectl get pods
команды. Прежде чем продолжить, сделайте все модули podRunning
.kubectl get pods
Проверьте общедоступный IP-адрес для приложения store-front. Отслеживайте ход выполнения с помощью команды с
kubectl get service
аргументом--watch
.kubectl get service store-front --watch
Выходные данные EXTERNAL-IP для
store-front
службы изначально отображаются как ожидающие:NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE store-front LoadBalancer 10.0.100.10 <pending> 80:30025/TCP 4h4m
Когда параметр EXTERNAL-IP вместо pending примет значение общедоступного IP-адреса, выполните команду
CTRL-C
, чтобы остановить процесс отслеживанияkubectl
.В следующем примере выходных данных показан общедоступный IP-адрес, присвоенный службе.
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE store-front LoadBalancer 10.0.100.10 20.62.159.19 80:30025/TCP 4h5m
Откройте веб-браузер на внешний IP-адрес службы, чтобы увидеть приложение Магазина Azure в действии.
Очистка ресурсов
Удаление ресурсов AKS
Если вам больше не нужны ресурсы, созданные через Terraform, выполните следующие действия:
Выполните команду terraform plan и укажите флаг
destroy
.terraform plan -destroy -out main.destroy.tfplan
Основные моменты:
- Команда
terraform plan
создает план выполнения, но не выполняет его. Вместо этого она определяет, какие действия необходимы для создания конфигурации, заданной в файлах конфигурации. Этот шаблон позволяет проверить, соответствует ли план выполнения вашим ожиданиям, прежде чем вы начнете вносить изменения в фактические ресурсы. - Необязательный параметр
-out
позволяет указать выходной файл для плана. Использование параметра-out
гарантирует, что проверяемый план полностью соответствует применяемому.
- Команда
Выполните команду terraform apply, чтобы применить план выполнения.
terraform apply main.destroy.tfplan
Удаление субъектов-служб.
Получите идентификатор субъекта-службы с помощью следующей команды.
sp=$(terraform output -raw sp)
Удалите субъект-службу с помощью команды az ad sp delete .
az ad sp delete --id $sp
- Установка интерфейса командной строки разработчика Azure (AZD)
- Установите и настройте Terraform.
- Вы можете просмотреть код приложения, используемый в репозитории Azure-Samples/aks-store-demo.
Клонирование шаблона интерфейса командной строки разработчика Azure
Интерфейс командной строки разработчика Azure позволяет быстро скачать примеры из репозитория Azure-Samples . В нашем кратком aks-store-demo
руководстве вы скачайте приложение. Дополнительные сведения об общих вариантах использования см. в обзореazd
.
Клонируйте демонстрационный шаблон хранилища AKS из репозитория Azure-Samples с помощью
azd init
команды с параметром--template
.azd init --template Azure-Samples/aks-store-demo
Введите имя среды для проекта, использующего только буквенно-цифровые символы и дефисы, например aks-terraform-1.
Enter a new environment name: aks-terraform-1
Вход в учетную запись Azure Cloud
Шаблон azd
содержит весь код, необходимый для создания служб, но для размещения приложения в AKS необходимо войти в учетную запись Azure.
Войдите в учетную запись с помощью
azd auth login
команды.azd auth login
Скопируйте код устройства, отображаемый в выходных данных, и нажмите клавишу ВВОД для входа.
Start by copying the next code: XXXXXXXXX Then press enter and continue to log in from your browser...
Внимание
Если вы используете виртуальную машину вне сети или GitHub Codespace, некоторые политики безопасности Azure вызывают конфликты при входе в
azd auth login
систему. При возникновении проблемы вы можете следовать предоставленному ей обходной путь azd auth, который включает использованиеcurl
запроса на URL-адрес localhost, на который вы были перенаправлены после выполненияazd auth login
.Проверка подлинности с помощью учетных данных на странице входа вашей организации.
Убедитесь, что вы пытаетесь подключиться из Azure CLI.
Проверьте сообщение "Проверка подлинности кода устройства завершена. Войдите в Azure". Отображается в исходном терминале.
Waiting for you to complete authentication in the browser... Device code authentication completed. Logged in to Azure.
azd auth обходной путь
Для этого обходного решения требуется установить Azure CLI .
Откройте окно терминала и войдите с помощью Azure CLI с помощью
az login
команды с заданным параметром--scope
https://graph.microsoft.com/.default
.az login --scope https://graph.microsoft.com/.default
Чтобы создать маркер доступа к браузеру, необходимо перенаправить на страницу проверки подлинности на новой вкладке, как показано в следующем примере:
https://login.microsoftonline.com/organizations/oauth2/v2.0/authorize?clientid=<your_client_id>.
Скопируйте URL-адрес localhost веб-страницы, полученной после попытки входа.
azd auth login
В новом окне терминала используйте следующий
curl
запрос для входа. Замените заполнитель URL-адресом<localhost>
localhost, скопированным на предыдущем шаге.curl <localhost>
Успешный вход выводит HTML-веб-страницу, как показано в следующем примере:
<!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>
Закройте текущий терминал и откройте исходный терминал. Вы увидите список JSON подписок.
id
Скопируйте поле подписки, которую вы хотите использовать.Задайте подписку
az account set
с помощью команды.az account set --subscription <subscription_id>
Создание и развертывание ресурсов для кластера
Чтобы развернуть приложение, используйте azd up
команду для создания всех объектов, необходимых для запуска приложения МАГАЗИНА AKS.
- Файл
azure.yaml
определяет требуемое состояние кластера, например образы контейнеров для получения и включают следующие развертывания и службы Kubernetes:
- Интерфейс магазина: веб-приложение для пользователей для просмотра продуктов и размещения заказов.
- Служба продуктов: отображает сведения о продукте.
- Служба заказов: помещает заказы.
- Rabbit MQ: очередь сообщений для очереди заказов.
Примечание.
Не рекомендуется запускать контейнеры с отслеживанием состояния, такие как Rabbit MQ, без постоянного хранения для рабочей среды. Они используются здесь для простоты, но мы рекомендуем использовать управляемые службы, такие как Azure Cosmos DB или Служебная шина Azure.
Развертывание ресурсов приложения
Шаблон azd
для этого краткого руководства создает новую группу ресурсов с кластером AKS и Azure Key Vault. Хранилище ключей хранит секреты клиента и запускает службы в pets
пространстве имен.
Создайте все ресурсы приложения с помощью
azd up
команды.azd up
azd up
запускает все перехватчики внутри папки для предварительнойazd-hooks
регистрации, подготовки и развертывания служб приложений.Настройте перехватчики для добавления пользовательского
azd
кода на этапы рабочего процесса. Дополнительные сведения см. в справочникеazd
по перехватчикам .Выберите подписку Azure для использования выставления счетов.
? Select an Azure Subscription to use: [Use arrows to move, type to filter] > 1. My Azure Subscription (xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx)
Выберите регион для развертывания приложения.
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
автоматически запускает перехватчики предварительной подготовки и postprovision, чтобы создать ресурсы для приложения. Процесс создания может занять несколько минут. После завершения вы увидите выходные данные, аналогичные следующему примеру:SUCCESS: Your workflow to provision and deploy to Azure completed in 9 minutes 40 seconds.
Создание планов Terraform
В шаблоне разработчика Azure папка /infra/terraform
содержит весь код, используемый для создания плана Terraform.
Terraform развертывает и выполняет команды, использующиеся terraform apply
в рамках azd
шага подготовки. После завершения вы увидите выходные данные, аналогичные следующему примеру:
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
Тестирование приложения
При запуске приложения Служба Kubernetes предоставляет внешний интерфейс приложения в Интернете. Процесс создания может занять несколько минут.
Задайте пространство имен в качестве демонстрационного
kubectl set-context
пространстваpets
имен с помощью команды.kubectl config set-context --current --namespace=pets
Проверьте состояние развернутых модулей pod с помощью
kubectl get pods
команды. Прежде чем продолжить, убедитесь, что все модули pod находятсяRunning
в процессе.kubectl get pods
Проверьте общедоступный IP-адрес для приложения на стороне магазина и отслеживайте ход выполнения с помощью
kubectl get service
команды с аргументом--watch
.kubectl get service store-front --watch
Выходные данные EXTERNAL-IP для
store-front
службы изначально отображаются как ожидающие:NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE store-front LoadBalancer 10.0.100.10 <pending> 80:30025/TCP 4h4m
Когда параметр EXTERNAL-IP вместо pending примет значение общедоступного IP-адреса, выполните команду
CTRL-C
, чтобы остановить процесс отслеживанияkubectl
.В следующем примере выходных данных показан допустимый общедоступный IP-адрес, назначенный службе:
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE store-front LoadBalancer 10.0.100.10 20.62.159.19 80:30025/TCP 4h5m
Откройте веб-браузер на внешний IP-адрес службы, чтобы увидеть приложение Магазина Azure в действии.
Удаление кластера
Завершив работу с кратким руководством, очистите ненужные ресурсы, чтобы избежать расходов Azure.
Удалите все ресурсы, созданные в кратком руководстве
azd down
, с помощью команды.azd down
Подтвердите решение удалить все используемые ресурсы из подписки, введя
y
и нажав клавишуEnter
.? Total resources to delete: 14, are you sure you want to continue? (y/N)
Разрешить очистку повторно использовать переменные быстрого запуска, если применимо, введя
y
и нажав клавишуEnter
.[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.
Устранение неполадок с Terraform в Azure
Устранение распространенных проблем при использовании Terraform в Azure.
Следующие шаги
С помощью этого краткого руководства вы развернули кластер Kubernetes и простое многоконтейнерное приложение в нем. Этот пример приложения предназначен только для демонстрационных целей и не представляет все рекомендации для приложений Kubernetes. Рекомендации по созданию полных решений с помощью AKS для рабочей среды см . в руководстве по решению AKS.
Чтобы узнать больше об AKS и ознакомиться с полным примером кода к развертыванию, перейдите к руководству по кластеру Kubernetes.
Azure Kubernetes Service