Vytvoření infrastruktury pro spuštění clusteru Valkey ve službě Azure Kubernetes Service (AKS)

Tato příručka vás provede celým procesem nastavení pro spuštění clusteru Valkey v AKS. Tento proces zahrnuje konfiguraci proměnných prostředí, zřizování základních prostředků Azure (jako je skupina prostředků, Azure Key Vault a Azure Container Registry (ACR)), vytvoření clusteru AKS s integrovanou identitou úloh a správou tajných kódů. Zahrnuje také vytvoření vyhrazeného fondu uzlů pro úlohy Valkey a postup importu imagí Valkey do privátního registru. Pokud dáváte přednost infrastruktuře jako kódu, průvodce obsahuje alternativní cestu nasazení pomocí Terraformu s ověřenými moduly Azure, což zajišťuje osvědčené postupy a připravenost na produkční prostředí.

K nasazení infrastruktury pomocí Terraformu používáme ověřený modul Azurepro AKS.

Poznámka:

Pokud plánujete toto nasazení spustit v produkčním prostředí, doporučujeme se podívat na modul produkčního modelu AKS pro ověřené moduly Azure. Tento modul je propojený s doporučeními osvědčených postupů.

Požadavky

Nastavení proměnných prostředí

  • Nastavte požadované proměnné prostředí pro použití v tomto průvodci:

    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
    

Vytvoření skupiny zdrojů

  • Vytvořte skupinu prostředků pomocí příkazu az group create.

    az group create --name $MY_RESOURCE_GROUP_NAME --location $MY_LOCATION --output table
    

    Příklad výstupu:

    Location    Name
    ----------  ------------------
    eastus      myResourceGroup-rg
    

Vytvoření instance služby Azure Key Vault

  • Pomocí příkazu vytvořte instanci az keyvault createslužby Azure Key Vault. Azure Key Vault bezpečně ukládá tajné kódy, jako jsou klíče rozhraní API, hesla, certifikáty nebo kryptografické klíče.

    az keyvault create --name $MY_KEYVAULT_NAME --resource-group $MY_RESOURCE_GROUP_NAME --location $MY_LOCATION --enable-rbac-authorization false --output table
    

    Příklad výstupu:

    Location    Name            ResourceGroup
    ----------  --------------  ------------------
    eastus      vault-bbbhe-kv  myResourceGroup-rg
    

Vytvoření registru služby Azure Container Registry

  • Pomocí příkazu vytvořte službu Azure Container Registry pro ukládání a správu imagí kontejneru 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)
    

    Příklad výstupu:

    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
    

Vytvoření clusteru AKS

V tomto kroku vytvoříme cluster AKS. Povolíme doplněk zprostředkovatele tajných kódů služby Azure Key Vault (azure-keyvault-secrets-provider), který clusteru AKS umožní přístup k tajným kódům uloženým ve službě Azure Key Vault. Také povolíme identitu úloh, která clusteru AKS umožňuje zabezpečený přístup k dalším prostředkům Azure.

  • Vytvořte cluster služby AKS pomocí příkazu 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 table
    

    Příklad výstupu:

    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
    

Získání ID identity a ID objektu pro zprostředkovatele tajných kódů služby Azure Key Vault

  • Pomocí příkazu az aks show získejte ID identity a ID objektu vytvořené doplňkem poskytovatele tajemství služby Azure Key Vault.

    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)
    

AcrPull Přiřazení role k identitě kubeletu

  • Pomocí příkazu az role assignment create přiřaďte roli AcrPull identitě kubelet.

    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 table
    

    Příklad výstupu:

    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
    

Vytvoření fondu uzlů pro úlohu Valkey

V této části vytvoříme fond uzlů vyhrazený pro provozování úlohy Valkey. Tento fond uzlů má zakázané automatické škálování a je vytvořen se šesti uzly ve dvou zónách dostupnosti, protože chceme mít jeden sekundární uzel pro každý primární uzel v jiné zóně. Repliky jsou naplánovány k provedení ve třetí zóně.

  • Pomocí příkazu vytvořte nový fond az aks nodepool add uzlů.

    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 table
    

    Příklad výstupu:

    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
    

Nahrání imagí Valkey do služby Azure Container Registry

V této části stáhneme image Valkey z Docker Hubu a nahrajeme ji do služby Azure Container Registry. Tento krok zajistí, že je image dostupná ve vašem privátním registru a dá se použít v clusteru AKS. Nedoporučujeme používat veřejnou image v produkčním prostředí.

  • Importujte image Valkey z Dockerhubu a nahrajte ji do služby Azure Container Registry pomocí az acr import příkazu.

    az acr import \
        --name $MY_ACR_REGISTRY \
        --source docker.io/valkey/valkey:latest  \
        --image valkey:latest \
        --output table
    

Klonování modulu Terraform

  • Naklonujte úložiště Git pomocí modulu 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
    

Vytvořte soubor proměnných Terraformu

  • Nastavte proměnné Valkey vytvořením valkey.tfvars souboru s následujícím obsahem. V tomto kroku můžete také zadat konkrétní proměnné :

        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"
          }
        }
    

Nasazení infrastruktury

  1. Pokud chcete nasadit infrastrukturu, spusťte příkazy Terraformu. V tomto kroku nastavíme požadované proměnné pro nasazení 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"
    

    Poznámka:

    V některých případech můžou úlohy registru kontejneru, které importuje image Valkey do registru kontejneru, selhat. Další informace naleznete v tématu container-registry-task. Ve většině případů se problém vyřeší opakovaným pokusem.

  2. Spuštěním následujícího příkazu vyexportujte výstupní hodnoty Terraformu jako proměnné prostředí v terminálu, abyste je mohli použít v dalších krocích:

    export MY_ACR_REGISTRY=$(terraform output -raw acr_registry_name)
    export MY_CLUSTER_NAME=$(terraform output -raw aks_cluster_name)
    

Další krok

Přispěvatelé

Microsoft udržuje tento článek. Následující přispěvatelé ho původně napsali:

  • Nelly Kiboi | Servisní technik
  • Saverio Proto | Hlavní technik zákaznického prostředí
  • Don High | Hlavní zákaznický inženýr
  • LaBrina Loving | Vedoucí servisní inženýrka
  • Ken Kilty | Hlavní TPM
  • Russell de Pina | vedoucí technický programový manažer
  • Colin Mixon | Product Manager
  • Ketan Chawda | Vedoucí zákaznický inženýr
  • Naveed Kharadi | Technik zákaznického prostředí
  • Erin Schaffer | Content Developer 2