Início Rápido: Implantar um cluster do Host de Contêiner do Linux do Azure para AKS usando um modelo do ARM
Introdução ao Host de Contêiner do Linux do Azure usando um modelo do ARM (Azure Resource Manager) para implantar um cluster do Host de Contêiner do Linux do Azure. Depois de instalar os pré-requisitos, você criará um par de chaves SSH, examinará, implantará e validará o modelo e, em seguida, implantará um aplicativo.
Um Modelo do Azure Resource Manager é um arquivo JSON (JavaScript Object Notation) que define a infraestrutura e a configuração do seu projeto. O modelo usa a sintaxe declarativa. Você descreve a implantação pretendida sem escrever a sequência de comandos de programação para criar a implantação.
Pré-requisitos
-
Caso você não tenha uma assinatura do Azure, crie uma conta gratuita do Azure antes de começar.
Use o ambiente Bash no Azure Cloud Shell. Para saber mais, confira Início rápido do Azure Cloud Shell – Bash.
Se preferir executar os comandos de referência da CLI localmente, instale a CLI do Azure. Para execuções no Windows ou no macOS, considere executar a CLI do Azure em um contêiner do Docker. Para obter mais informações, confira Como executar a CLI do Azure em um contêiner do Docker.
Se estiver usando uma instalação local, entre com a CLI do Azure usando o comando az login. Para concluir o processo de autenticação, siga as etapas exibidas no terminal. Para ver outras opções de entrada, confira Conectar-se com a CLI do Azure.
Quando solicitado, instale a extensão da CLI do Azure no primeiro uso. Para obter mais informações sobre extensões, confira Usar extensões com a CLI do Azure.
Execute az version para localizar a versão e as bibliotecas dependentes que estão instaladas. Para fazer a atualização para a versão mais recente, execute az upgrade.
Se você ainda não tiver o kubectl instalado, instale-o por meio da CLI do Azure usando
az aks install-cli
ou siga as instruções upstream.Forneça uma chave pública SSH para criar um cluster do AKS usando um modelo do Resource Manager. Caso precise desse recurso, confira a seção abaixo. Caso contrário, vá para a seção Examinar o modelo.
A identidade que você está usando para criar o cluster tem as permissões mínimas apropriadas. Para obter mais informações sobre acesso e identidade do AKS, confira Opções de acesso e identidade para o AKS (Serviço de Kubernetes do Azure).
Para implantar um arquivo Bicep ou um modelo do ARM, você precisa de acesso de gravação nos recursos que está implantando e acesso a todas as operações no tipo de recurso Microsoft.Resources/implantações. Por exemplo, para implantar uma máquina virtual, você precisa das permissões Microsoft.Compute/virtualMachines/write e Microsoft.Resources/deployments/*. Para ver uma lista de funções e permissões, consulte Funções interna do Azure.
Criar um par de chaves SSH
Para acessar os nós do AKS, você se conecta usando um par de chaves SSH (pública e privada), que você gera usando o comando ssh-keygen
. Por padrão, esses arquivos são criados no diretório ~/.ssh. A execução do comando ssh-keygen
substituirá qualquer par de chaves SSH com o mesmo nome já existente na localização especificada.
Acesse https://shell.azure.com para abrir o Cloud Shell no navegador.
Execute o comando
ssh-keygen
. O seguinte exemplo cria um par de chaves SSH usando a criptografia RSA e o tamanho de bit 4096:ssh-keygen -t rsa -b 4096
Para obter mais informações sobre como criar chaves SSH, confira Criar e gerenciar chaves SSH para autenticação no Azure.
Examinar o modelo
A implantação a seguir usa um modelo do ARM dos Modelos de Início Rápido do 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 adicionar o Linux do Azure a um modelo do ARM existente, você precisa adicionar "osSKU": "AzureLinux"
e "mode": "System"
a agentPoolProfiles
e definir a apiVersion como 2021-03-01 ou mais recente ("apiVersion": "2021-03-01"
).
Implantar o modelo
Selecione o botão a seguir para entrar no Azure e abrir um modelo.
Selecione ou insira os seguintes valores.
Para este início rápido, deixe os valores padrão para Tamanho em GB do Disco do Sistema Operacional, Contagem de Agentes, Tamanho da VM do Agente, Tipo de Sistema Operacional e Versão do Kubernetes. Forneça seus próprios valores para os seguintes parâmetros de modelo:
- Assinatura: Selecione uma assinatura do Azure.
- Grupo de recursos: Selecione Criar novo. Insira um nome exclusivo para o grupo de recursos, como testAzureLinuxResourceGroup, e clique em OK.
- Localização: selecione um local, como Leste dos EUA.
- Nome do cluster: insira um nome exclusivo para o cluster do AKS, como testAzureLinuxCluster.
- Prefixo DNS: insira um prefixo DNS exclusivo para o cluster, como myAzureLinuxCluster.
- Nome do usuário administrador do Linux: insira um nome de usuário para se conectar usando SSH, como azureUser.
- Chave pública RSA SSH: copie e cole a parte pública do seu par de chaves SSH (por padrão, o conteúdo de ~/.ssh/id_rsa.pub).
Selecione Examinar + criar.
A criação do cluster do Host de Contêiner do Linux do Azure leva alguns minutos para ser concluída. Aguarde até que o cluster seja implantado com êxito antes de passar para a próxima etapa.
Validar a implantação
Conectar-se ao cluster
Para gerenciar um cluster do Kubernetes, use o cliente de linha de comando do Kubernetes, kubectl.
Instale
kubectl
localmente usando o comandoaz aks install-cli
:az aks install-cli
Configure o
kubectl
para se conectar ao cluster do Kubernetes usando o comandoaz aks get-credentials
. Este comando baixa as credenciais e configura a CLI do Kubernetes para usá-las.az aks get-credentials --resource-group testAzureLinuxResourceGroup --name testAzureLinuxCluster
Verifique a conexão com o cluster usando o comando
kubectl get
. Esse comando retorna uma lista dos nós de cluster.kubectl get nodes
O exemplo de saída a seguir mostra os três nós criados nas etapas anteriores. Verifique se que o status do nó é Pronto:
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
Implantar o aplicativo
Um arquivo de manifesto do Kubernetes define o estado desejado de um cluster, por exemplo, as imagens de contêiner a serem executadas.
Neste guia de início rápido, você usa um manifesto para criar todos os objetos necessários para executar o aplicativo Azure Vote. Esse manifesto inclui duas implantações do Kubernetes:
- Os aplicativos Azure Vote de exemplo em Python.
- Uma instância do Redis.
Dois Serviços Kubernetes também são criados:
- Um serviço interno para a instância do Redis.
- Um serviço externo para acessar o aplicativo Azure Vote da Internet.
Crie um arquivo chamado
azure-vote.yaml
.- Se você usar o Azure Cloud Shell, esse arquivo poderá ser criado usando
code
,vi
ounano
, como se você estivesse trabalhando em um sistema físico ou virtual
- Se você usar o Azure Cloud Shell, esse arquivo poderá ser criado usando
Copie a seguinte definição 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 obter um detalhamento dos arquivos de manifesto YAML, confira Implantações e manifestos YAML.
Implante o aplicativo usando o comando kubectl apply e especifique o nome do manifesto YAML:
kubectl apply -f azure-vote.yaml
O exemplo a seguir é semelhante à saída que mostra as implantações e serviços criados com êxito:
deployment "azure-vote-back" created service "azure-vote-back" created deployment "azure-vote-front" created service "azure-vote-front" created
Testar o aplicativo
Quando o aplicativo é executado, um serviço de Kubernetes expõe o front-end do aplicativo à Internet. A conclusão desse processo pode levar alguns minutos.
Monitore o andamento usando o comando kubectl get service com o argumento --watch
.
kubectl get service azure-vote-front --watch
A saída EXTERNAL-IP do serviço azure-vote-front
será mostrada inicialmente como pendente.
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
azure-vote-front LoadBalancer 10.0.37.27 <pending> 80:30572/TCP 6s
Quando o endereço EXTERNAL-IP for alterado de pendente para um endereço IP público real, use CTRL-C
para interromper o processo de inspeção do kubectl
. A seguinte saída de exemplo mostra um endereço IP público válido atribuído ao serviço:
azure-vote-front LoadBalancer 10.0.37.27 52.179.23.131 80:30572/TCP 2m
Para ver o aplicativo Azure Vote em ação, abra um navegador da Web no endereço IP externo do serviço.
Excluir o cluster
Se você não pretende continuar com os tutoriais a seguir, evite encargos do Azure limpando todos os recursos desnecessários. Para remover o grupo de recursos e todos os recursos associados, use o comando az group delete
.
az group delete --name testAzureLinuxCluster --yes --no-wait
Próximas etapas
Neste início rápido, você implantou um cluster do Host de Contêiner do Linux do Azure. Para saber mais sobre o Host de Contêiner do Linux do Azure e conferir um exemplo completo de implantação e gerenciamento de cluster, prossiga para o tutorial do Host de Contêiner do Linux do Azure.