Alıştırma - AKS kümesinde birden çok düğüm yapılandırma ve sıfıra ölçeklendirmeyi etkinleştirme
Azure Kubernetes Service, her bir düğüm havuzunda çalışan düğümlerle belirli iş yüklerini eşleştirmek için farklı düğüm havuzları oluşturmanıza olanak sağlar.
İnsansız hava aracı izleme örneğinden hatırlayacağınız üzere ekibiniz, uçuk hava koşullarında uçuş yolu bilgilerini işleyen ve en uygun uçuş rotalarını oluşturan yeni bir tahmine dayalı modelleme hizmeti geliştirmiş. Bu hizmet için GPU tabanlı sanal makine (VM) desteği gerekiyor ve hizmet yalnızca haftanın belirli günlerinde çalıştırılıyor. Takım, hizmet çalıştırılmadığında herhangi bir VMS kullanılmadığından emin olmak istiyor.
Burada, Azure Kubernetes Service (AKS) tarafından yönetilen bir Kubernetes kümesi oluşturacaksınız. Ardından, kümeyi birden çok düğüm havuzunu destekleyecek şekilde yapılandıracak ve kümelerin düğüm havuzlarındaki düğümleri ölçeklendirmesine izin vereceğiz. Ardından, dinamik düğüm sayısına sahip kullanıcı iş yüklerini desteklemek için ikinci bir düğüm havuzu ekleyeceksiniz. Son olarak, AKS kümenizde kullanılan düğümlerin maliyetini azaltmak için düğüm sayısını sıfıra ölçeklendireceksiniz.
Yeni bir kaynak grubu oluşturma
Azure hesabınızı kullanarak Azure Cloud Shell’de oturum açın. Cloud Shell’in Bash sürümünü seçin.
Bu modüldeki tüm alıştırmalarda burada oluşturduğunuz değerleri yeniden kullanacaksınız. Çıkışı gelecekte kullanmak üzere kaydedin.
Kaynak grubunuzu barındırmak için bir bölge seçin. Sonraki alıştırmalardaki özellikler tüm bölgelerde kullanılamaz. Bu nedenle bölgeniz olarak eastus kullanmanızı öneririz. Farklı bir değer kullanmayı seçerseniz değerini değiştirin
REGION_NAME
.Değişkenlerinizi kaydetmek için aşağıdaki komutları çalıştırın:
REGION_NAME=eastus RESOURCE_GROUP=rg-akscostsaving AKS_CLUSTER_NAME=akscostsaving-$RANDOM
Bahşiş
Komutları panoya kopyalamak için Kopyala düğmesini kullanabilirsiniz. Yapıştırmak için Cloud Shell terminalinde yeni bir satıra sağ tıklayıp Yapıştır'ı seçin veya Shift+Insert klavye kısayolunu (macOS üzerinde⌘+V) kullanın.
Komutunu çalıştırarak
echo
her değeri de kontrol edebilirsiniz; örneğin,echo $REGION_NAME
.not edin
AKS_CLUSTER_NAME
. Alıştırmalar boyunca bu değeri daha sonra kümenizin temizleme ve yapılandırma ayarları için kullanacaksınız.echo $AKS_CLUSTER_NAME
rg-akscostsaving adlı yeni bir kaynak grubu oluşturun. Bu alıştırmalarda oluşturduğunuz tüm kaynakları bu kaynak grubuna dağıtacaksınız. Tek kaynak grubu kullanırsanız, modülü bitirdikten sonra kaynakları daha kolay temizleyebilirsiniz.
az group create \ --name $RESOURCE_GROUP \ --location $REGION_NAME
AKS kümesini oluşturma
Kaynak grubu oluşturulduktan sonra, grup içinde AKS kümeleri oluşturabilirsiniz. İlk adımınız, seçtiğiniz bölgede Kubernetes sürümünü almaktır. Bu sürüm kümenizi yapılandıracak şekilde ayarlanmıştır.
Kubernetes sürümünü almak için komutunu çalıştırın
az aks get-versions
. Aşağıdaki sorgu önizleme olmayan bir Kubernetes sürümü döndürür. Bu değeri adlıVERSION
bir Bash değişkeninde depolayın. Sürüm numarasını almak ve depolamak için aşağıdaki komutu çalıştırın:VERSION=$(az aks get-versions \ --location $REGION_NAME \ --query "values[?isPreview==null].version | [-1]" \ --output tsv) echo $VERSION
az aks create
AKS kümesini oluşturmak için komutunu çalıştırın. Küme, sistem düğümü havuzunda iki düğümle çalışır. Bu komutun tamamlanması birkaç dakika sürebilir.az aks create \ --resource-group $RESOURCE_GROUP \ --name $AKS_CLUSTER_NAME \ --location $REGION_NAME \ --kubernetes-version $VERSION \ --node-count 2 \ --load-balancer-sku standard \ --vm-set-type VirtualMachineScaleSets \ --generate-ssh-keys
az aks create
komutunda Kubernetes kümenizi tam olarak istediğiniz şekilde yapılandırmanızı sağlayan birkaç parametre vardır. Kümenize ölçeklendirme ve birden çok düğüm havuzu desteği eklemek için yapılandırmanız gereken iki önemli parametre vardır:Parametre ve değer Açıklama --load-balancer-sku standard
AKS'deki varsayılan yük dengeleyici desteği, basic
düzeydedir.basic
yük dengeleyici, birden çok düğüm havuzu kullanıldığında desteklenmez. Değeristandard
olarak ayarlayın.--vm-set-type VirtualMachineScaleSets
AKS'deki ölçeklendirme özelliklerini kullanmak için sanal makine ölçek kümeleri gerekir. Bu parametre ölçek kümesi desteği sunar. --node-count 2
parametresi kullanılarak varsayılan düğüm havuzunda iki düğüm yapılandırıldığına dikkat edin. Önceki açıklamadan, temel sistem hizmetlerinin bu sistem düğümü havuzunda çalıştırıldığını hatırlayın. Üretim kümelerinin, küme işleminde güvenilirlik için en az--node-count 3
kullanması önemlidir. Bu alıştırmada maliyet nedeniyle yalnızca iki düğüm kullanıyoruz.Yeni kümenizdeki düğüm havuzlarını listelemek için
az aks nodepool list
komutunu çalıştırın:az aks nodepool list --resource-group $RESOURCE_GROUP --cluster-name $AKS_CLUSTER_NAME
Aşağıda komutun çıktısının bir örneğini inceleyebilirsiniz:
[ { "agentPoolType": "VirtualMachineScaleSets", "availabilityZones": null, "count": 2, "enableAutoScaling": null, "enableNodePublicIp": false, "id": "/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourcegroups/rg-akscostsaving/providers/Microsoft.ContainerService/managedClusters/akscostsaving-17835/agentPools/nodepool1", "mode": "System", "name": "nodepool1", ... "type": "Microsoft.ContainerService/managedClusters/agentPools", "upgradeSettings": null, "vmSize": "Standard_DS2_v2", "vnetSubnetId": null } ]
Düğüm havuzunun
mode
olarak ayarlandığınaSystem
ve öğesininname
otomatik olarak atandığını görebilirsiniz.
Düğüm havuzu ekleme
Kümenizde tek bir düğüm havuzu var. komutunu çalıştırarak
az aks nodepool add
ikinci bir düğüm havuzu ekleyin. Üç düğüme ve adınabatchprocpl
sahip bir kullanıcı düğümü havuzu oluşturmak için bu adımda komutunu çalıştırın. Düğüm havuzu adlarının küçük harfle başlaması gerektiğini ve yalnızca alfasayısal karakterlerden oluşabileceğini unutmayın. Linux düğüm adları en fazla 12 karakter, Windows düğüm adları ise en fazla altı karakter uzunluğunda olabilir.Şu komutu çalıştırın:
az aks nodepool add \ --resource-group $RESOURCE_GROUP \ --cluster-name $AKS_CLUSTER_NAME \ --name batchprocpl \ --node-count 2
Yeni kümenizdeki yeni düğüm havuzunu listelemek için
az aks nodepool list
komutunu çalıştırın:az aks nodepool list --resource-group $RESOURCE_GROUP --cluster-name $AKS_CLUSTER_NAME
Aşağıda komutun çıktısının bir örneğini inceleyebilirsiniz:
[ { "agentPoolType": "VirtualMachineScaleSets", "availabilityZones": null, "count": 2, "enableAutoScaling": null, "enableNodePublicIp": false, "id": "/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourcegroups/rg-akscostsaving/providers/Microsoft.ContainerService/managedClusters/akscostsaving-17835/agentPools/batchprocpl", "mode": "User", "name": "batchprocpl", ... "type": "Microsoft.ContainerService/managedClusters/agentPools", "upgradeSettings": { "maxSurge": null }, "vmSize": "Standard_DS2_v2", "vnetSubnetId": null }, { "agentPoolType": "VirtualMachineScaleSets", "availabilityZones": null, "count": 2, "enableAutoScaling": null, "enableNodePublicIp": false, "id": "/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourcegroups/rg-akscostsaving/providers/Microsoft.ContainerService/managedClusters/akscostsaving-17835/agentPools/nodepool1", "mode": "System", "name": "nodepool1", ... "type": "Microsoft.ContainerService/managedClusters/agentPools", "upgradeSettings": null, "vmSize": "Standard_DS2_v2", "vnetSubnetId": null } ]
Yeni düğüm havuzunun
mode
değerininUser
olarak ayarlandığına vename
değerininbatchprocpl
olduğuna dikkat edin.
Düğüm havuzu düğüm sayısını sıfır olarak ölçeklendirme
Düğüm havuzundaki az aks nodepool scale
düğümleri el ile ölçeklendirmek için komutunu çalıştırın.
az aks nodepool scale
komutunu çalıştırın ve --node-count
parametresini kullanarak düğüm sayısı değerini 0 olarak ayarlayın.
Aşağıda komutun bir örneği verilmiştir:
az aks nodepool scale \
--resource-group $RESOURCE_GROUP \
--cluster-name $AKS_CLUSTER_NAME \
--name batchprocpl \
--node-count 0
Aşağıda komutun çıktısının bir örneğini inceleyebilirsiniz:
{
"agentPoolType": "VirtualMachineScaleSets",
"availabilityZones": null,
"count": 0,
"enableAutoScaling": null,
"enableNodePublicIp": false,
"id": "/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourcegroups/rg-akscostsaving/providers/Microsoft.ContainerService/managedClusters/akscostsaving-17835/agentPools/batchprocpl",
"maxCount": null,
"maxPods": 110,
"minCount": null,
"mode": "User",
"name": "batchprocpl",
"nodeImageVersion": "AKSUbuntu-1604-2020.06.10",
"nodeLabels": null,
"nodeTaints": null,
"orchestratorVersion": "1.17.9",
"osDiskSizeGb": 128,
"osType": "Linux",
"provisioningState": "Succeeded",
"proximityPlacementGroupId": null,
"resourceGroup": "rg-akscostsaving",
"scaleSetEvictionPolicy": null,
"scaleSetPriority": null,
"spotMaxPrice": null,
"tags": null,
"type": "Microsoft.ContainerService/managedClusters/agentPools",
"upgradeSettings": {
"maxSurge": null
},
"vmSize": "Standard_DS2_v2",
"vnetSubnetId": null
}
Düğüm havuzu count
parametre değerinin 0 olarak ve değerinin olarak ayarlandığına enableAutoScaling
null
dikkat edin. İş yüklerini zamanlamak için bu düğüm havuzunun düğüm sayısını el ile artırmanız gerekir çünkü düğüm oluşturma işlemi varsayılan olarak otomatik olarak gerçekleşmez.
Kubernetes bağlamını yapılandırma
Yukarıdaki komutun çıkışında düğüm havuzu sayısı 0 olarak belirtilmiştir. kubectl get nodes
komutunu çalıştırarak kümedeki kullanılabilen düğümleri doğrulayabilirsiniz.
Kümenizin API sunucusuyla etkileşime geçmek için komutunu çalıştırın
kubectl
.kubectl
hizmetinin bağlanması için bir Kubernetes kümesi bağlamı yapılandırmanız gerekir. Bağlam kümenin adresini, bir kullanıcıyı ve ad alanını içerir. Cloud Shell'deaz aks get-credentials
Kubernetes bağlamını yapılandırmak için komutunu çalıştırın.Şu komutu çalıştırarak küme kimlik bilgilerini alın:
az aks get-credentials \ --resource-group $RESOURCE_GROUP \ --name $AKS_CLUSTER_NAME
Aşağıda komutun çıktısının bir örneğini inceleyebilirsiniz.
Merged "akscostsaving-17835" as current context in /home/user/.kube/config
Düğüm havuzlarınızdaki düğümleri listeleyin.
kubectl get nodes
Aşağıda komutun çıktısının bir örneğini inceleyebilirsiniz:
NAME STATUS ROLES AGE VERSION aks-nodepool1-37990379-vmss000000 Ready agent 32m v1.17.9 aks-nodepool1-37990379-vmss000001 Ready agent 32m v1.17.9
az aks nodepool list
komutunun sonucunda iki düğüm havuzu listelenmesine rağmen kümede yalnızca iki düğüm bulunduğuna ve ikisinin denodepool1
kaynaklı olduğuna dikkat edin.
İş yükü taleplerini doğrudan yönettiğiniz durumlarda AKS maliyetlerini iyileştirmek için iyi bir strateji belirlemek isterseniz:
- Düğüm havuzlarındaki düğüm sayısını el ile ölçeklendirin.
- Yüksek maliyetli NV tabanlı kullanıcı düğümü havuzlarını sıfıra ölçeklendirin.
Şimdi düğümleri ölçeklendirmeniz gereken ancak talebi doğrudan kontrol etmediğiniz başka bir stratejiye göz atalım.