Руководство по настройке масштабируемых наборов виртуальных машин в Azure с помощью Ansible
Важно!
Для выполнения примеров сборников схем из этой статьи требуется Ansible 2.9 (или последующей версии).
Масштабируемые наборы виртуальных машин Azure — это решение Azure, которое позволяет настраивать группы идентичных виртуальных машин с подсистемой балансировки нагрузки. За масштабирование наборов, созданных на основе виртуальных машин, плата не взимается. Вы платите только за такие базовые вычислительные ресурсы, как экземпляры виртуальных машин, подсистему балансировки нагрузки или хранилище управляемых дисков. При использовании масштабируемых наборов для запуска и масштабирования приложений предоставляются уровни управления и автоматизации. Можно вместо этого вручную создавать и администрировать отдельные виртуальные машины. При этом использование масштабируемых наборов связано с двумя ключевыми преимуществами. Они полностью поддерживаются в Azure, позволяя выполнять автоматическое масштабирование виртуальных машин в соответствии с потребностями приложения.
Вы узнаете, как выполнять следующие задачи:
- Настройка ресурсов для виртуальной машины.
- Настройка масштабируемого набора.
- Масштабирование масштабируемого набора путем увеличения числа экземпляров виртуальных машин.
Необходимые компоненты
- Подписка Azure. Если у вас нет подписки Azure, создайте бесплатную учетную запись, прежде чем начинать работу.
Установите Ansible: выполните одно из указанных ниже действий.
- Установите и настройте Ansible на виртуальной машине Linux.
- Настройте Azure Cloud Shell и, если у вас нет доступа к виртуальной машине Linux, вы можете создать ее с помощью Ansible.
Настройка масштабируемого набора.
Код из сборника схем в этом разделе определяет следующие ресурсы:
- Группа ресурсов, в которую будут развернуты все ваши ресурсы.
- Виртуальная сеть в адресном пространстве 10.0.0.0/16.
- Подсеть в виртуальной сети.
- Общедоступный IP-адрес, который позволяет получить доступ к ресурсам через Интернет.
- Группа безопасности сети, которая контролирует поток исходящего и входящего трафика масштабируемого набора.
- Подсистема балансировки нагрузки, которая распределяет трафик в наборе определенных виртуальных машин с помощью правил подсистемы балансировки нагрузки.
- Масштабируемый набор виртуальных машин, который использует все созданные ресурсы.
Существуют два способа получить пример сборника схем.
Скачайте сборник схем и сохраните его как
vmss-create.yml
.Создайте файл с именем
vmss-create.yml
. Вставьте следующий код в новый файл:
- hosts: localhost
vars:
resource_group: myResourceGroup
vmss_name: myvmscalesetname
vmss_lb_name: myScaleSetLb
location: eastus
admin_username: azureuser
admin_password: "{{ admin_password }}"
tasks:
- name: Create a resource group
azure_rm_resourcegroup:
name: "{{ resource_group }}"
location: "{{ location }}"
- name: Create virtual network
azure_rm_virtualnetwork:
resource_group: "{{ resource_group }}"
name: "{{ vmss_name }}"
address_prefixes: "10.0.0.0/16"
- name: Add subnet
azure_rm_subnet:
resource_group: "{{ resource_group }}"
name: "{{ vmss_name }}"
address_prefix: "10.0.1.0/24"
virtual_network: "{{ vmss_name }}"
- name: Create public IP address
azure_rm_publicipaddress:
resource_group: "{{ resource_group }}"
allocation_method: Static
name: "{{ vmss_name }}"
- name: Create Network Security Group that allows SSH
azure_rm_securitygroup:
resource_group: "{{ resource_group }}"
name: "{{ vmss_name }}"
rules:
- name: SSH
protocol: Tcp
destination_port_range: 22
access: Allow
priority: 1001
direction: Inbound
- name: Create a load balancer
azure_rm_loadbalancer:
resource_group: "{{ resource_group }}"
name: "{{ vmss_name }}lb"
location: "{{ location }}"
frontend_ip_configurations:
- name: "{{ vmss_name }}front-config"
public_ip_address: "{{ vmss_name }}"
backend_address_pools:
- name: "{{ vmss_name }}backend-pool"
probes:
- name: "{{ vmss_name }}prob0"
port: 8080
interval: 10
fail_count: 3
inbound_nat_pools:
- name: "{{ vmss_name }}nat-pool"
frontend_ip_configuration_name: "{{ vmss_name }}front-config"
protocol: Tcp
frontend_port_range_start: 50000
frontend_port_range_end: 50040
backend_port: 22
load_balancing_rules:
- name: "{{ vmss_name }}lb-rules"
frontend_ip_configuration: "{{ vmss_name }}front-config"
backend_address_pool: "{{ vmss_name }}backend-pool"
frontend_port: 80
backend_port: 8080
load_distribution: Default
probe: "{{ vmss_name }}prob0"
- name: Create VMSS
no_log: true
azure_rm_virtualmachinescaleset:
resource_group: "{{ resource_group }}"
name: "{{ vmss_name }}"
vm_size: Standard_DS1_v2
admin_username: "{{ admin_username }}"
admin_password: "{{ admin_password }}"
ssh_password_enabled: true
capacity: 2
virtual_network_name: "{{ vmss_name }}"
subnet_name: "{{ vmss_name }}"
upgrade_policy: Manual
tier: Standard
managed_disk_type: Standard_LRS
os_disk_caching: ReadWrite
image:
offer: UbuntuServer
publisher: Canonical
sku: 16.04-LTS
version: latest
load_balancer: "{{ vmss_name }}lb"
data_disks:
- lun: 0
disk_size_gb: 20
managed_disk_type: Standard_LRS
caching: ReadOnly
- lun: 1
disk_size_gb: 30
managed_disk_type: Standard_LRS
caching: ReadOnly
Перед выполнением сборника схем ознакомьтесь со следующими указаниями.
- В разделе
vars
замените заполнитель{{ admin_password }}
собственным паролем.
Запустите сборник схем с помощью команды ansible-playbook.
ansible-playbook vmss-create.yml
После запуска сборника схем отобразятся результаты, аналогичные приведенным ниже.
PLAY [localhost]
TASK [Gathering Facts]
ok: [localhost]
TASK [Create a resource group]
changed: [localhost]
TASK [Create virtual network]
changed: [localhost]
TASK [Add subnet]
changed: [localhost]
TASK [Create public IP address]
changed: [localhost]
TASK [Create Network Security Group that allows SSH]
changed: [localhost]
TASK [Create a load balancer]
changed: [localhost]
TASK [Create Scale Set]
changed: [localhost]
PLAY RECAP
localhost : ok=8 changed=7 unreachable=0 failed=0
Просмотр числа экземпляров виртуальных машин
Сейчас настроенный масштабируемый набор содержит два экземпляра. Чтобы убедиться в этом, можно сделать следующее.
Войдите на портал Azure.
Перейдите к масштабируемому набору, который вы настроили.
Вы увидите имя масштабируемого набора с числом экземпляров в скобках:
Standard_DS1_v2 (2 instances)
.Вы можете также проверить число экземпляров с помощью Azure Cloud Shell, выполнив следующую команду.
az vmss show -n myScaleSet -g myResourceGroup --query '{"capacity":sku.capacity}'
После выполнения команды в Cloud Shell видно, что в масштабируемом наборе есть два экземпляра.
{ "capacity": 2, }
Горизонтальное увеличение масштаба масштабируемого набора
Код из сборника схем в этом разделе извлекает информацию о масштабируемом наборе и изменяет его емкость с двух виртуальных машин до трех.
Существуют два способа получить пример сборника схем.
Скачайте сборник схем и сохраните его в
vmss-scale-out.yml
.Создайте файл с именем
vmss-scale-out.yml
. Вставьте следующий код в новый файл:
---
- hosts: localhost
gather_facts: false
vars:
resource_group: myTestRG
vmss_name: myTestVMSS
tasks:
- name: Get scaleset info
azure_rm_virtualmachine_scaleset_facts:
resource_group: "{{ resource_group }}"
name: "{{ vmss_name }}"
format: curated
register: output_scaleset
- name: set image fact
set_fact:
vmss_image: "{{ output_scaleset.vmss[0].image }}"
- name: Create VMSS
no_log: true
azure_rm_virtualmachinescaleset:
resource_group: "{{ resource_group }}"
name: "{{ vmss_name }}"
capacity: 3
image: "{{ vmss_image }}"
Запустите сборник схем с помощью команды ansible-playbook.
ansible-playbook vmss-scale-out.yml
После запуска сборника схем отобразятся результаты, аналогичные приведенным ниже.
PLAY [localhost]
TASK [Gathering Facts]
ok: [localhost]
TASK [Get scaleset info]
ok: [localhost]
TASK [Set image fact]
ok: [localhost]
TASK [Change VMSS capacity]
changed: [localhost]
PLAY RECAP
localhost : ok=3 changed=1 unreachable=0 failed=0
Проверка результатов
Проверьте результаты работы на портале Azure.
Войдите на портал Azure.
Перейдите к масштабируемому набору, который вы настроили.
Вы увидите имя масштабируемого набора с числом экземпляров в скобках:
Standard_DS1_v2 (3 instances)
.Вы также можете проверить изменение с помощью Azure Cloud Shell, выполнив следующую команду:
az vmss show -n myScaleSet -g myResourceGroup --query '{"capacity":sku.capacity}'
После выполнения команды в Cloud Shell видно, что теперь в масштабируемом наборе три экземпляра.
{ "capacity": 3, }