Delen via


Zelfstudie: Virtuele-machineschaalsets automatisch schalen in Azure met ansible

Belangrijk

Ansible 2.7 (of hoger) is vereist om de voorbeeldplaybooks in dit artikel uit te voeren.

Virtuele-machineschaalsets van Azure is een Azure-functie waarmee u een groep identieke vm's met gelijke taakverdeling kunt configureren. Er zijn geen extra kosten verbonden aan schaalsets en ze zijn gebouwd op basis van virtuele machines. U betaalt alleen voor de onderliggende rekenresources, zoals de VM-exemplaren, load balancers of Managed Disk-opslag. Met schaalsets beschikt u automatisch over de beheer- en automatiseringslagen voor het uitvoeren en schalen van uw toepassingen. U kunt in plaats daarvan handmatig afzonderlijke VM's maken en beheren. Er zijn echter twee belangrijke voordelen voor het gebruik van schaalsets. Ze zijn ingebouwd in Azure en ze schalen uw virtuele machines automatisch om te voldoen aan de toepassingsbehoeften.

De functie voor het automatisch aanpassen van het aantal VM-exemplaren wordt automatisch schalen genoemd. Het voordeel van automatische schaalaanpassing is dat het de beheeroverhead vermindert om de prestaties van uw toepassing te bewaken en te optimaliseren. Automatische schaalaanpassing kan worden geconfigureerd als reactie op de vraag of volgens een gedefinieerd schema. Met Ansible kunt u de regels voor automatische schaalaanpassing opgeven waarmee de acceptabele prestaties voor een positieve klantervaring worden gedefinieerd.

In dit artikel leert u het volgende:

  • Een profiel voor automatisch schalen definiëren
  • Automatisch schalen op basis van een terugkerend schema
  • Automatisch schalen op basis van app-prestaties
  • Instellingen voor automatische schaalaanpassing ophalen
  • Een instelling voor automatische schaalaanpassing uitschakelen

Vereisten

  • Azure-abonnement: als u nog geen abonnement op Azure hebt, maakt u een gratis Azure-account aan voordat u begint.

Automatisch schalen op basis van een schema

Als u automatisch schalen wilt inschakelen voor een schaalset, moet u eerst een profiel voor automatisch schalen definiëren. In dit profiel worden de minimum-, maximum- en standaardcapaciteit ingesteld voor de schaalset. Met behulp van deze limieten kunt u de kosten in de hand houden doordat er niet steeds VM-exemplaren hoeven te worden gemaakt, en kunt u aanvaardbare prestaties realiseren met een minimum aantal exemplaren die altijd kunnen worden ingeschaald.

Met Ansible kunt u uw schaalsets schalen op een specifieke datum of terugkerend schema.

Met de playbookcode in deze sectie wordt het aantal VM-exemplaren elke maandag verhoogd naar drie om 10:00 uur.

Sla het volgende playbook op als 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'

Het playbook uitvoeren met ansible-playbook

ansible-playbook vmss-auto-scale.yml

Automatisch schalen op basis van prestatiegegevens

Als de vraag voor een toepassing toeneemt, neemt de belasting van de VM-exemplaren in de schaalset ook toe. Als deze toegenomen belasting consistent is, en geen piekbelasting is, kunt u regels voor automatisch schalen configureren om het aantal VM-exemplaren in de schaalset te verhogen. Wanneer deze VM-exemplaren worden gemaakt en uw toepassingen worden geïmplementeerd, zorgt de schaalset ervoor dat er via de load balancer verkeer wordt gedistribueerd naar de exemplaren. Met Ansible kunt u bepalen welke metrische gegevens moeten worden bewaakt, zoals CPU-gebruik, schijfgebruik en laadtijd voor apps. U kunt in- en uitschalen in schaalsets op basis van metrische drempelwaarden voor prestaties, op basis van een terugkerend schema of op een bepaalde datum.

De playbookcode in deze sectie controleert de CPU-workload voor de afgelopen 10 minuten om 18:00 uur elke maandag.

Op basis van de metrische gegevens van het CPU-percentage voert het playbook een van de volgende acties uit:

  • Hiermee wordt het aantal VM-exemplaren uitgeschaald naar vier
  • Schaalt het aantal VM-exemplaren naar één

Sla het volgende playbook op als 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'

Het playbook uitvoeren met ansible-playbook

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

Instellingen voor automatisch schalen ophalen

De playbookcode in deze sectie gebruikt de azure_rm_autoscale_facts module om de details van de instelling voor automatische schaalaanpassing op te halen.

Sla het volgende playbook op als 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]

Het playbook uitvoeren met ansible-playbook

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

Instellingen voor automatisch schalen uitschakelen

Er zijn twee manieren om instellingen voor automatisch schalen uit te schakelen. Een manier is om de enabled sleutel te wijzigen van true in false. De tweede manier is om de instelling te verwijderen.

De playbookcode in deze sectie verwijdert de instelling voor automatisch schalen.

Sla het volgende playbook op als 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

Het playbook uitvoeren met ansible-playbook

vmss-auto-scale-delete-setting.yml

Volgende stappen