次の方法で共有


Azure Kubernetes Service (AKS) で Valkey クラスターを実行するためのインフラストラクチャを作成する

この記事では、Azure Kubernetes Service (AKS) で Valkey クラスターを実行するために必要なインフラストラクチャ リソースを作成します。

前提条件

環境変数を設定する

  • このガイド全体で使用する、必要な環境変数を設定します。

    random=$(echo $RANDOM | tr '[0-9]' '[a-z]')
    export MY_RESOURCE_GROUP_NAME=myResourceGroup-rg
    export MY_LOCATION=eastus
    export MY_ACR_REGISTRY=mydnsrandomname$(echo $random)
    export MY_KEYVAULT_NAME=vault-$(echo $random)-kv
    export MY_CLUSTER_NAME=cluster-aks
    export SERVICE_ACCOUNT_NAMESPACE=valkey
    export TENANT_ID=$(az account show --query tenantId --output tsv)
    

リソース グループを作成する

  • az group create コマンドを使用して、リソース グループを作成します。

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

    出力例:

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

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 Container Registry を作成する

  • az acr create コマンドを使用して、コンテナー イメージを格納し、管理するための Azure Container Registry を作成します。

    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 KeyVault Secret Provider アドオンを有効にします。これにより、AKS クラスターは Azure Key Vault に格納されているシークレットにアクセスできるようになります。 また、ワークロード ID を有効にします。これにより、AKS クラスターは他の Azure リソースに安全にアクセスできるようになります。

  1. az aks create コマンドを使用して、AKS クラスターを作成します。

    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_DS4_v2 \
     --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  efecebf9-8894-46b9-9d68-09bfdadc474a  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  66681ad812cd770001814d32  KubernetesOfficial
    
  2. az aks show コマンドを使い、Azure KeyVault Secret Provider アドオンによって作成されたアイデンティティ ID とオブジェクト ID を取得します。

    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)
    
    
  3. az role assignment create コマンドを使用して、kubelet ID に AcrPull ロールを割り当てます。

    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  04628c5e-371a-49b8-8462-4ecd7f90a43f  6a9a8328-7257-4db2-8c4f-169687f36556  94fa3265-4ac2-4e19-8516-f3e830642ca8  ServicePrincipal  myResourceGroup-rg  /subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/providers/Microsoft.Authorization/roleDefinitions/7f951dda-4ed3-4680-a7ca-43fe172d538d  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 ワークロードを実行するための専用ノード プールを作成します。 このノード プールは、自動スケールが無効になっており、2 つの可用性ゾーンにまたがる 6 つのノードと一緒に作成されます。これは、異なるゾーンのプライマリごとに 1 つのセカンダリを必要とするためです。

  • 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_D4s_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                        b7aa8e37-ff39-4ec7-bed0-cb37876416cc  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
    

AKS クラスターに接続する

  • az aks get-credentials コマンドを使用して、AKS クラスターに接続するように kubectl を構成します。

    az aks get-credentials --resource-group $MY_RESOURCE_GROUP_NAME --name $MY_CLUSTER_NAME --overwrite-existing --output table
    

Azure Container Registry に Valkey イメージをアップロードする

このセクションでは、Dockerhub から Valkey イメージをダウンロードし、Azure Container Registry にアップロードします。 この手順により、イメージがプライベート レジストリと AKS クラスターで使用できるようになります。 運用環境でパブリック イメージを使わないことをお勧めします。

  • az acr import コマンドを使用して、Dockerhub から Valkey イメージをインポートし、Azure Container Registry にアップロードします。

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

次のステップ

共同作成者

Microsoft では、この記事を保持しています。 当初の寄稿者は次のとおりです。

  • Nelly Kiboi | サービス エンジニア
  • Saverio Proto | プリンシパル カスタマー エクスペリエンス エンジニア
  • Don High | プリンシパル カスタマー エンジニア
  • LaBrina Loving | プリンシパル サービス エンジニア
  • Ken Kilty | プリンシパル TPM
  • Russell de Pina | プリンシパル TPM
  • Colin Mixon | プロダクト マネージャー
  • Ketan Chawda | シニア カスタマー エンジニア
  • Naveed Kharadi | カスタマー エクスペリエンス エンジニア
  • Erin Schaffer |コンテンツ開発者 2