Tutorial: Dimensionar automaticamente conjuntos de dimensionamento de máquina virtual no Azure usando o Ansible

Importante

O Ansible 2.7 (ou posterior) é necessário para executar os playbooks de exemplo neste artigo.

Os conjuntos de dimensionamento de máquina virtual do Azure são um recurso do Azure que permite configurar um grupo de VMs idênticas com balanceamento de carga. Não há custo adicional para dimensionar conjuntos e eles são criados a partir de máquinas virtuais. Você paga apenas pelos recursos de computação subjacentes, como instâncias de VM, balanceadores de carga ou armazenamento em disco gerenciado. Nos conjuntos de dimensionamento, as camadas de gestão e automatização são fornecidas para executar e dimensionar as suas aplicações. Em vez disso, você pode criar e gerenciar manualmente VMs individuais. No entanto, há dois benefícios principais no uso de conjuntos de escalas. Eles são incorporados ao Azure e dimensionam automaticamente suas máquinas virtuais para atender às necessidades do aplicativo.

O recurso de ajustar automaticamente o número de instâncias de VM é chamado de dimensionamento automático. O benefício do dimensionamento automático é que ele reduz a sobrecarga de gerenciamento para monitorar e otimizar o desempenho do seu aplicativo. O dimensionamento automático pode ser configurado em resposta à demanda ou em um cronograma definido. Usando o Ansible, você pode especificar as regras de dimensionamento automático que definem o desempenho aceitável para uma experiência positiva do cliente.

Neste artigo, vai aprender a:

  • Definir um perfil de dimensionamento automático
  • Dimensionamento automático com base em uma programação recorrente
  • Dimensionamento automático com base no desempenho do aplicativo
  • Recuperar informações de configurações de dimensionamento automático
  • Desativar uma configuração de dimensionamento automático

Pré-requisitos

  • Subscrição do Azure: se não tem uma subscrição do Azure, crie uma conta gratuita antes de começar.

Dimensionamento automático com base em um cronograma

Para ativar o dimensionamento automático num conjunto de dimensionamente, tem primeiro que definir um perfil de dimensionamento automático. Este perfil define a capacidade predefinida, máxima e mínima do conjunto de dimensionamento. Esses limites permitem controlar o custo não criando continuamente instâncias de VM e equilibrar o desempenho aceitável com um número mínimo de instâncias que permanecem em um evento de escala.

O Ansible permite que você dimensione seus conjuntos de escalas em uma data específica ou agenda recorrente.

O código do playbook nesta seção aumenta o número de instâncias de VM para três às 10:00 todas as segundas-feiras.

Guarde o manual de procedimentos seguinte como 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'

Execute o playbook usando o ansible-playbook

ansible-playbook vmss-auto-scale.yml

Dimensionamento automático com base em dados de desempenho

Se a demanda do aplicativo aumentar, a carga nas instâncias de VM em seus conjuntos de escala aumentará. Se este aumento de carga for consistente, em vez de ser apenas uma breve exigência, pode configurar regras de dimensionamento automático para aumentar o número de instâncias de VM no conjunto de dimensionamento. Quando estas instâncias de VM forem criadas e as aplicações forem implementadas, o conjunto de dimensionamento começa a distribuir o tráfego pelas mesmas através do balanceador de carga. O Ansible permite controlar quais métricas monitorar, como uso da CPU, uso do disco e tempo de carregamento do aplicativo. Você pode dimensionar e expandir em conjuntos de escala com base em limites de métricas de desempenho, por uma agenda recorrente ou por uma data específica.

O código do playbook nesta seção verifica a carga de trabalho da CPU nos 10 minutos anteriores às 18:00 todas as segundas-feiras.

Com base nas métricas de porcentagem de CPU, o manual executa uma das seguintes ações:

  • Dimensiona o número de instâncias de VM para quatro
  • Dimensiona o número de instâncias de VM para uma

Guarde o manual de procedimentos seguinte como 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'

Execute o playbook usando o ansible-playbook

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

Obter informações sobre configurações de dimensionamento automático

O código do playbook nesta seção usa o azure_rm_autoscale_facts módulo para recuperar os detalhes da configuração de dimensionamento automático.

Guarde o manual de procedimentos seguinte como 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]

Execute o playbook usando o ansible-playbook

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

Desativar configurações de dimensionamento automático

Há duas maneiras de desativar as configurações de dimensionamento automático. Uma maneira é mudar a enabled chave de true para false. A segunda maneira é excluir a configuração.

O código do playbook nesta seção exclui a configuração de dimensionamento automático.

Guarde o manual de procedimentos seguinte como 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

Execute o playbook usando o ansible-playbook

vmss-auto-scale-delete-setting.yml

Próximos passos