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.
Ansible installeren: Voer een van de volgende opties uit:
- Ansible installeren en configureren op een virtuele Linux-machine
- Configureer Azure Cloud Shell en maak een virtuele machine met Ansible als u geen toegang hebt tot een virtuele Linux-machine.
- Virtuele-machineschaalset: Als u nog geen schaalset hebt, kunt u een schaalset configureren met Ansible.
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