Azure Kubernetes Service'te (AKS) Valkey kümesi çalıştırmak için altyapı oluşturma

Bu kılavuz, AKS'de Valkey kümesi çalıştırmaya yönelik tüm kurulum işleminde yol gösterir. Bu işlem ortam değişkenlerini yapılandırmayı, temel Azure kaynaklarını (kaynak grubu, Azure Key Vault ve Azure Container Registry (ACR) gibi) sağlamayı, tümleşik iş yükü kimliğine sahip bir AKS kümesi oluşturmayı ve gizli dizileri yönetmeyi içerir. Ayrıca, Valkey iş yükleri için ayrılmış bir düğüm havuzu oluşturulmasını ve Valkey görüntülerinin özel kayıt defterinize nasıl aktarılacağını da kapsar. Kod olarak altyapıyı tercih ediyorsanız kılavuzda Terraform'un Azure Doğrulanmış Modüller ile kullanıldığı alternatif bir dağıtım yolu bulunur ve bu yolla en iyi yöntemler ve üretime hazır olma durumu sağlanır.

Terraform kullanarak altyapıyı dağıtmak için AKS içinAzure Doğrulanmış Modülü'ni kullanırız.

Uyarı

Bu dağıtımı üretimde çalıştırmayı planlıyorsanız Azure Doğrulanmış Modülleri için AKS üretim deseni modülüne bakmanızı öneririz. Bu modül, en iyi uygulama önerileriyle birlikte gelir.

Önkoşullar

Ortam değişkenlerini belirleme

  • Bu kılavuz boyunca kullanmak için gerekli ortam değişkenlerini ayarlayın:

    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
    

Kaynak grubu oluşturma

  • komutunu kullanarak az group create bir kaynak grubu oluşturun.

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

    Örnek çıkış:

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

Azure Key Vault örneği oluşturma

  • komutunu kullanarak az keyvault createbir Azure Key Vault örneği oluşturun. Azure Key Vault API anahtarları, parolalar, sertifikalar veya şifreleme anahtarları gibi gizli dizileri güvenli bir şekilde depolar ve bunlara erişir.

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

    Örnek çıkış:

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

Azure Container Registry oluşturun

  • komutunu kullanarak az acr create kapsayıcı görüntülerinizi depolamak ve yönetmek için bir Azure Container Registry oluşturun.

    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)
    

    Örnek çıkış:

    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
    

AKS kümesi oluşturma

Bu adımda bir AKS kümesi oluşturacağız. AKS kümesinin Azure Key Vault'ta depolanan gizli dizilere erişmesini sağlayan Azure Key Vault Gizli Dizileri sağlayıcısı eklentisini ()azure-keyvault-secrets-provider etkinleştiririz. Aks kümesinin diğer Azure kaynaklarına güvenli bir şekilde erişmesini sağlayan iş yükü kimliğini de etkinleştiririz.

  • komutunu kullanarak az aks create bir AKS kümesi oluşturun.

    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
    

    Örnek çıkış:

    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
    

Azure Key Vault Secrets sağlayıcısı için kimlik ID'sini ve nesne ID'sini alma

  • Azure Key Vault Secrets sağlayıcı eklentisi tarafından oluşturulan kimlik ID'sini ve nesne ID'sini az aks show komutu kullanarak alın.

    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)
    

Kubelet kimliğine AcrPull rolünü ata

  • az role assignment create komutunu kullanarak AcrPull rolünü kubelet kimliğine atayın.

    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
    

    Örnek çıkış:

    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
    

Valkey iş yükü için düğüm havuzu oluşturma

Bu bölümde, Valkey iş yükünü çalıştırmaya ayrılmış bir düğüm havuzu oluşturacağız. Bu düğüm havuzu otomatik ölçeklendirmeyi devre dışı bırakmıştır ve farklı bir bölgede birincil başına bir ikincil düğüm olmasını istediğimizden iki kullanılabilirlik alanında altı düğümle oluşturulur. Çoğaltmalar üçüncü bölgede planlanmıştır.

  • komutunu kullanarak az aks nodepool add yeni bir düğüm havuzu oluşturun.

    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
    

    Örnek çıkış:

    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 görüntülerini Azure Container Registry'nize yükleme

Bu bölümde, Docker Hub'dan Valkey görüntüsünü indirip Azure Container Registry'ye yükleyeceğiz. Bu adım, görüntünün özel kayıt defterinizde kullanılabilir olmasını ve AKS kümenizde kullanılabilmesini sağlar. Genel görüntüyü üretim ortamında kullanmanızı önermiyoruz.

  • Dockerhub'dan Valkey görüntüsünü içeri aktarın ve komutunu kullanarak az acr import Azure Container Registry'nize yükleyin.

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

Terraform modülünü kopyalama

  • Terraform modülüyle git deposunu kopyalayın.

    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
    

Terraform değişkenleri dosyası oluşturma

  • Aşağıdaki içeriklere sahip bir valkey.tfvars dosya oluşturarak Valkey değişkenlerini ayarlayın. Bu adımda belirli değişkenlerinizi de sağlayabilirsiniz:

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

Altyapıyı devreye alın

  1. Altyapıyı dağıtmak için Terraform komutlarını çalıştırın. Bu adımda, Valkey dağıtımı için gerekli değişkenleri ayarlayacağız.

    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"
    

    Uyarı

    Bazı durumlarda, Valkey görüntülerini kapsayıcı kayıt defterine aktaran kapsayıcı kayıt defteri görevleri başarısız olabilir. Daha fazla bilgi için bkz. container-registry-task. Çoğu durumda yeniden deneme işlemi sorunu çözer.

  2. Terraform çıkış değerlerini sonraki adımlarda kullanmak üzere terminalde ortam değişkenleri olarak dışarı aktarmak için aşağıdaki komutu çalıştırın:

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

Sonraki adım

Katkıda Bulunanlar

Microsoft bu makaleyi korur. Başlangıçta aşağıdaki katkıda bulunanlar yazdı:

  • Nelly Kiboi | Hizmet Mühendisi
  • Saverio Proto | Baş Müşteri Deneyimi Mühendisi
  • Don High | Baş Müşteri Mühendisi
  • LaBrina Loving | Baş Servis Mühendisi
  • Ken Kilty | Baş TPM
  • Russell de Pina | Kıdemli TPM
  • Colin Mixon | Ürün Yöneticisi
  • Ketan Chawda | Kıdemli Müşteri Mühendisi
  • Naveed Kharadi | Müşteri Deneyimi Mühendisi
  • Erin Schaffer | İçerik Geliştirici 2