Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Начало работы с узлом контейнеров Linux Azure с помощью Terraform для развертывания кластера узла контейнеров Linux Azure. После установки необходимых компонентов вы реализуете код Terraform, инициализируете Terraform и создаете и применяете план выполнения Terraform.
Terraform поддерживает определение, предварительный просмотр и развертывание облачной инфраструктуры. С помощью Terraform вы создаете файлы конфигурации с помощью синтаксиса HCL. Синтаксис HCL позволяет указать поставщика облачных служб и элементы, составляющие облачную инфраструктуру. После создания файлов конфигурации создается план выполнения, который позволяет предварительно просматривать изменения инфраструктуры до их развертывания. После проверки изменений примените план выполнения для развертывания инфраструктуры.
Примечание.
Пример кода, приведенный в этой статье, находится в репозитории Майкрософт для Terraform на GitHub.
Это важно
По состоянию на 30 ноября 2025 г. служба Azure Kubernetes (AKS) больше не поддерживает или предоставляет обновления для системы безопасности для Azure Linux 2.0. Образ узла Linux 2.0 Azure заморожен в выпуске 202512.06.0. Начиная с 31 марта 2026 г. образы узлов будут удалены, и вы не сможете масштабировать пулы узлов. Выполните миграцию в поддерживаемую версию Linux Azure, обновив пулы узлов до поддерживаемой версии Kubernetes или переключив ее на osSku AzureLinux3. Дополнительные сведения см. в статье «Вывод из эксплуатации: пулы узлов Azure Linux 2.0 в AKS».
Предварительные условия
-
Если у вас нет аккаунта Azure, создайте бесплатную учетную запись перед началом.
Если вы еще не настроили Terraform, это можно сделать с помощью одного из следующих вариантов:
Если у вас нет субъекта-службы Azure, создайте субъект-службу. Запишите
appId,display_name,passwordиtenant.Вам потребуется командная строка Kubernetes
kubectl. Если у вас его нет, скачайте kubectl.
Создание пары ключей SSH
Подключение к узлам AKS выполняется с парой ключей SSH (открытого и закрытого), которые создаются с помощью команды ssh-keygen. По умолчанию эти файлы хранятся в каталоге ~/.ssh. При выполнении ssh-keygen команды выполняется перезапись любой пары ключей SSH с тем же именем, что и в указанном расположении.
Перейдите по адресу https://shell.azure.com, чтобы открыть Cloud Shell в браузере.
Выполните команду
ssh-keygen. Следующий пример создает пару 4096-разрядных ключей SSH с шифрованием RSA:ssh-keygen -t rsa -b 4096
Дополнительные сведения о создании ключей SSH см. в статье Detailed steps: Create and manage SSH keys for authentication to a Linux VM in Azure (Подробные инструкции. Создание ключей SSH для проверки подлинности на виртуальной машине Linux в Azure и управление этими ключами).
Реализация кода Terraform
Создайте каталог для тестирования примера кода Terraform и сделайте его текущим каталогом.
Создайте файл с именем
providers.tfи вставьте следующий код:terraform { required_version = ">=1.0" required_providers { azurerm = { source = "hashicorp/azurerm" version = "~>3.0" } random = { source = "hashicorp/random" version = "~>3.0" } } } provider "azurerm" { features {} }Создайте файл с именем
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_id" "log_analytics_workspace_name_suffix" { byte_length = 8 } resource "azurerm_log_analytics_workspace" "test" { location = var.log_analytics_workspace_location # The WorkSpace name has to be unique across the whole of azure; # not just the current subscription/tenant. name = "${var.log_analytics_workspace_name}-${random_id.log_analytics_workspace_name_suffix.dec}" resource_group_name = azurerm_resource_group.rg.name sku = var.log_analytics_workspace_sku } resource "azurerm_log_analytics_solution" "test" { location = azurerm_log_analytics_workspace.test.location resource_group_name = azurerm_resource_group.rg.name solution_name = "ContainerInsights" workspace_name = azurerm_log_analytics_workspace.test.name workspace_resource_id = azurerm_log_analytics_workspace.test.id plan { product = "OMSGallery/ContainerInsights" publisher = "Microsoft" } } resource "azurerm_kubernetes_cluster" "k8s" { location = azurerm_resource_group.rg.location name = var.cluster_name resource_group_name = azurerm_resource_group.rg.name dns_prefix = var.dns_prefix tags = { Environment = "Development" } default_node_pool { name = "azurelinuxpool" vm_size = "Standard_D2_v2" node_count = var.agent_count os_sku = "AzureLinux" } linux_profile { admin_username = "azurelinux" ssh_key { key_data = file(var.ssh_public_key) } } network_profile { network_plugin = "kubenet" load_balancer_sku = "standard" } service_principal { client_id = var.aks_service_principal_app_id client_secret = var.aks_service_principal_client_secret } }Аналогичным образом можно указать Azure Linux
os_skuв azurerm_kubernetes_cluster_node_pool.Создайте файл с именем
variables.tfи вставьте следующий код:variable "agent_count" { default = 3 } # The following two variable declarations are placeholder references. # Set the values for these variable in terraform.tfvars variable "aks_service_principal_app_id" { default = "" } variable "aks_service_principal_client_secret" { default = "" } variable "cluster_name" { default = "k8stest" } variable "dns_prefix" { default = "k8stest" } # Refer to https://azure.microsoft.com/global-infrastructure/services/?products=monitor for available Log Analytics regions. variable "log_analytics_workspace_location" { default = "eastus" } variable "log_analytics_workspace_name" { default = "testLogAnalyticsWorkspaceName" } # Refer to https://azure.microsoft.com/pricing/details/monitor/ for Log Analytics pricing variable "log_analytics_workspace_sku" { default = "PerGB2018" } variable "resource_group_location" { default = "eastus" description = "Location of the resource group." } variable "resource_group_name_prefix" { 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 "ssh_public_key" { default = "~/.ssh/id_rsa.pub" }Создайте файл с именем
outputs.tfи вставьте следующий код: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 } output "resource_group_name" { value = azurerm_resource_group.rg.name }Создайте файл с именем
terraform.tfvarsи вставьте следующий код:aks_service_principal_app_id = "<service_principal_app_id>" aks_service_principal_client_secret = "<service_principal_password>"
Инициализация Terraform и создание плана выполнения
Инициализировать Terraform и скачать модули Azure, необходимые для управления ресурсами Azure с помощью
terraform initкоманды.terraform initСоздайте план выполнения 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без параметров.
Проверка результатов
Получите имя группы ресурсов с помощью следующей
echoкоманды.echo "$(terraform output resource_group_name)"Перейдите на портал Azure.
В службах Azure выберите группы ресурсов и найдите новую группу ресурсов, чтобы просмотреть следующие ресурсы, созданные в этой демонстрации:
- Решение. По умолчанию демонстрационные имена этого решения ContainerInsights. На портале отображается имя рабочей области решения в скобках.
- Служба Kubernetes: по умолчанию демонстрационные имена этой службы k8stest. Управляемый кластер Kubernetes также известен как AKS/Azure Kubernetes Service (Служба Kubernetes Azure).
- Рабочая область Log Analytics: по умолчанию демонстрационная версия автоматически присваивает этой рабочей области имя с префиксом TestLogAnalyticsWorkspaceName-, за которым следует случайное число.
Получите конфигурацию Kubernetes из состояния Terraform и сохраните ее в файле, который kubectl может прочитать с помощью следующей
echoкоманды.echo "$(terraform output kube_config)" > ./azurek8sУбедитесь, что предыдущая команда не добавила символ EOT ASCII, используя следующую
catкоманду.cat ./azurek8sЕсли вы видите
<< EOTв начале иEOTконце, удалите эти символы из файла. В противном случае может появиться следующее сообщение об ошибке:error: error loading config file "./azurek8s": yaml: line 2: mapping values are not allowed in this contextЗадайте переменную среды, чтобы kubectl взял правильную конфигурацию с помощью следующей
exportкоманды.export KUBECONFIG=./azurek8sПроверьте работоспособность кластера с помощью
kubectl get nodesкоманды.kubectl get nodesКогда был создан кластер хостов контейнеров Azure Linux, мониторинг был включен для записи метрик работоспособности как для узлов кластера, так и для подов. Эти метрики работоспособности доступны на портале Azure. Для получения дополнительных сведений о мониторинге работоспособности сервиса Azure Kubernetes см. Мониторинг работоспособности Azure Kubernetes Service.
При применении плана выполнения Terraform было выведено несколько ключевых значений. Например, выводятся адрес узла, имя пользователя и пароль кластера узла контейнеров Azure Linux.
Чтобы просмотреть все выходные значения, выполните команду
terraform output. Чтобы просмотреть определенное выходное значение, выполните командуecho "$(terraform output <output_value_name>)".
Очистка ресурсов
Удаление ресурсов AKS
Если ресурсы, созданные с помощью Terraform, больше не нужны, их можно удалить, выполнив следующие действия.
terraform planВыполните команду и укажитеdestroyфлаг.terraform plan -destroy -out main.destroy.tfplanУдалите план выполнения с помощью
terraform applyкоманды.terraform apply main.destroy.tfplan
Удалить сервисный принципал.
Внимание
Удалите учетную запись службы, использованную в этой демонстрации, только если вы не используете её для других целей.
Получите идентификатор объекта главного элемента службы командой
az ad sp listaz ad sp list --display-name "<display_name>" --query "[].{\"Object ID\":id}" --output tableУдалите учетную запись службы с помощью команды
az ad sp delete.az ad sp delete --id <service_principal_object_id>
Устранение неполадок с Terraform в Azure
Устранение распространенных проблем при использовании Terraform в Azure.
Следующие шаги
В этом кратком руководстве вы развернули кластер узла контейнеров Azure Linux. Чтобы узнать больше о узле контейнера Azure Linux и ознакомиться с полным примером развертывания кластера и управления, перейдите к руководству по узлу контейнеров Azure Linux.