Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Este guia explica o processo de instalação completo para executar um cluster Valkey no AKS. Esse processo inclui a configuração de variáveis de ambiente, o provisionamento dos principais recursos do Azure (como um grupo de recursos, o Azure Key Vault e o ACR (Registro de Contêiner do Azure)), a criação de um cluster do AKS com identidade de carga de trabalho integrada e o gerenciamento de segredos. Também aborda a criação de um pool de nós dedicado para cargas de trabalho Valkey e como importar imagens Valkey para o seu registro privado. Se você preferir infraestrutura como código, o guia incluirá um caminho de implantação alternativo usando o Terraform com módulos verificados do Azure, garantindo as práticas recomendadas e a preparação para a produção.
Para implantar a infraestrutura usando o Terraform, usamos o Módulo Verificado do Azurepara 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 do AKS para módulos verificados do Azure. Este módulo vem acoplado a recomendações de práticas recomendadas.
Pré-requisitos
- Consulte a Visão geral da solução para implantar um cluster do Valkey no AKS (Serviço de Kubernetes do Azure).
- Uma assinatura do Azure. Crie uma conta gratuita se ainda não tiver a sua.
- CLI do Azure versão 2.61.0. Para instalar ou atualizar, confira Instalar a CLI do Azure.
- Helm versão 3 ou posterior. Para instalar, consulte Instalar o Helm.
-
kubectl, que o Azure Cloud Shell instala por padrão. - O Docker instalado em seu computador local. Para instalar, confira 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 comando
az group create.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
Criar uma instância do Azure Key Vault usando o comando
az keyvault create. 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 Registro de Contêiner do Azure
Crie um Registro de Contêiner do Azure para armazenar e gerenciar suas imagens de contêiner usando o comando
az acr create.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 AKS
Nesta etapa, criamos um cluster do AKS. Habilitamos o complemento do provedor de Segredos do Azure Key Vault (azure-keyvault-secrets-provider), que permite que o cluster do AKS acesse segredos armazenados no Azure Key Vault. Também habilitamos a identidade da carga de trabalho, que permite que o cluster do AKS acesse outros recursos do Azure com segurança.
Crie um cluster do AKS usando o comando
az aks create.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
Obter a ID de identidade e a ID do objeto para o provedor de Segredos do Azure Key Vault
Obtenha as IDs de identidade e de objeto criadas pelo complemento do provedor de Segredos do Azure Key Vault usando o comando
az aks show.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 função
AcrPullna identidade do kubelet usando o comandoaz role assignment create.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, criaremos 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, pois queremos ter um secundário por primário em uma zona diferente. As réplicas estão programadas para a terceira zona.
Crie um novo pool de nós usando o comando
az aks nodepool add.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 em seu Registro de Contêiner do Azure
Nesta seção, baixamos a imagem valkey do Hub do Docker 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 no cluster do AKS. Não é recomendável consumir a imagem pública em um ambiente de produção.
Importe a imagem do Valkey do Dockerhub e carregue-a no Registro de Contêiner do Azure usando o comando
az acr import.az acr import \ --name $MY_ACR_REGISTRY \ --source docker.io/valkey/valkey:latest \ --image valkey:latest \ --output table
Clonar 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 arquivo de variáveis do Terraform
Defina variáveis valkey criando um
valkey.tfvarsarquivo com o conteúdo a seguir. 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" } }
Implantar a infraestrutura
Para implantar a infraestrutura, execute os comandos do Terraform. Nesta etapa, definimos as variáveis necessárias para implantar 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 do registro de contêiner que importam imagens Valkey para o registro podem falhar. Para obter mais informações, consulte container-registry-task. Na maioria dos casos, tentar novamente resolve o problema.
Execute o seguinte comando para exportar os valores de saída do 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óxima etapa
Colaboradores
A Microsoft atualiza este artigo. Os seguintes colaboradores o escreveram originalmente:
- Nelly Kiboi | Engenheiro de Serviços
- Saverio Proto | Engenheiro de Experiência do Cliente Principal
- Don High | Engenheiro de Cliente Principal
- LaBrina Loving | Engenheira de Serviço principal
- Ken Kilty | Diretor de TPM
- Russell de Pina | Diretor de TPM
- Colin Mixon | Gerente de Produto
- Ketan Chawda | Engenheiro de Clientes Sênior
- Naveed Kharadi | Engenheiro de Experiência do Cliente
- Erin Schaffer | Desenvolvedora de Conteúdo 2