Skapa infrastrukturen för att köra ett Valkey-kluster på Azure Kubernetes Service (AKS)

Den här guiden går igenom hela installationsprocessen för att köra ett Valkey-kluster på AKS. Den här processen omfattar att konfigurera miljövariabler, etablera grundläggande Azure-resurser (till exempel en resursgrupp, Azure Key Vault och Azure Container Registry (ACR)), skapa ett AKS-kluster med integrerad arbetsbelastningsidentitet och hantera hemligheter. Den omfattar även skapandet av en dedikerad nodpool för Valkey-arbetsbelastningar och hur du importerar Valkey-avbildningar till ditt privata register. Om du föredrar infrastruktur som kod innehåller guiden en alternativ distributionssökväg med Terraform med Azure-verifierade moduler, vilket säkerställer bästa praxis och produktionsberedskap.

För att distribuera infrastrukturen med Terraform använder vi Azure-verifierad modulför AKS.

Anmärkning

Om du planerar att köra den här distributionen i produktion rekommenderar vi att du tittar på modulen AKS-produktionsmönster för Azure-verifierade moduler. Den här modulen levereras tillsammans med rekommendationer för bästa praxis.

Förutsättningar

Ange miljövariabler

  • Ange de miljövariabler som krävs för användning i den här guiden:

    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
    

Skapa en resursgrupp

  • Skapa en resursgrupp med kommandot az group create .

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

    Exempel på utdata>

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

Skapa en Azure Key Vault-instans

  • Skapa en Azure Key Vault-instans med kommandot az keyvault create. Azure Key Vault lagrar och kommer åt hemligheter som API-nycklar, lösenord, certifikat eller kryptografiska nycklar på ett säkert sätt.

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

    Exempel på utdata>

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

Skapa ett Azure Container Registry

  • Skapa ett Azure Container Registry för att lagra och hantera dina containeravbildningar med hjälp av az acr create kommandot .

    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)
    

    Exempel på utdata>

    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
    

Skapa ett AKS-kluster

I det här steget skapar vi ett AKS-kluster. Vi aktiverar tillägget Azure Key Vault Secrets Provider (azure-keyvault-secrets-provider), som gör att AKS-klustret kan komma åt hemligheter som lagras i Azure Key Vault. Vi aktiverar även arbetsbelastningsidentitet, vilket gör att AKS-klustret kan komma åt andra Azure-resurser på ett säkert sätt.

  • Skapa ett AKS-kluster med kommandot 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
    

    Exempel på utdata>

    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
    

Hämta identitets-ID och objekt-ID för Azure Key Vault Secrets-providern

  • Hämta identitets-ID:t och objekt-ID:t som skapats av Azure Key Vault Secrets-providertillägget az aks show med hjälp av kommandot .

    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 Tilldela rollen till kubelet-identiteten

  • Tilldela rollen AcrPull till kubelet-identiteten med kommandot az 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 table
    

    Exempel på utdata>

    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
    

Skapa en nodpool för Valkey-arbetsbelastningen

I det här avsnittet skapar vi en nodpool som är dedikerad för att köra Valkey-arbetsbelastningen. Den här nodpoolen har automatisk skalning inaktiverad och skapas med sex noder i två tillgänglighetszoner, eftersom vi vill ha en sekundär per primär i en annan zon. Replikerna schemaläggs i den tredje zonen.

  • Skapa en ny nodpool med kommandot 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 table
    

    Exempel på utdata>

    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
    

Ladda upp Valkey-avbildningar till Azure Container Registry

I det här avsnittet laddar vi ned Valkey-avbildningen från Docker Hub och laddar upp den till Azure Container Registry. Det här steget säkerställer att avbildningen är tillgänglig i ditt privata register och kan användas i AKS-klustret. Vi rekommenderar inte att du använder den offentliga avbildningen i en produktionsmiljö.

  • Importera Valkey-avbildningen från Dockerhub och ladda upp den till Azure Container Registry med hjälp av az acr import kommandot .

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

Klona modulen för Terraform

  • Klona git-lagringsplatsen med Terraform-modulen.

    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
    

Skapa en Terraform-variabelfil

  • Ange Valkey-variabler genom att skapa en valkey.tfvars fil med följande innehåll. Du kan också ange dina specifika variabler i det här steget:

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

Distribuera infrastrukturen

  1. Om du vill distribuera infrastrukturen kör du Terraform-kommandona. I det här steget anger vi de variabler som krävs för att distribuera 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"
    

    Anmärkning

    I vissa fall kan de containerregisteruppgifter som importerar Valkey-avbildningar till containerregistret misslyckas. Mer information finns i container-registry-task. I de flesta fall löser ett nytt försök problemet.

  2. Kör följande kommando för att exportera Terraform-utdatavärdena som miljövariabler i terminalen för att använda dem i nästa steg:

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

Nästa steg

Deltagare

Microsoft ansvarar för denna artikel. Följande deltagare skrev den ursprungligen:

  • Nelly Kiboi | Tjänsttekniker
  • Saverio Proto | Huvudtekniker för kundupplevelse
  • Don High | Huvudkundtekniker
  • LaBrina Loving | Huvudtjänsttekniker
  • Ken Kilty | Huvudnamn för TPM
  • Russell de Pina | Ledande TPM
  • Colin Mixon | Produktchef
  • Ketan Chawda | Senior kundtekniker
  • Naveed Kharadi | Kundupplevelsetekniker
  • Erin Schaffer | Innehållsutvecklare 2