Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
Introdução ao Host de Contêiner Linux do Azure usando o Terraform para implantar um cluster de Host de Contêiner Linux do Azure. Depois de instalar os pré-requisitos, você implementa o código Terraform, inicializa Terraform e cria e aplica um plano de execução Terraform.
Terraform permite a definição, visualização e implantação de infraestrutura em nuvem. Com o Terraform, você cria arquivos de configuração usando a sintaxe HCL. A sintaxe HCL permite especificar o provedor de nuvem e os elementos que compõem sua infraestrutura de nuvem. Depois de criar os arquivos de configuração, você cria um plano de execução que permite visualizar as alterações na infraestrutura antes que elas sejam implantadas. Depois de verificar as alterações, você aplica o plano de execução para implantar a infraestrutura.
Nota
O código de exemplo neste artigo está localizado no repositório Microsoft Terraform GitHub.
Importante
Desde 30 de novembro de 2025, o Azure Kubernetes Service (AKS) já não suporta nem fornece atualizações de segurança para o Azure Linux 2.0. A imagem da máquina virtual do Azure Linux 2.0 está congelada na versão 202512.06.0. A partir de 31 de março de 2026, as imagens dos nós serão removidas e não conseguirá escalar os seus pools de nós. Migre para uma versão Azure Linux suportada atualizando os seus pools de nós para uma versão Kubernetes suportada ou migrando para o osSku AzureLinux3. Para obter mais informações, consulte Aposentadoria: pools de nós do Azure Linux 2.0 no AKS.
Pré-requisitos
-
Se não tiver uma conta do Azure, crie uma conta gratuita antes de começar.
Se você ainda não configurou o Terraform, você pode fazê-lo usando uma das seguintes opções:
Se você não tiver uma entidade de serviço do Azure, crie uma entidade de serviço. Anote o
appId,display_name,password, etenant.Você precisa da ferramenta
kubectlde linha de comando Kubernetes . Se você não tem, baixe kubectl.
Criar um par de chaves SSH
Para acessar os nós AKS, você se conecta usando um par de chaves SSH (público e privado), que você gera usando o ssh-keygen comando. Por padrão, esses arquivos são criados no diretório ~/.ssh . A execução do ssh-keygen comando substitui qualquer par de chaves SSH com o mesmo nome já existente no local determinado.
Vá para https://shell.azure.com abrir o Cloud Shell no seu navegador.
Execute o comando
ssh-keygen. O exemplo a seguir cria um par de chaves SSH usando criptografia RSA e um comprimento de bit de 4096:ssh-keygen -t rsa -b 4096
Para obter mais informações sobre como criar chaves SSH, consulte Criar e gerenciar chaves SSH para autenticação no Azure.
Implementar o código Terraform
Crie um diretório no qual testar o código Terraform de exemplo e torná-lo o diretório atual.
Crie um arquivo chamado
providers.tfe insira o seguinte código:terraform { required_version = ">=1.0" required_providers { azurerm = { source = "hashicorp/azurerm" version = "~>3.0" } random = { source = "hashicorp/random" version = "~>3.0" } } } provider "azurerm" { features {} }Crie um arquivo chamado
main.tfe insira o seguinte 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_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 } }Da mesma forma, você pode especificar o Azure Linux
os_skuno azurerm_kubernetes_cluster_node_pool.Crie um arquivo chamado
variables.tfe insira o seguinte código: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" }Crie um arquivo chamado
outputs.tfe insira o seguinte código: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 }Crie um arquivo chamado
terraform.tfvarse insira o seguinte código:aks_service_principal_app_id = "<service_principal_app_id>" aks_service_principal_client_secret = "<service_principal_password>"
Inicializar o Terraform e criar um plano de execução
Inicialize o Terraform e baixe os módulos do Azure necessários para gerenciar seus recursos do Azure usando o
terraform initcomando.terraform initCrie um plano de execução Terraform usando o
terraform plancomando.terraform plan -out main.tfplanO
terraform plancomando cria um plano de execução, mas não o executa. Em vez disso, ele determina quais ações são necessárias para criar a configuração especificada em seus arquivos de configuração. Esse padrão permite que você verifique se o plano de execução corresponde às suas expectativas antes de fazer quaisquer alterações nos recursos reais.O parâmetro opcional
-outpermite especificar um arquivo de saída para o plano. O uso do-outparâmetro garante que o plano revisado seja exatamente o que é aplicado.Para ler mais sobre planos de execução persistentes e segurança, consulte os avisos de segurança.
Aplique o plano de execução Terraform usando o
terraform applycomando.terraform apply main.tfplanO
terraform applycomando acima pressupõe que você executouterraform plan -out main.tfplananteriormente o . Se você especificou um nome de arquivo diferente para o-outparâmetro, use esse mesmo nome de arquivo na chamada paraterraform apply. Se você não usou o-outparâmetro, ligueterraform applysem nenhum parâmetro.
Verificar os resultados
Obtenha o nome do grupo de recursos usando o seguinte
echocomando.echo "$(terraform output resource_group_name)"Navegue para o portal do Azure.
Em Serviços do Azure, selecione Grupos de recursos e localize seu novo grupo de recursos para ver os seguintes recursos criados nesta demonstração:
- Solução: Por padrão, a demonstração nomeia essa solução como ContainerInsights. O portal mostra o nome do espaço de trabalho da solução entre parênteses.
- Serviço Kubernetes: Por padrão, a demonstração nomeia esse serviço como k8stest. (Um cluster Kubernetes gerenciado também é conhecido como um Serviço Kubernetes AKS/Azure.)
- Espaço de trabalho do Log Analytics: por padrão, a demonstração nomeia esse espaço de trabalho com um prefixo de TestLogAnalyticsWorkspaceName- seguido por um número aleatório.
Obtenha a configuração do Kubernetes do estado Terraform e armazene-a em um arquivo que o kubectl pode ler usando o seguinte
echocomando.echo "$(terraform output kube_config)" > ./azurek8sVerifique se o comando anterior não adicionou um caractere ASCII EOT usando o comando a seguir
cat.cat ./azurek8sSe você vir
<< EOTno início eEOTno final, remova esses caracteres do arquivo. Caso contrário, poderá receber a seguinte mensagem de erro:error: error loading config file "./azurek8s": yaml: line 2: mapping values are not allowed in this context.Defina uma variável de ambiente para que o kubectl pegue a configuração correta usando o comando a seguir
export.export KUBECONFIG=./azurek8sVerifique a integridade do cluster usando o
kubectl get nodescomando.kubectl get nodesQuando o cluster do Host de Contêiner Linux do Azure foi criado, o monitoramento foi habilitado para capturar métricas de integridade para os nós e pods do cluster. Estas métricas de estado de funcionamento estão disponíveis no portal do Azure. Para obter mais informações sobre a monitorização do estado de funcionamento dos contentores, veja Monitorizar o estado de funcionamento do Azure Kubernetes Service.
Vários valores-chave foram gerados quando você aplicou o plano de execução Terraform. Por exemplo, o endereço do host, o nome de usuário do cluster do Host do Contêiner do Azure Linux e a senha do cluster do Host do Contêiner do Azure Linux são a saída.
Para visualizar todos os valores de saída, execute
terraform output. Para exibir um valor de saída específico, executeecho "$(terraform output <output_value_name>)".
Clean up resources (Limpar recursos)
Excluir recursos do AKS
Quando você não precisar mais dos recursos criados com o Terraform, poderá removê-los usando as etapas a seguir.
Execute o
terraform plancomando e especifique odestroysinalizador.terraform plan -destroy -out main.destroy.tfplanRemova o plano de execução usando o
terraform applycomando.terraform apply main.destroy.tfplan
Excluir entidade de serviço
Atenção
Exclua a entidade de serviço usada nesta demonstração somente se não a estiver usando para mais nada.
Obter a ID do objeto da entidade de serviço usando o
az ad sp listcomandoaz ad sp list --display-name "<display_name>" --query "[].{\"Object ID\":id}" --output tableExclua a entidade de serviço usando o
az ad sp deletecomando.az ad sp delete --id <service_principal_object_id>
Solucionar problemas do Terraform no Azure
Solucione problemas comuns ao usar o Terraform no Azure.
Próximos passos
Neste início rápido, você implantou um cluster de Host de Contêiner Linux do Azure. Para saber mais sobre o Host de Contêiner Linux do Azure e percorrer um exemplo completo de implantação e gerenciamento de cluster, continue para o tutorial do Host de Contêiner Linux do Azure.