إنشاء البنية الأساسية لتشغيل نظام مجموعة Valkey على خدمة Azure Kubernetes (AKS)

يشرح هذا الدليل عملية الإعداد الكاملة لتشغيل مجموعة Valkey على AKS. تتضمن هذه العملية تكوين متغيرات البيئة وتوفير موارد Azure الأساسية (مثل مجموعة الموارد وAzure Key Vault وAzure Container Registry (ACR)) وإنشاء مجموعة AKS بهوية حمل عمل متكاملة وإدارة الأسرار. كما يغطي إنشاء تجمع عقد مخصص لأحمال عمل Valkey وكيفية استيراد صور Valkey إلى سجلك الخاص. إذا كنت تفضل البنية التحتية كتعليمات برمجية، فإن الدليل يتضمن مسار توزيع بديل باستخدام Terraform مع الوحدات النمطية التي تم التحقق منها من Azure، مما يضمن أفضل الممارسات وجاهزية الإنتاج.

لنشر البنية التحتية باستخدام Terraform، نستخدم وحدة Azure Verified Moduleل AKS.

إشعار

إذا كنت تخطط لتشغيل هذا التوزيع في الإنتاج، فإننا نوصي بالنظر إلى وحدة نمط إنتاج AKS للوحدات النمطية التي تم التحقق منها من Azure. تأتي هذه الوحدة مقترنة بتوصيات أفضل الممارسات.

المتطلبات الأساسية

تعيين متغيرات البيئة

  • تعيين متغيرات البيئة المطلوبة للاستخدام في هذا الدليل:

    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
    

إنشاء مجموعة موارد

  • إنشاء مجموعة موارد باستخدام az group create الأمر .

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

    مثال على الإخراج:

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

إنشاء مثيل Azure Key Vault

  • إنشاء مثيل Azure Key Vault باستخدام az keyvault createالأمر . يقوم Azure Key Vault بتخزين الأسرار والوصول إليها بشكل آمن مثل مفاتيح واجهة برمجة التطبيقات أو كلمات المرور أو الشهادات أو مفاتيح التشفير.

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

    مثال على الإخراج:

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

إنشاء سجل حاوية Azure

  • إنشاء سجل حاويات Azure لتخزين صور الحاوية وإدارتها 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)
    

    مثال على الإخراج:

    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

في هذه الخطوة، نقوم بإنشاء نظام مجموعة AKS. نكن إضافة مزود أسرار مفتاح Azure Key Vault (azure-keyvault-secrets-provider)، التي تسمح لعنتر AKS بالوصول إلى الأسرار المخزنة في Azure Key Vault. نفعل أيضا هوية الحمل العملي، مما يسمح لعنتر AKS بالوصول إلى موارد Azure الأخرى بأمان.

  • إنشاء نظام مجموعة AKS باستخدام 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
    

    مثال على الإخراج:

    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

  • احصل على معرف الهوية ومعرف الكائن الذي تم إنشاؤه بواسطة إضافة مزود Azure Key Vault Secrets باستخدام الأمر 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)
    

تعيين AcrPull الدور لهوية الكوبليت

  • AcrPull تعيين الدور إلى هوية kubelet باستخدام 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
    

    مثال على الإخراج:

    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

في هذا القسم، نقوم بإنشاء تجمع عقدة مخصص لتشغيل حمل عمل Valkey. تم تعطيل التحجيم التلقائي لتجمع العقدة هذا ويتم إنشاؤه بست عقد عبر منطقتين توفر، لأننا نريد أن يكون لدينا واحد ثانوي لكل أساسي في منطقة مختلفة. يتم جدولة النسخ المقلدة في المنطقة الثالثة.

  • إنشاء تجمع عقدة جديد باستخدام 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
    

    مثال على الإخراج:

    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 إلى Azure Container Registry

في هذا القسم، نقوم بتنزيل صورة Valkey من Docker Hub وتحميلها إلى Azure Container Registry. تضمن هذه الخطوة توفر الصورة في السجل الخاص بك ويمكن استخدامها في نظام مجموعة AKS. لا نوصي باستهلاك الصورة العامة في بيئة إنتاج.

  • استيراد صورة Valkey من Dockerhub وتحميلها إلى Azure Container Registry باستخدام az acr import الأمر .

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

استنساخ وحدة تيرافورم

  • قم باستنساخ مستودع git باستخدام وحدة 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
    

إنشاء ملف متغيرات Terraform

  • قم بتعيين متغيرات Valkey عن طريق إنشاء valkey.tfvars ملف بالمحتويات التالية. يمكنك أيضا تقديم المتغيرات المحددة في هذه الخطوة:

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

نشر البنية الأساسية

  1. لنشر البنية التحتية، شغل أوامر Terraform. في هذه الخطوة، نحدد المتغيرات المطلوبة لنشر 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"
    

    إشعار

    في بعض الحالات، قد تفشل مهام تسجيل الحاوية التي تستورد صور Valkey إلى سجل الحاوية. لمزيد من المعلومات، راجع container-registry-task. في معظم الحالات ، تؤدي إعادة المحاولة إلى حل المشكلة.

  2. قم بتشغيل الأمر التالي لتصدير قيم إخراج Terraform كمتغيرات بيئة في المحطة الطرفية لاستخدامها في الخطوات التالية:

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

الخطوة التالية

المساهمون

تحتفظ Microsoft بهذه المقالة. كتبه المساهمون التاليون في الأصل:

  • نيللي كيبوي | مهندس خدمة
  • Saverio Proto | مهندس تجربة العملاء الرئيسي
  • Don High | مهندس العملاء الرئيسي
  • LaBrina المحبة | مهندس الخدمة الرئيسي
  • كين كيلتي | الوحدة النمطية للنظام الأساسي الموثوق به
  • راسل دي بينا | الوحدة النمطية للنظام الأساسي الموثوق به
  • كولن ميكسون | إدارة المنتجات
  • كيتان شودا | مهندس عملاء أول
  • نافي خرادي | مهندس تجربة العملاء
  • إيرين شيفر | مطور المحتوى 2