이 가이드에서는 AKS에서 Valkey 클러스터를 실행하기 위한 전체 설정 프로세스를 안내합니다. 이 프로세스에는 환경 변수 구성, 핵심 Azure 리소스 프로비전(예: 리소스 그룹, Azure Key Vault 및 ACR(Azure Container Registry)), 통합 워크로드 ID를 사용하여 AKS 클러스터 만들기 및 비밀 관리가 포함됩니다. 또한 Valkey 워크로드용 전용 노드 풀 만들기 및 Valkey 이미지를 프라이빗 레지스트리로 가져오는 방법도 다룹니다. 코드로서의 인프라를 선호하는 경우 이 가이드에는 Azure 확인된 모듈과 함께 Terraform을 사용하는 대체 배포 경로가 포함되어 모범 사례 및 프로덕션 준비 상태를 보장합니다.
Terraform을 사용하여 인프라를 배포하려면 AKS용Azure 확인된 모듈을 사용합니다.
비고
프로덕션 환경에서 이 배포를 실행하려는 경우 Azure 확인된 모듈에 대한 AKS 프로덕션 패턴 모듈을 살펴보는 것이 좋습니다. 이 모듈은 모범 사례 권장 사항과 함께 제공됩니다.
필수 조건
- 아직 없는 경우 AKS(Azure Kubernetes Service)에 Valkey 클러스터를 배포하기 위한 개요를 검토합니다.
- Azure 구독 아직 없는 경우 무료 계정을 만들 수 있습니다.
- Azure CLI 버전 2.61.0. 설치하거나 업그레이드하려면 Azure CLI 설치를 참조하세요.
- Helm 버전 3 이상. 설치하려면 Helm 설치를 참조하세요.
-
kubectl- Azure Cloud Shell이 기본적으로 설치합니다. - 로컬 컴퓨터에 설치된 Docker입니다. 설치하려면 Docker 가져오기를 참조하세요.
환경 변수 설정
이 가이드 전체에서 사용하기 위해 필요한 환경 변수를 설정합니다.
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는 API 키, 암호, 인증서 또는 암호화 키와 같은 비밀을 안전하게 저장하고 액세스합니다.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 만들기
명령을 사용하여 컨테이너 이미지를 저장하고 관리하는 Azure Container Registry를 만듭니다
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 클러스터를 만듭니다. AKS 클러스터가 Azure Key Vault에 저장된 비밀에 액세스할 수 있도록 하는 Azure Key Vault 비밀 공급자 추가 기능(azure-keyvault-secrets-provider)을 사용하도록 설정합니다. 또한 워크로드 ID를 사용하도록 설정하여 AKS 클러스터가 다른 Azure 리소스에 안전하게 액세스할 수 있도록 합니다.
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_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 비밀 공급자의 ID ID 및 개체 ID 가져오기
az aks show명령을 사용하여 Azure Key Vault 비밀 공급자 추가 기능에서 생성된 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)
AcrPull kubelet ID에 역할 할당
AcrPull명령을 사용하여 kubelet ID에 역할을 할당합니다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 워크로드를 실행하는 전용 노드 풀을 만듭니다. 이 노드 풀은 자동 크기 조정을 사용하지 않도록 설정되었으며 두 가용성 영역에서 6개의 노드로 만들어집니다. 다른 영역에 주당 하나의 보조 노드를 포함하려고 하기 때문입니다. 복제본은 세 번째 영역에 배치됩니다.
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
Azure Container Registry에 Valkey 이미지 업로드
이 섹션에서는 Docker Hub에서 Valkey 이미지를 다운로드하고 Azure Container Registry에 업로드합니다. 이 단계를 수행하면 프라이빗 레지스트리에서 이미지를 사용할 수 있고 AKS 클러스터에서 사용할 수 있습니다. 프로덕션 환경에서 공용 이미지를 사용하지 않는 것이 좋습니다.
Dockerhub에서 Valkey 이미지를 가져와 명령을 사용하여 Azure Container Registry에
az acr import업로드합니다.az acr import \ --name $MY_ACR_REGISTRY \ --source docker.io/valkey/valkey:latest \ --image valkey:latest \ --output table
Terraform 모듈 복제
Terraform 모듈을 사용하여 git 리포지토리를 복제합니다.
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.tfvarsValkey 변수를 설정합니다. 이 단계에서 특정 변수를 제공할 수도 있습니다.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" } }
인프라 배포
인프라를 배포하려면 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를 참조하세요. 대부분의 경우 다시 시도하면 문제가 해결됩니다.
다음 명령을 실행하여 Terraform 출력 값을 터미널에서 환경 변수로 내보내 다음 단계에서 사용합니다.
export MY_ACR_REGISTRY=$(terraform output -raw acr_registry_name) export MY_CLUSTER_NAME=$(terraform output -raw aks_cluster_name)
다음 단계
참가자
Microsoft는 이 문서를 유지 관리합니다. 다음 기여자는 원래 그것을 썼다:
- Nelly Kiboi | 서비스 엔지니어
- Saverio Proto | 주요 고객 환경 엔지니어
- Don High | 수석 고객 엔지니어
- 라브리나 러빙 | 주 서비스 엔지니어
- Ken Kilty | 수석 TPM
- Russell de Pina | 수석 TPM
- 콜린 믹슨 | 제품 관리자
- Ketan Chawda | 선임 고객 엔지니어
- Naveed Kharadi | 고객 환경 엔지니어
- Erin Schaffer | 콘텐츠 개발자 2