Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
Este guia percorre o processo de configuração completo para executar um cluster Valkey no AKS. Esse processo inclui a configuração de variáveis de ambiente, o provisionamento de recursos principais do Azure (como um grupo de recursos, o Cofre de Chaves do Azure e o Registro de Contêiner do Azure (ACR)), a criação de um cluster AKS com identidade de carga de trabalho integrada e o gerenciamento de segredos. Também aborda a criação de um grupo de nós dedicados para cargas de trabalho do Valkey e como importar imagens do Valkey para o seu registo privado. Se você preferir infraestrutura como código, o guia inclui um caminho de implantação alternativo usando o Terraform com Módulos Verificados do Azure, garantindo práticas recomendadas e prontidão de produção.
Para implementar a infraestrutura usando o Terraform, usamos o Azure Verified Modulepara AKS.
Observação
Se você estiver planejando executar essa implantação em produção, recomendamos examinar o módulo de padrão de produção AKS para Módulos Verificados do Azure. Este módulo vem acompanhado de recomendações de melhores práticas.
Pré-requisitos
- Se ainda não o fez, consulte a Visão geral da implantação de um cluster Valkey no Serviço Kubernetes do Azure (AKS).
- Uma subscrição do Azure. Se não tiver uma subscrição, crie uma conta gratuita.
- CLI do Azure versão 2.61.0. Para instalar ou atualizar, consulte Instalar a CLI do Azure.
- Leme versão 3 ou posterior. Para instalar, consulte Instalando o Helm.
-
kubectl, que o Azure Cloud Shell instala por padrão. - Docker instalado em sua máquina local. Para instalar, consulte Obter o Docker.
Definir variáveis de ambiente
Defina as variáveis de ambiente necessárias para uso ao longo deste guia:
random=$(echo $RANDOM | tr '[0-9]' '[a-z]') export MY_RESOURCE_GROUP_NAME=myResourceGroup-rg-$(echo $random) export MY_LOCATION=centralus export MY_ACR_REGISTRY=mydns$(echo $random) export MY_KEYVAULT_NAME=vault-$(echo $random)-kv export MY_CLUSTER_NAME=cluster-aks
Criar um grupo de recursos
Crie um grupo de recursos usando o
az group createcomando.az group create --name $MY_RESOURCE_GROUP_NAME --location $MY_LOCATION --output tableSaída de exemplo:
Location Name ---------- ------------------ eastus myResourceGroup-rg
Criar uma instância do Azure Key Vault
Crie uma instância do Azure Key Vault usando o
az keyvault createcomando. O Azure Key Vault armazena e acessa segredos com segurança, como chaves de API, senhas, certificados ou chaves criptográficas.az keyvault create --name $MY_KEYVAULT_NAME --resource-group $MY_RESOURCE_GROUP_NAME --location $MY_LOCATION --enable-rbac-authorization false --output tableSaída de exemplo:
Location Name ResourceGroup ---------- -------------- ------------------ eastus vault-bbbhe-kv myResourceGroup-rg
Criar um Azure Container Registry
Crie um Registro de Contêiner do Azure para armazenar e gerenciar suas imagens de contêiner usando o
az acr createcomando.az acr create \ --name ${MY_ACR_REGISTRY} \ --resource-group $MY_RESOURCE_GROUP_NAME \ --sku Premium \ --location $MY_LOCATION \ --admin-enabled true \ --output table export MY_ACR_REGISTRY_ID=$(az acr show --name $MY_ACR_REGISTRY --resource-group $MY_RESOURCE_GROUP_NAME --query id --output tsv)Saída de exemplo:
NAME RESOURCE GROUP LOCATION SKU LOGIN SERVER CREATION DATE ADMIN ENABLED -------------------- ------------------ ---------- ------- ------------------------------- -------------------- --------------- mydnsrandomnamebbbhe myResourceGroup-rg eastus Premium mydnsrandomnamebbbhe.azurecr.io 2024-06-11T09:36:43Z True
Criar um cluster do AKS
Nesta etapa, criamos um cluster AKS. Ativamos o complemento de fornecedor Azure Key Vault Secrets (azure-keyvault-secrets-provider), que permite ao cluster AKS aceder a segredos armazenados no Azure Key Vault. Também ativamos a identidade da carga de trabalho, que permite ao cluster AKS aceder de forma segura a outros recursos Azure.
Crie um cluster AKS usando o
az aks createcomando.az aks create \ --location $MY_LOCATION \ --name $MY_CLUSTER_NAME \ --tier standard \ --resource-group $MY_RESOURCE_GROUP_NAME \ --network-plugin azure \ --node-vm-size Standard_D4_v3 \ --node-count 3 \ --auto-upgrade-channel stable \ --node-os-upgrade-channel NodeImage \ --attach-acr ${MY_ACR_REGISTRY} \ --enable-oidc-issuer \ --enable-workload-identity \ --enable-addons azure-keyvault-secrets-provider \ --zones 1 2 3 \ --generate-ssh-keys \ --output tableSaída de exemplo:
Kind KubernetesVersion Location MaxAgentPools Name NodeResourceGroup ProvisioningState ResourceGroup ResourceUid SupportPlan ----------------------------------------------------------------------- -------------------------- ---------------------- ---------------------------------- ------------------------------------ ------------------------- ------------ ---------------------------------------------------------------- ------ ------------------- ---------- --------------- ----------- ---------------------------------------- ------------------- ------------------ ------------------------ ------------------ cluster-ak-myresourcegroup--9b70ac-hhrizake.portal.hcp.eastus.azmk8s.io 1.28.9 False cluster-ak-myResourceGroup--9b70ac a0a0a0a0-bbbb-cccc-dddd-e1e1e1e1e1e1 False True cluster-ak-myresourcegroup--9b70ac-hhrizake.hcp.eastus.azmk8s.io Base 1.28 eastus 100 cluster-aks MC_myResourceGroup-rg_cluster-aks_eastus Succeeded myResourceGroup-rg b1b1b1b1-cccc-dddd-eeee-f2f2f2f2f2f2 KubernetesOfficial
Obtenha o ID de identidade e o ID do objeto para o fornecedor Azure Key Vault Secrets
Obtenha o ID de identidade e o ID do objeto criados pelo complemento do fornecedor Azure Key Vault Secrets usando o
az aks showcomando.export userAssignedIdentityID=$(az aks show --resource-group $MY_RESOURCE_GROUP_NAME --name $MY_CLUSTER_NAME --query addonProfiles.azureKeyvaultSecretsProvider.identity.clientId --output tsv) export userAssignedObjectID=$(az aks show --resource-group $MY_RESOURCE_GROUP_NAME --name $MY_CLUSTER_NAME --query addonProfiles.azureKeyvaultSecretsProvider.identity.objectId --output tsv)
Atribuir a AcrPull função à identidade do kubelet
Atribua a
AcrPullfunção à identidade kubelet usando oaz role assignment createcomando.export KUBELET_IDENTITY=$(az aks show --resource-group $MY_RESOURCE_GROUP_NAME --name $MY_CLUSTER_NAME --output tsv --query identityProfile.kubeletidentity.objectId) az role assignment create \ --assignee ${KUBELET_IDENTITY} \ --role "AcrPull" \ --scope ${MY_ACR_REGISTRY_ID} \ --output tableSaída de exemplo:
CreatedBy CreatedOn Name PrincipalId PrincipalName PrincipalType ResourceGroup RoleDefinitionId RoleDefinitionName Scope UpdatedBy UpdatedOn ------------------------------------ -------------------------------- ------------------------------------ ------------------------------------ ------------------------------------ ---------------- ------------------ ------------------------------------------------------------------------------------------------------------------------------------------ -------------------- ----------------------------------------------------------------------------------------------------------------------------------------------------------- ------------------------------------ -------------------------------- bbbb1b1b-cc2c-dd3d-ee4e-ffffff5f5f5f 2024-06-11T09:41:36.631310+00:00 00aa00aa-bb11-cc22-dd33-44ee44ee44ee aaaaaaaa-bbbb-cccc-1111-222222222222 bbbbbbbb-cccc-dddd-2222-333333333333 ServicePrincipal myResourceGroup-rg /subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/providers/Microsoft.Authorization/roleDefinitions/aaaaaaaa-0000-1111-2222-bbbbbbbbbbbb AcrPull /subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/myResourceGroup-rg/providers/Microsoft.ContainerRegistry/registries/mydnsrandomnamebbbhe bbbb1b1b-cc2c-dd3d-ee4e-ffffff5f5f5f 2024-06-11T09:41:36.631310+00:00
Criar um pool de nós para a carga de trabalho do Valkey
Nesta seção, criamos um pool de nós dedicado à execução da carga de trabalho do Valkey. Esse pool de nós tem o dimensionamento automático desabilitado e é criado com seis nós em duas zonas de disponibilidade, porque queremos ter um secundário por primário em uma zona diferente. As réplicas estão programadas na terceira zona.
Crie um novo pool de nós usando o
az aks nodepool addcomando.while [ "$(az aks show --resource-group $MY_RESOURCE_GROUP_NAME --name $MY_CLUSTER_NAME --output tsv --query provisioningState)" != "Succeeded" ]; do echo "waiting for cluster to be ready"; sleep 10; done az aks nodepool add \ --resource-group $MY_RESOURCE_GROUP_NAME \ --cluster-name $MY_CLUSTER_NAME \ --name valkey \ --node-vm-size Standard_D4_v3 \ --node-count 6 \ --zones 1 2 3 \ --output tableSaída de exemplo:
Count CurrentOrchestratorVersion ETag EnableAutoScaling EnableCustomCaTrust EnableEncryptionAtHost EnableFips EnableNodePublicIp EnableUltraSsd KubeletDiskType MaxPods Mode Name NodeImageVersion OrchestratorVersion OsDiskSizeGb OsDiskType OsSku OsType ProvisioningState ResourceGroup ScaleDownMode TypePropertiesType VmSize WorkloadRuntime ------- ---------------------------- ------------------------------------ ------------------- --------------------- ------------------------ ------------ -------------------- ---------------- ----------------- --------- ------ ------ ---------------------------------------- --------------------- -------------- ------------ ------- -------- ------------------- ------------------ --------------- ----------------------- --------------- ----------------- 6 1.28.9 aaaa0000-bb11-2222-33cc-444444dddddd False False False False False False OS 30 User valkey AKSUbuntu-2204gen2containerd-202405.27.0 1.28 128 Managed Ubuntu Linux Succeeded myResourceGroup-rg Delete VirtualMachineScaleSets Standard_D4s_v3 OCIContainer
Carregar imagens do Valkey no seu Registo de Contentores do Azure
Nesta seção, baixamos a imagem do Valkey do Docker Hub e a carregamos no Registro de Contêiner do Azure. Esta etapa garante que a imagem esteja disponível em seu registro privado e possa ser usada em seu cluster AKS. Não recomendamos consumir a imagem pública em um ambiente de produção.
Importe a imagem do Valkey do Dockerhub e carregue-a para o Registro de Contêiner do Azure usando o
az acr importcomando.az acr import \ --name $MY_ACR_REGISTRY \ --source docker.io/valkey/valkey:latest \ --image valkey:latest \ --output table
Clone o módulo Terraform
Clone o repositório git com o módulo Terraform.
git clone https://github.com/Azure/terraform-azurerm-avm-res-containerservice-managedcluster.git cd terraform-azurerm-avm-res-containerservice-managedcluster/tree/stateful-workloads/examples/stateful-workloads-valkey
Criar um ficheiro de variáveis Terraform
Defina variáveis Valkey criando um
valkey.tfvarsarquivo com o seguinte conteúdo. Você também pode fornecer suas variáveis específicas nesta etapa:acr_task_content = <<-EOF version: v1.1.0 steps: - cmd: bash echo Waiting 10 seconds the propagation of the Container Registry Data Importer and Data Reader role - cmd: bash sleep 10 - cmd: az login --identity - cmd: az acr import --name $RegistryName --source docker.io/valkey/valkey:latest --image valkey:latest EOF valkey_enabled = true node_pools = { valkey = { name = "valkey" vm_size = "Standard_DS4_v2" node_count = 3 zones = [1, 2, 3] os_type = "Linux" } }
Implementar a infraestrutura
Para implementar a infraestrutura, execute os comandos Terraform. Neste passo, definimos as variáveis necessárias para implementar o Valkey.
terraform init export MY_RESOURCE_GROUP_NAME=myResourceGroup-rg export MY_LOCATION=centralus SECRET=$(openssl rand -base64 32) export TF_VAR_valkey_password=${SECRET} export TF_VAR_location=${MY_LOCATION} export TF_VAR_resource_group_name=${MY_RESOURCE_GROUP_NAME} terraform apply -var-file="valkey.tfvars"Observação
Em alguns casos, as tarefas de registro de contêiner que importam imagens Valkey para o registro de contêiner podem falhar. Para obter mais informações, consulte a tarefa de registo de contentores container-registry-task. Na maioria dos casos, tentar novamente resolve o problema.
Execute o seguinte comando para exportar os valores de saída Terraform como variáveis de ambiente no terminal para usá-los nas próximas etapas:
export MY_ACR_REGISTRY=$(terraform output -raw acr_registry_name) export MY_CLUSTER_NAME=$(terraform output -raw aks_cluster_name)
Próximo passo
Contribuidores
A Microsoft mantém este artigo. Os seguintes colaboradores escreveram-no originalmente:
- Nelly Kiboi - Brasil | Engenheiro de Serviços
- Saverio Proto - Brasil | Engenheiro Principal de Experiência do Cliente
- Don Alto | Engenheiro de Clientes Principal
- LaBrina Amar | Engenheiro de Serviços Principal
- Ken Kilty - Brasil | Principal TPM
- Russell de Pina - Brasil | Principal TPM
- Colin Mixon - Brasil | Gerente de Produto
- Ketan Chawda - Brasil | Engenheiro de Clientes Sênior
- Naveed Kharadi - Brasil | Engenheiro de Experiência do Cliente
- Erin Schaffer - Brasil | Desenvolvedor de Conteúdo 2