Tutorial: Automatisches Skalieren von VM-Skalierungsgruppen in Azure mit AnsibleTutorial: Autoscale virtual machine scale sets in Azure using Ansible

Wichtig

Für die Ausführung der Beispielplaybooks in diesem Artikel ist mindestens Ansible 2.7 erforderlich.Ansible 2.7 (or later) is required to run the sample playbooks in this article.

Azure-VM-Skalierungsgruppen sind eine Azure-Funktion, mit der Sie eine Gruppe von identischen virtuellen Computern mit Lastenausgleich konfigurieren können.Azure virtual machine scale sets is an Azure feature that lets you configure a group of identical, load balanced VMs. Durch Skalierungsgruppen entstehen keine zusätzlichen Kosten, und sie werden aus virtuellen Computern erstellt.There's no additional cost to scale sets and they're built from virtual machines. Sie zahlen nur für die zugrunde liegenden Computeressourcen, z. B. die VM-Instanzen, den Lastenausgleich oder den Speicher für verwaltete Datenträger.You pay only for the underlying compute resources such as the VM instances, load balancers, or Managed Disk storage. Mit Skalierungsgruppen werden die Verwaltungs- und Automatisierungsebenen für die Ausführung und Skalierung Ihrer Anwendungen bereitgestellt.With scale sets, the management and automation layers are provided to run and scale your applications. Sie können stattdessen einzelne virtuelle Computer manuell erstellen und verwalten.You could instead manually create and manage individual VMs. Die Verwendung von Skalierungsgruppen bietet jedoch zwei wesentliche Vorteile.However, there are two key benefits to using scale sets. Sie sind in Azure integriert und skalieren Ihre virtuellen Computer automatisch entsprechend den Anwendungsanforderungen.They're built into Azure and they automatically scale your virtual machines to meet application needs.

Das Feature zur automatischen Anpassung der Anzahl von VM-Instanzen heißt Autoskalierung.The feature of automatically adjusting the number of VM instances is called autoscale. Der Vorteil der Autoskalierung besteht in der Verringerung des Verwaltungsaufwands im Zusammenhang mit der Leistungsüberwachung und -optimierung für Ihre Anwendung.The benefit of autoscale is that it reduces the management overhead to monitor and optimize the performance of your application. Die Autoskalierung kann bedarfsbasiert oder nach einem definierten Zeitplan konfiguriert werden.Autoscale can be configured in response to demand or on a defined schedule. Mit Ansible können Sie Autoskalierungsregeln angeben, um eine angemessene Leistung für eine positive Kundenerfahrung zu definieren.Using Ansible, you can specify the autoscale rules that define the acceptable performance for a positive customer experience.

In diesem Tutorial wird Ansible für Folgendes verwendet:In this tutorial, Ansible is used to:

  • Definieren eines Profils für die automatische SkalierungDefine an autoscale profile
  • Automatisches Skalieren auf der Grundlage einer ZeitplanserieAutoscale based on a recurring schedule
  • Automatisches Skalieren auf der Grundlage der App-LeistungAutoscale based on app performance
  • Abrufen von Informationen zu AutoskalierungseinstellungenRetrieve autoscale settings information
  • Deaktivieren einer AutoskalierungseinstellungDisable an autoscale setting

VoraussetzungenPrerequisites

  • Azure-Abonnement: Wenn Sie kein Azure-Abonnement besitzen, können Sie ein kostenloses Konto erstellen, bevor Sie beginnen.Azure subscription: If you don't have an Azure subscription, create a free account before you begin.

Automatisches Skalieren nach ZeitplanAutoscale based on a schedule

Zum Aktivieren der automatischen Skalierung für eine Skalierungsgruppe legen Sie zuerst ein Profil für die automatische Skalierung fest.To enable autoscale on a scale set, you first define an autoscale profile. Dieses Profil definiert die standardmäßige, minimale und maximale Kapazität der Skalierungsgruppe.This profile defines the default, minimum, and maximum scale set capacity. Diese Grenzwerte sind hilfreich bei der Kostenkontrolle und sorgen nicht nur dafür, dass nicht fortlaufend VM-Instanzen erstellt werden, sondern gewährleisten auch ein ausgewogenes Verhältnis zwischen angemessener Leistung und einer minimalen Anzahl von Instanzen, die beim horizontalen Herunterskalieren erhalten bleiben.These limits let you control cost by not continually creating VM instances, and balance acceptable performance with a minimum number of instances that remain in a scale-in event.

Mit Ansible können Sie Ihre Skalierungsgruppen auf der Grundlage eines bestimmten Datums oder einer Zeitplanserie skalieren.Ansible allows you to scale your scale sets on a specific date or recurring schedule.

Der Playbookcode in diesem Abschnitt erhöht die Anzahl von VM-Instanzen jeden Montag um 10:00 Uhr auf drei.The playbook code in this section increases the number of VM instances to three at 10:00 every Monday.

Speichern Sie das folgende Playbook als vmss-auto-scale.yml:Save the following playbook as vmss-auto-scale.yml:

---
- hosts: localhost
  vars:
    resource_group: myResourceGroup
    vmss_name: myScaleSet
    name: autoscalesetting
  tasks: 
    - name: Create autoscaling
      azure_rm_autoscale:
         resource_group: "{{ resource_group }}"
         name: "{{ name }}"
         target:
           namespace: "Microsoft.Compute"
           types: "virtualMachineScaleSets"
           name: "{{ vmss_name }}"
         enabled: true
         profiles:
         - count: '3'
           min_count: '3'
           max_count: '3'
           name: Auto created scale condition
           recurrence_timezone: Pacific Standard Time
           recurrence_frequency: Week
           recurrence_days:
              - Monday
           recurrence_mins:
              - '0'
           recurrence_hours:
              - '10'

Führen Sie das Playbook mithilfe des Befehls ansible-playbook aus:Run the playbook using the ansible-playbook command:

ansible-playbook vmss-auto-scale.yml

Automatisches Skalieren auf der Grundlage von LeistungsdatenAutoscale based on performance data

Wenn sich die Nachfrage für Ihre Anwendung erhöht, erhöht sich auch die Last für die VM-Instanzen in Ihren Skalierungsgruppen.If your application demand increases, the load on the VM instances in your scale sets increases. Falls es sich um eine dauerhafte Last und nicht nur um eine kurzzeitige höhere Nachfrage handelt, können Sie die Regeln für die automatische Skalierung konfigurieren, um die Anzahl von VM-Instanzen in der Skalierungsgruppe zu erhöhen.If this increased load is consistent, rather than just a brief demand, you can configure autoscale rules to increase the number of VM instances in the scale set. Nachdem diese VM-Instanzen erstellt und Ihre Anwendungen bereitgestellt wurden, beginnt die Skalierungsgruppe damit, über das Lastenausgleichsmodul Datenverkehr darauf zu verteilen.When these VM instances are created and your applications are deployed, the scale set starts to distribute traffic to them through the load balancer. Mit Ansible können Sie steuern, welche Metriken überwacht werden sollen (beispielsweise CPU-Auslastung, Datenträgerauslastung und App-Ladezeit).Ansible allows you to control what metrics to monitor, such as CPU usage, disk usage, and app-load time. In Skalierungsgruppen kann basierend auf Leistungsmetrik-Schwellenwerten, auf der Grundlage einer Zeitplanserie oder an einem bestimmten Datum horizontal herunter- und hochskaliert werden.You can scale in and scale out in scale sets based on performance metric thresholds, by a recurring schedule, or by a particular date.

Der Playbookcode in diesem Abschnitt überprüft jeden Montag um 18:00 Uhr die CPU-Auslastung der letzten zehn Minuten.The playbook code in this section checks the CPU workload for the previous 10 minutes at 18:00 every Monday.

Auf der Grundlage der prozentualen CPU-Metriken führt das Playbook eine der folgenden Aktionen aus:Based on the CPU percentage metrics, the playbook does one of the following actions:

  • Erhöhen der Anzahl von VM-Instanzen auf vierScales out the number of VM instances to four
  • Verringern der Anzahl von VM-Instanzen auf eineScales in the number of VM instances to one

Speichern Sie das folgende Playbook als vmss-auto-scale-metrics.yml:Save the following playbook as vmss-auto-scale-metrics.yml:

---
- hosts: localhost
  vars:
    resource_group: myResourceGroup
    vmss_name: myScaleSet
    name: autoscalesetting
  tasks:
  - name: Get facts of the resource group
    azure_rm_resourcegroup_facts:
      name: "{{ resource_group }}"
    register: rg

  - name: Get scale set resource uri
    set_fact:
      vmss_id: "{{ rg.ansible_facts.azure_resourcegroups[0].id }}/providers/Microsoft.Compute/virtualMachineScaleSets/{{ vmss_name }}"
    
  - name: Create autoscaling
    azure_rm_autoscale:
      resource_group: "{{ resource_group }}"
      name: "{{ name }}"
      target: "{{ vmss_id }}"
      enabled: true
      profiles:
      - count: '1'
        max_count: '1'
        min_count: '1'
        name: 'This scale condition is executed when none of the other scale condition(s) match'
        recurrence_days:
          - Monday
        recurrence_frequency: Week
        recurrence_hours:
          - 18
        recurrence_mins:
          - 0
        recurrence_timezone: Pacific Standard Time
      - count: '1'
        min_count: '1'
        max_count: '4'
        name: Auto created scale condition
        recurrence_days:
          - Monday
        recurrence_frequency: Week
        recurrence_hours:
          - 18
        recurrence_mins:
          - 0
        recurrence_timezone: Pacific Standard Time
        rules:
          - cooldown: 5
            direction: Increase
            metric_name: Percentage CPU
            metric_resource_uri: "{{ vmss_id }}"
            operator: GreaterThan
            statistic: Average
            threshold: 70
            time_aggregation: Average
            time_grain: 1
            time_window: 10
            type: ChangeCount
            value: '1'
          - cooldown: 5
            direction: Decrease
            metric_name: Percentage CPU
            metric_resource_uri: "{{ vmss_id }}"
            operator: LessThan
            statistic: Average
            threshold: 30
            time_aggregation: Average
            time_grain: 1
            time_window: 10
            type: ChangeCount
            value: '1'

Führen Sie das Playbook mithilfe des Befehls ansible-playbook aus:Run the playbook using the ansible-playbook command:

ansible-playbook vmss-auto-scale-metrics.yml

Abrufen von Informationen zu AutoskalierungseinstellungenGet autoscale settings information

Der Playbookcode in diesem Abschnitt verwendet das Modul azure_rm_autoscale_facts, um Details zur Autoskalierungseinstellung abzurufen.The playbook code in this section uses the azure_rm_autoscale_facts module to retrieve the details of autoscale setting.

Speichern Sie das folgende Playbook als vmss-auto-scale-get-settings.yml:Save the following playbook as vmss-auto-scale-get-settings.yml:

- hosts: localhost
  vars:
    resource_group: myResourceGroup
    name: autoscalesetting
  tasks: 
    - name: Retrieve autoscale settings information
      azure_rm_autoscale_facts:
        resource_group: "{{ resource_group }}"
        name: "{{ name }}"
      register: autoscale_query
    
    - debug:
        var: autoscale_query.autoscales[0]

Führen Sie das Playbook mithilfe des Befehls ansible-playbook aus:Run the playbook using the ansible-playbook command:

ansible-playbook vmss-auto-scale-get-settings.yml

Deaktivieren von AutoskalierungseinstellungenDisable autoscale settings

Autoskalierungseinstellungen können auf zwei Arten deaktiviert werden.There are two ways to disable autoscale settings. Eine Möglichkeit besteht darin, den Schlüssel enabled von true in false zu ändern.One way is to change the enabled key from true to false. Die zweite Möglichkeit ist das Löschen der Einstellung.The second way is to delete the setting.

Der Playbookcode in diesem Abschnitt löscht die Autoskalierungseinstellung.The playbook code in this section deletes the autoscale setting.

Speichern Sie das folgende Playbook als vmss-auto-scale-delete-setting.yml:Save the following playbook as vmss-auto-scale-delete-setting.yml:

- hosts: localhost
  vars:
    resource_group: myResourceGroup
    name: autoscalesetting
  tasks: 
    - name: Delete autoscaling
      azure_rm_autoscale:
         resource_group: "{{ resource_group }}"
         name: "{{ name }}"
         state: absent

Führen Sie das Playbook mithilfe des Befehls ansible-playbook aus:Run the playbook using the ansible-playbook command:

vmss-auto-scale-delete-setting.yml

Nächste SchritteNext steps