De infrastructuur maken voor het uitvoeren van een Valkey-cluster in Azure Kubernetes Service (AKS)

Deze handleiding begeleidt het volledige installatieproces voor het uitvoeren van een Valkey-cluster op AKS. Dit proces omvat het configureren van omgevingsvariabelen, het inrichten van kernresources van Azure (zoals een resourcegroep, Azure Key Vault en Azure Container Registry (ACR)), het maken van een AKS-cluster met geïntegreerde workloadidentiteit en het beheren van geheimen. Het omvat ook het maken van een toegewezen knooppool voor Valkey-workloads en het importeren van Valkey-afbeeldingen in uw privéregister. Als u de voorkeur geeft aan infrastructuur als code, bevat de handleiding een alternatief implementatiepad met behulp van Terraform met Azure Verified Modules, zodat aanbevolen procedures en productiegereedheid worden gegarandeerd.

Voor het implementeren van de infrastructuur met Behulp van Terraform gebruiken we de azure-geverifieerde modulevoor AKS.

Opmerking

Als u van plan bent om deze implementatie in productie uit te voeren, raden we u aan de AKS-productiepatroonmodule voor gecontroleerde Azure-modules te bekijken. Deze module wordt geleverd in combinatie met best practice-aanbevelingen.

Vereisten

Omgevingsvariabelen instellen

  • Stel de vereiste omgevingsvariabelen in voor gebruik in deze handleiding:

    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
    

Een brongroep maken

  • Maak een resourcegroep met behulp van de az group create opdracht.

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

    Voorbeelduitvoer:

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

Een Azure Key Vault-exemplaar maken

  • Maak een Azure Key Vault-exemplaar met behulp van de az keyvault createopdracht. Azure Key Vault slaat veilig geheimen op, zoals API-sleutels, wachtwoorden, certificaten of cryptografische sleutels.

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

    Voorbeelduitvoer:

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

Een Azure Container Registry maken

  • Maak een Azure Container Registry om uw containerinstallatiekopieën op te slaan en te beheren met behulp van de az acr create opdracht.

    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)
    

    Voorbeelduitvoer:

    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
    

Een AKS-cluster maken

In deze stap maken we een AKS-cluster. We schakelen de invoegtoepassing Azure Key Vault Secrets-provider (azure-keyvault-secrets-provider) in, waarmee het AKS-cluster toegang heeft tot geheimen die zijn opgeslagen in Azure Key Vault. We schakelen ook workloadidentiteit in, waardoor het AKS-cluster veilig toegang heeft tot andere Azure-resources.

  • Maak een AKS-cluster met behulp van de az aks create opdracht.

    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
    

    Voorbeelduitvoer:

    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
    

Ophalen van de identiteit-id en object-id voor de Azure Key Vault Secret provider

  • Haal de identiteits-id en de object-id op die is gemaakt door de Azure Key Vault Secrets-providerinvoegtoepassing met behulp van de az aks show opdracht.

    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)
    

De AcrPull-rol toewijzen aan de kubelet-identiteit

  • Wijs de AcrPull rol toe aan de kubelet-identiteit met behulp van de az role assignment create opdracht.

    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
    

    Voorbeelduitvoer:

    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
    

Een knooppuntgroep maken voor de Valkey-workload

In deze sectie maken we een knooppuntgroep die is toegewezen aan het uitvoeren van de Valkey-workload. Deze knooppuntgroep heeft automatisch schalen uitgeschakeld en is aangemaakt met zes knooppunten, verdeeld over twee beschikbaarheidszones, omdat we per primaire één secundaire in een andere zone willen hebben. De replica's worden ingepland in de derde zone.

  • Maak een nieuwe knooppuntgroep met behulp van de az aks nodepool add opdracht.

    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
    

    Voorbeelduitvoer:

    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
    

Valkey-installatiekopieën uploaden naar uw Azure Container Registry

In deze sectie downloaden we de Valkey-installatiekopieën van Docker Hub en uploaden we deze naar Azure Container Registry. Deze stap zorgt ervoor dat de installatiekopieën beschikbaar zijn in uw privéregister en kunnen worden gebruikt in uw AKS-cluster. We raden af om de openbare image in een productieomgeving te gebruiken.

  • Importeer de Valkey-image van Docker Hub en push deze met de opdracht az acr import naar uw Azure Container Registry.

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

De Terraform-module klonen

  • Kloon de Git-opslagplaats met de Terraform-module.

    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
    

Een Terraform-variabelenbestand maken

  • Stel Valkey-variabelen in door een valkey.tfvars bestand te maken met de volgende inhoud. U kunt in deze stap ook uw specifieke variabelen opgeven:

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

De infrastructuur implementeren

  1. Voer de Terraform-opdrachten uit om de infrastructuur te implementeren. In deze stap stellen we de vereiste variabelen in voor het implementeren van 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"
    

    Opmerking

    In sommige gevallen kunnen de containerregister-taken die Valkey-afbeeldingen importeren naar het containerregister mislukken. Zie container-registry-task voor meer informatie. In de meeste gevallen wordt het probleem opgelost door het opnieuw te proberen.

  2. Voer de volgende opdracht uit om de Terraform-uitvoerwaarden als omgevingsvariabelen in de terminal te exporteren om deze in de volgende stappen te gebruiken:

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

Volgende stap

Bijdragers

Microsoft onderhoudt dit artikel. De volgende inzenders hebben het oorspronkelijk geschreven:

  • Nelly Kiboi | servicemonteur
  • Saverio Proto | Principal Customer Experience Engineer
  • Don High | Hoofd Customer Engineer
  • LaBrina Loving | Hoofd Service Engineer
  • Ken Kilty | Hoofd TPM
  • Russell de Pina | Principal TPM
  • Colin Mixon | Product Manager
  • Ketan Chawda | Senior klanttechnicus
  • Naveed Kharadi | Klantervaringstechnicus
  • Erin Schaffer | Inhoudsontwikkelaar 2