Öğretici: Bir sanal makine ölçek kümesi oluşturma ve Azure CLI ile Linux üzerinde yüksek oranda kullanılabilir bir uygulama dağıtmaTutorial: Create a virtual machine scale set and deploy a highly available app on Linux with the Azure CLI

Sanal makine ölçek kümesi, birbiriyle aynı ve otomatik olarak ölçeklendirilen sanal makine kümesi dağıtmanızı ve yönetmenizi sağlar.A virtual machine scale set allows you to deploy and manage a set of identical, auto-scaling virtual machines. Ölçek kümesi içindeki VM sayısını el ile ölçeklendirebilir veya CPU, bellek isteği ya da ağ trafiği gibi kaynak kullanımını temel alan otomatik ölçeklendirme kuralları tanımlayabilirsiniz.You can scale the number of VMs in the scale set manually, or define rules to autoscale based on resource usage such as CPU, memory demand, or network traffic. Bu öğreticide, Azure’da bir sanal makine ölçek kümesi dağıtılmaktadır.In this tutorial, you deploy a virtual machine scale set in Azure. Aşağıdakileri nasıl yapacağınızı öğrenirsiniz:You learn how to:

  • Cloud-init kullanarak ölçeklendirilecek bir uygulama oluşturmaUse cloud-init to create an app to scale
  • Sanal makine ölçek kümesi oluşturmaCreate a virtual machine scale set
  • Ölçek kümesindeki örnek sayısını artırma veya azaltmaIncrease or decrease the number of instances in a scale set
  • Otomatik ölçeklendirme kuralları oluşturmaCreate autoscale rules
  • Ölçek kümesi örneklerine ait bağlantı bilgilerini görüntülemeView connection info for scale set instances
  • Ölçek kümesinde veri diskleri kullanmaUse data disks in a scale set

Azure Cloud Shell kullanmaUse Azure Cloud Shell

Azure, Azure Cloud Shell, tarayıcınız üzerinden kullanabileceğiniz bir etkileşimli Kabuk ortamını barındırır.Azure hosts Azure Cloud Shell, an interactive shell environment that you can use through your browser. Cloud Shell'i ya da kullanmanıza imkan tanır bash veya PowerShell Azure hizmetleriyle çalışmak için.Cloud Shell lets you use either bash or PowerShell to work with Azure services. Cloud Shell önceden yüklenmiş komutları, yerel ortamınızda herhangi bir yükleme gerekmeden bu makaledeki kodu çalıştırmak için kullanabilirsiniz.You can use the Cloud Shell pre-installed commands to run the code in this article without having to install anything on your local environment.

Azure Cloud Shell'i başlatmak için:To launch Azure Cloud Shell:

SeçenekOption Örnek/bağlantıExample/Link
Kod bloğunun sağ üst köşesindeki Deneyin’i seçin.Select Try It in the upper-right corner of a code block. Seçme deneyin kod Cloud Shell için otomatik olarak kopyalamaz.Selecting Try It doesn't automatically copy the code to Cloud Shell. Örneği Azure Cloud Shell için deneyin
Git https://shell.azure.com veya Cloud Shell'i Başlat Cloud Shell, tarayıcınızda açmak için düğmeyi.Go to https://shell.azure.com or select the Launch Cloud Shell button to open Cloud Shell in your browser. <a href="https://shell.azure.com" title="Azure Cloud Shell'i Başlat
Seçin Cloud Shell düğmesine sağ üst menü çubuğundaki Azure portalında.Select the Cloud Shell button on the top-right menu bar in the Azure portal. Azure portaldaki Cloud Shell düğmesi

Bu makalede Azure Cloud shell'de kod çalıştırmak için:To run the code in this article in Azure Cloud Shell:

  1. Cloud Shell'i başlatın.Launch Cloud Shell.
  2. Seçin kopyalama kodu kopyalamak için bir kod bloğu üzerinde düğmesi.Select the Copy button on a code block to copy the code.
  3. Cloud Shell oturumla kodu yapıştırın Ctrl+Shift+V Windows ve Linux'ta veya Cmd + Shift+V macOS üzerinde.Paste the code into the Cloud Shell session with Ctrl+Shift+V on Windows and Linux, or Cmd+Shift+V on macOS.
  4. Tuşuna Enter kodu çalıştırmak için.Press Enter to run the code.

CLI'yi yerel olarak yükleyip kullanmayı tercih ederseniz bu öğretici için Azure CLI 2.0.30 veya sonraki bir sürümünü çalıştırmanız gerekir.If you choose to install and use the CLI locally, this tutorial requires that you are running the Azure CLI version 2.0.30 or later. Sürümü bulmak için az --version komutunu çalıştırın.Run az --version to find the version. Yükleme veya yükseltme yapmanız gerekiyorsa bkz. Azure CLI'yı yükleme.If you need to install or upgrade, see Install Azure CLI.

Ölçek Kümesine genel bakışScale Set overview

Sanal makine ölçek kümesi, birbiriyle aynı ve otomatik olarak ölçeklendirilen sanal makine kümesi dağıtmanızı ve yönetmenizi sağlar.A virtual machine scale set allows you to deploy and manage a set of identical, auto-scaling virtual machines. Ölçek kümesindeki VM’ler, bir veya daha fazla yerleştirme grubu şeklinde mantık hatası ve güncelleme etki alanlarında dağıtılır.VMs in a scale set are distributed across logic fault and update domains in one or more placement groups. Bu gruplar, kullanılabilirlik kümeleri gibi benzer şekilde yapılandırılmış VM’lerdir.These are groups of similarly configured VMs, similar to availability sets.

VM’ler, ölçek kümesinde gerektiğinde oluşturulur.VMs are created as needed in a scale set. Ölçek kümesinde VM eklenmesi veya kaldırılması işlemlerinin nasıl ve ne zaman gerçekleştirileceğini denetlemek için otomatik ölçeklendirme kurallarını tanımlanır.You define autoscale rules to control how and when VMs are added or removed from the scale set. Bu kurallar, CPU yükü, bellek kullanımı veya ağ trafiği gibi ölçümlere dayalı olarak tetiklenebilir.These rules can be triggered based on metrics such as CPU load, memory usage, or network traffic.

Bir Azure platform görüntüsü kullanılırsa ölçek kümeleri 1.000 adede kadar VM'i destekler.Scale sets support up to 1,000 VMs when you use an Azure platform image. Ciddi derecede yükleme veya VM özelleştirme gereksinimleri olan iş yükleri için özel bir VM görüntüsü oluşturulması iyi olabilir.For workloads with significant installation or VM customization requirements, you may wish to Create a custom VM image. Özel bir görüntü kullanırken ölçek kümesinde 300 adede kadar VM oluşturabilirsiniz.You can create up to 300 VMs in a scale set when using a custom image.

Ölçeklendirilecek bir uygulama oluşturmaCreate an app to scale

Üretim kullanımı için uygulamanızı yüklenmiş ve yapılandırılmış olarak içeren özel bir VM görüntüsü oluşturmak isteyebilirsiniz.For production use, you may wish to Create a custom VM image that includes your application installed and configured. Bu öğreticide, ölçek kümesini hemen iş başında görmek için VM’leri ilk önyüklemede özelleştirelim.For this tutorial, lets customize the VMs on first boot to quickly see a scale set in action.

Daha önceki bir öğreticide cloud-init ile ilk önyüklemede Linux sanal makinelerini özelleştirmeyi öğrendiniz.In a previous tutorial, you learned How to customize a Linux virtual machine on first boot with cloud-init. Aynı cloud-init yapılandırma dosyasını kullanarak NGINX’i yükleyebilir ve basit bir “Merhaba Dünya” Node.js uygulaması çalıştırabilirsiniz.You can use the same cloud-init configuration file to install NGINX and run a simple 'Hello World' Node.js app.

Geçerli kabuğunuzda cloud-init.txt adlı bir dosya oluşturup aşağıdaki yapılandırmayı yapıştırın.In your current shell, create a file named cloud-init.txt and paste the following configuration. Örneğin, dosyayı yerel makinenizde değil Cloud Shell’de oluşturun.For example, create the file in the Cloud Shell not on your local machine. Dosyayı oluşturmak ve kullanılabilir düzenleyicilerin listesini görmek için sensible-editor cloud-init.txt adını girin.Enter sensible-editor cloud-init.txt to create the file and see a list of available editors. Başta birinci satır olmak üzere cloud-init dosyasının tamamının doğru bir şekilde kopyalandığından emin olun:Make sure that the whole cloud-init file is copied correctly, especially the first line:

#cloud-config
package_upgrade: true
packages:
  - nginx
  - nodejs
  - npm
write_files:
  - owner: www-data:www-data
  - path: /etc/nginx/sites-available/default
    content: |
      server {
        listen 80;
        location / {
          proxy_pass http://localhost:3000;
          proxy_http_version 1.1;
          proxy_set_header Upgrade $http_upgrade;
          proxy_set_header Connection keep-alive;
          proxy_set_header Host $host;
          proxy_cache_bypass $http_upgrade;
        }
      }
  - owner: azureuser:azureuser
  - path: /home/azureuser/myapp/index.js
    content: |
      var express = require('express')
      var app = express()
      var os = require('os');
      app.get('/', function (req, res) {
        res.send('Hello World from host ' + os.hostname() + '!')
      })
      app.listen(3000, function () {
        console.log('Hello world app listening on port 3000!')
      })
runcmd:
  - service nginx restart
  - cd "/home/azureuser/myapp"
  - npm init
  - npm install express -y
  - nodejs index.js

Ölçek kümesi oluşturmaCreate a scale set

Ölçek kümesi oluşturabilmek için az group create ile bir kaynak grubu oluşturun.Before you can create a scale set, create a resource group with az group create. Aşağıdaki örnek, eastus konumunda myResourceGroupScaleSet adlı bir kaynak grubu oluşturur:The following example creates a resource group named myResourceGroupScaleSet in the eastus location:

az group create --name myResourceGroupScaleSet --location eastus

Bu adımda az vmss create ile bir sanal makine ölçek kümesi oluşturun.Now create a virtual machine scale set with az vmss create. Aşağıdaki örnek, myScaleSet adlı bir ölçek kümesi oluşturur, cloud-init dosyasını kullanarak VM’yi özelleştirir ve yoksa SSH anahtarlarını oluşturur:The following example creates a scale set named myScaleSet, uses the cloud-init file to customize the VM, and generates SSH keys if they do not exist:

az vmss create \
  --resource-group myResourceGroupScaleSet \
  --name myScaleSet \
  --image UbuntuLTS \
  --upgrade-policy-mode automatic \
  --custom-data cloud-init.txt \
  --admin-username azureuser \
  --generate-ssh-keys

Tüm ölçek kümesi kaynaklarının ve VM'lerin oluşturulup yapılandırılması birkaç dakika sürer.It takes a few minutes to create and configure all the scale set resources and VMs. Azure CLI sizi isteme geri döndürdükten sonra çalışmaya devam eden arka plan görevleri vardır.There are background tasks that continue to run after the Azure CLI returns you to the prompt. Uygulamaya erişmeniz birkaç dakika sürebilir.It may be another couple of minutes before you can access the app.

Web trafiğine izin vermeAllow web traffic

Sanal makine ölçek kümesinin bir parçası olarak otomatik olarak bir yük dengeleyici oluşturuldu.A load balancer was created automatically as part of the virtual machine scale set. Yük dengeleyici, yük dengeleyici kurallarını kullanarak trafiği tanımlı bir VM'ler kümesi arasında dağıtır.The load balancer distributes traffic across a set of defined VMs using load balancer rules. Yük dengeleyiciye ilişkin kavramlar ve yapılandırma hakkında Azure’da sanal makinelerin yükünü dengeleme adlı sıradaki öğreticide daha fazla bilgi edinebilirsiniz.You can learn more about load balancer concepts and configuration in the next tutorial, How to load balance virtual machines in Azure.

Trafiğin web uygulamanıza ulaşmasına izin vermek için az network lb rule create ile bir kural oluşturun.To allow traffic to reach the web app, create a rule with az network lb rule create. Aşağıdaki örnek myLoadBalancerRuleWeb adlı bir kural oluşturur:The following example creates a rule named myLoadBalancerRuleWeb:

az network lb rule create \
  --resource-group myResourceGroupScaleSet \
  --name myLoadBalancerRuleWeb \
  --lb-name myScaleSetLB \
  --backend-pool-name myScaleSetLBBEPool \
  --backend-port 80 \
  --frontend-ip-name loadBalancerFrontEnd \
  --frontend-port 80 \
  --protocol tcp

Uygulamanızı test etmeTest your app

Node.js uygulamanızı Web’de görmek için az network public-ip show ile yük dengeleyicinizin genel IP adresini alın.To see your Node.js app on the web, obtain the public IP address of your load balancer with az network public-ip show. Aşağıdaki örnek ölçek kümesinin bir parçası olarak oluşturulan myScaleSetLBPublicIP için IP adresini alır:The following example obtains the IP address for myScaleSetLBPublicIP created as part of the scale set:

az network public-ip show \
    --resource-group myResourceGroupScaleSet \
    --name myScaleSetLBPublicIP \
    --query [ipAddress] \
    --output tsv

Genel IP adresini bir web tarayıcısına girin.Enter the public IP address in to a web browser. Uygulama, yük dengeleyicinin trafiği dağıttığı VM’nin ana bilgisayar adı ile birlikte görüntülenir:The app is displayed, including the hostname of the VM that the load balancer distributed traffic to:

Node.js uygulaması çalıştırma

Ölçek kümesini çalışırken görmek için web tarayıcınızı yenilemeye zorlayarak yük dengeleyicinin trafiği, uygulamanızı çalıştıran üç VM’ye dağıtmasını görebilirsiniz.To see the scale set in action, you can force-refresh your web browser to see the load balancer distribute traffic across all the VMs running your app.

Yönetim görevleriManagement tasks

Ölçek kümesinin yaşam döngüsü boyunca bir veya daha fazla yönetim görevi çalıştırmanız gerekebilir.Throughout the lifecycle of the scale set, you may need to run one or more management tasks. Ayrıca, çeşitli yaşam döngüsü görevlerini otomatikleştiren betikler oluşturmak isteyebilirsiniz.Additionally, you may want to create scripts that automate various lifecycle-tasks. Azure CLI tüm bunları hızlıca yapabilmenizi sağlar.The Azure CLI provides a quick way to do those tasks. Aşağıda birkaç yaygın görev açıklanmaktadır.Here are a few common tasks.

Ölçek kümesindeki VM’leri görüntülemeView VMs in a scale set

Ölçek kümenizde çalışan VM’lerin listesini görüntülemek için az vmss list-instances komutunu şu şekilde kullanın:To view a list of VMs running in your scale set, use az vmss list-instances as follows:

az vmss list-instances \
  --resource-group myResourceGroupScaleSet \
  --name myScaleSet \
  --output table

Çıktı aşağıdaki örneğe benzer:The output is similar to the following example:

  InstanceId  LatestModelApplied    Location    Name          ProvisioningState    ResourceGroup            VmId
------------  --------------------  ----------  ------------  -------------------  -----------------------  ------------------------------------
           1  True                  eastus      myScaleSet_1  Succeeded            MYRESOURCEGROUPSCALESET  c72ddc34-6c41-4a53-b89e-dd24f27b30ab
           3  True                  eastus      myScaleSet_3  Succeeded            MYRESOURCEGROUPSCALESET  44266022-65c3-49c5-92dd-88ffa64f95da

VM örneklerinin sayısını el ile artırma veya azaltmaManually increase or decrease VM instances

Ölçek kümesinde şu anda yer alan örneklerin sayısını görmek için az vmss show komutunu kullanarak sku.capacity üzerinde bir sorgu çalıştırın:To see the number of instances you currently have in a scale set, use az vmss show and query on sku.capacity:

az vmss show \
    --resource-group myResourceGroupScaleSet \
    --name myScaleSet \
    --query [sku.capacity] \
    --output table

Ardından az vmss scale ile ölçek kümesindeki sanal makinelerin sayısını elle artırabilir veya azaltabilirsiniz.You can then manually increase or decrease the number of virtual machines in the scale set with az vmss scale. Aşağıdaki örnek, ölçek kümenizdeki VM'lerin sayısını 3 olarak ayarlar:The following example sets the number of VMs in your scale set to 3:

az vmss scale \
    --resource-group myResourceGroupScaleSet \
    --name myScaleSet \
    --new-capacity 3

Bağlantı bilgilerini almaGet connection info

Ölçek kümelerinizdeki VM'lere ilişkin bağlantı bilgilerini almak için az vmss list-instance-connection-info komutunu kullanın.To obtain connection information about the VMs in your scale sets, use az vmss list-instance-connection-info. Bu komut, çıktı olarak her bir VM’nin genel IP adresini ve bağlantı noktasını verir. Bu bilgiler, SSH ile bağlanmanıza olanak sağlar:This command outputs the public IP address and port for each VM that allows you to connect with SSH:

az vmss list-instance-connection-info \
    --resource-group myResourceGroupScaleSet \
    --name myScaleSet

Ölçek kümeleri ile veri diskleri kullanmaUse data disks with scale sets

Veri diskleri oluşturup ölçek kümeleri ile kullanabilirsiniz.You can create and use data disks with scale sets. Daha önceki bir öğreticide Azure disklerini yönetmeyi öğrenirken işletim sistemi diski yerine veri diskleri üzerinde uygulama oluşturmaya yönelik en iyi yöntemleri ve performans geliştirmelerini genel hatlarıyla gördünüz.In a previous tutorial, you learned how to Manage Azure disks that outlines the best practices and performance improvements for building apps on data disks rather than the OS disk.

Veri diskleri ile ölçek kümesi oluşturmaCreate scale set with data disks

Ölçek kümesi oluşturup veri diskleri eklemek için az vmss create komutuna --data-disk-sizes-gb parametresini ekleyin.To create a scale set and attach data disks, add the --data-disk-sizes-gb parameter to the az vmss create command. Aşağıdaki örnek, her bir örneğe 50 GB’lık bir veri diski eklenmiş şekilde bir ölçek kümesi oluşturur:The following example creates a scale set with 50Gb data disks attached to each instance:

az vmss create \
    --resource-group myResourceGroupScaleSet \
    --name myScaleSetDisks \
    --image UbuntuLTS \
    --upgrade-policy-mode automatic \
    --custom-data cloud-init.txt \
    --admin-username azureuser \
    --generate-ssh-keys \
    --data-disk-sizes-gb 50

Örnekler ölçek kümesinden kaldırıldığında ekli tüm veri diskleri de kaldırılır.When instances are removed from a scale set, any attached data disks are also removed.

Veri diski eklemeAdd data disks

Ölçek kümenizdeki örneklere bir veri diski eklemek için az vmss disk attach komutunu kullanın.To add a data disk to instances in your scale set, use az vmss disk attach. Aşağıdaki örnek, her bir örneğe 50 GB’lık bir veri diski ekler:The following example adds a 50Gb disk to each instance:

az vmss disk attach \
    --resource-group myResourceGroupScaleSet \
    --name myScaleSet \
    --size-gb 50 \
    --lun 2

Veri diskini çıkarmaDetach data disks

Ölçek kümenizdeki örneklerden veri diskini kaldırmak için az vmss disk detach komutunu kullanın.To remove a data disk to instances in your scale set, use az vmss disk detach. Aşağıdaki örnek, her bir örnekten LUN 2’deki veri diskini kaldırır:The following example removes the data disk at LUN 2 from each instance:

az vmss disk detach \
    --resource-group myResourceGroupScaleSet \
    --name myScaleSet \
    --lun 2

Sonraki adımlarNext steps

Bu öğreticide, bir sanal makine ölçek kümesi oluşturdunuz.In this tutorial, you created a virtual machine scale set. Şunları öğrendiniz:You learned how to:

  • Cloud-init kullanarak ölçeklendirilecek bir uygulama oluşturmaUse cloud-init to create an app to scale
  • Sanal makine ölçek kümesi oluşturmaCreate a virtual machine scale set
  • Ölçek kümesindeki örnek sayısını artırma veya azaltmaIncrease or decrease the number of instances in a scale set
  • Otomatik ölçeklendirme kuralları oluşturmaCreate autoscale rules
  • Ölçek kümesi örneklerine ait bağlantı bilgilerini görüntülemeView connection info for scale set instances
  • Ölçek kümesinde veri diskleri kullanmaUse data disks in a scale set

Sanal makinelere ilişkin yük dengeleme kavramları hakkında daha fazla bilgi edinmek için sıradaki öğreticiye geçin.Advance to the next tutorial to learn more about load balancing concepts for virtual machines.