Buat infrastruktur untuk menjalankan kluster Valkey di Azure Kubernetes Service (AKS)

Panduan ini menjelaskan proses penyiapan lengkap untuk menjalankan kluster Valkey di AKS. Proses ini termasuk mengonfigurasi variabel lingkungan, menyediakan sumber daya Azure inti (seperti grup sumber daya, Azure Key Vault, dan Azure Container Registry (ACR)), membuat kluster AKS dengan identitas beban kerja terintegrasi dan mengelola rahasia. Ini juga mencakup pembuatan kumpulan simpul khusus untuk beban kerja Valkey dan cara mengimpor gambar Valkey ke registri privat Anda. Jika Anda lebih suka infrastruktur sebagai kode, panduan menyertakan jalur penyebaran alternatif menggunakan Terraform dengan Modul Terverifikasi Azure, memastikan praktik terbaik dan kesiapan produksi.

Untuk menyebarkan infrastruktur menggunakan Terraform, kami menggunakan Modul Terverifikasi Azureuntuk AKS.

Nota

Jika Anda berencana untuk menjalankan penyebaran ini dalam produksi, sebaiknya lihat modul pola produksi AKS untuk Modul Terverifikasi Azure. Modul ini dilengkapi dengan rekomendasi praktik terbaik.

Prasyarat

Atur variabel lingkungan

  • Atur variabel lingkungan yang diperlukan untuk digunakan di seluruh panduan ini:

    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
    

Buat grup sumber daya

  • Buat grup sumber daya menggunakan az group create perintah .

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

    Contoh output:

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

Buat instans Azure Key Vault

  • Buat instans Azure Key Vault menggunakan az keyvault createperintah . Azure Key Vault menyimpan dan mengakses rahasia dengan aman seperti kunci API, kata sandi, sertifikat, atau kunci kriptografi.

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

    Contoh output:

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

Membuat Azure Container Registry

  • Buat Azure Container Registry untuk menyimpan dan mengelola gambar kontainer Anda menggunakan az acr create perintah .

    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)
    

    Contoh output:

    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
    

Membuat kluster AKS

Dalam langkah ini, kami membuat kluster AKS. Kami mengaktifkan add-on penyedia Rahasia Azure Key Vault (azure-keyvault-secrets-provider), yang memungkinkan kluster AKS mengakses rahasia yang disimpan di Azure Key Vault. Kami juga mengaktifkan identitas beban kerja, yang memungkinkan kluster AKS mengakses sumber daya Azure lainnya dengan aman.

  • Buat kluster AKS menggunakan az aks create perintah .

    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
    

    Contoh output:

    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
    

Mendapatkan ID identitas dan ID objek untuk penyedia layanan Rahasia Azure Key Vault

  • Dapatkan ID identitas dan ID objek yang dibuat oleh penyedia Rahasia Azure Key Vault add-on menggunakan perintah 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)
    

Tetapkan peran AcrPull ke identitas kubelet

  • Tetapkan peran AcrPull ke identitas kubelet menggunakan perintah 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
    

    Contoh output:

    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
    

Membuat kumpulan simpul untuk beban kerja Valkey

Di bagian ini, kami membuat kumpulan simpul yang didedikasikan untuk menjalankan beban kerja Valkey. Kumpulan simpul ini menonaktifkan penskalakan otomatis dan dibuat dengan enam simpul di dua zona ketersediaan, karena kami ingin memiliki satu sekunder per primer di zona yang berbeda. Replika-replika dijadwalkan di zona ketiga.

  • Buat kumpulan simpul baru menggunakan az aks nodepool add perintah .

    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
    

    Contoh output:

    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
    

Mengunggah gambar Valkey ke Azure Container Registry Anda

Di bagian ini, kami mengunduh gambar Valkey dari Docker Hub dan mengunggahnya ke Azure Container Registry. Langkah ini memastikan bahwa gambar tersedia di registri privat Anda dan dapat digunakan di kluster AKS Anda. Kami tidak menyarankan untuk mengkonsumsi citra publik di lingkungan produksi.

  • Impor gambar Valkey dari Dockerhub dan unggah ke Azure Container Registry Anda menggunakan az acr import perintah .

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

Mengkloning modul Terraform

  • Kloning repositori git dengan modul 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
    

Membuat file variabel Terraform

  • Atur variabel Valkey dengan membuat valkey.tfvars file dengan konten berikut. Anda juga dapat memberikan variabel spesifik Anda pada langkah ini:

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

Menerapkan infrastruktur

  1. Untuk menyebarkan infrastruktur, jalankan perintah Terraform. Dalam langkah ini, kami mengatur variabel yang diperlukan untuk menyebarkan 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"
    

    Nota

    Dalam beberapa kasus, tugas registri kontainer yang mengimpor gambar Valkey ke registri kontainer mungkin gagal. Untuk informasi selengkapnya, lihat container-registry-task. Dalam kebanyakan kasus, mencoba kembali menyelesaikan masalah.

  2. Jalankan perintah berikut untuk mengekspor nilai output Terraform sebagai variabel lingkungan di terminal untuk menggunakannya di langkah berikutnya:

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

Langkah selanjutnya

Kontributor

Microsoft mempertahankan artikel ini. Kontributor berikut awalnya menulisnya:

  • Nelly Kiboi | Teknisi Layanan
  • Saverio Proto | Teknisi Pengalaman Pelanggan Utama
  • Don Tinggi | Insinyur Pelanggan Utama
  • LaBrina Loving | Insinyur Layanan Utama
  • Ken Kilty | TPM Utama
  • Russell de Pina | TPM Utama
  • Colin Mixon | Manajer Produk
  • Ketan Chawda | Insinyur Pelanggan Senior
  • Naveed Kharadi | Teknisi Pengalaman Pelanggan
  • Erin Schaffer | Pengembang Konten 2