Поделиться через


Руководство по настройке масштабируемых наборов виртуальных машин в Azure с помощью Ansible

Важно!

Для выполнения примеров сборников схем из этой статьи требуется Ansible 2.9 (или последующей версии).

Масштабируемые наборы виртуальных машин Azure — это решение Azure, которое позволяет настраивать группы идентичных виртуальных машин с подсистемой балансировки нагрузки. За масштабирование наборов, созданных на основе виртуальных машин, плата не взимается. Вы платите только за такие базовые вычислительные ресурсы, как экземпляры виртуальных машин, подсистему балансировки нагрузки или хранилище управляемых дисков. При использовании масштабируемых наборов для запуска и масштабирования приложений предоставляются уровни управления и автоматизации. Можно вместо этого вручную создавать и администрировать отдельные виртуальные машины. При этом использование масштабируемых наборов связано с двумя ключевыми преимуществами. Они полностью поддерживаются в Azure, позволяя выполнять автоматическое масштабирование виртуальных машин в соответствии с потребностями приложения.

Вы узнаете, как выполнять следующие задачи:

  • Настройка ресурсов для виртуальной машины.
  • Настройка масштабируемого набора.
  • Масштабирование масштабируемого набора путем увеличения числа экземпляров виртуальных машин.

Необходимые компоненты

Настройка масштабируемого набора.

Код из сборника схем в этом разделе определяет следующие ресурсы:

  • Группа ресурсов, в которую будут развернуты все ваши ресурсы.
  • Виртуальная сеть в адресном пространстве 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

Просмотр числа экземпляров виртуальных машин

Сейчас настроенный масштабируемый набор содержит два экземпляра. Чтобы убедиться в этом, можно сделать следующее.

  1. Войдите на портал Azure.

  2. Перейдите к масштабируемому набору, который вы настроили.

  3. Вы увидите имя масштабируемого набора с числом экземпляров в скобках: Standard_DS1_v2 (2 instances).

  4. Вы можете также проверить число экземпляров с помощью 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.

  1. Войдите на портал Azure.

  2. Перейдите к масштабируемому набору, который вы настроили.

  3. Вы увидите имя масштабируемого набора с числом экземпляров в скобках: Standard_DS1_v2 (3 instances).

  4. Вы также можете проверить изменение с помощью Azure Cloud Shell, выполнив следующую команду:

    az vmss show -n myScaleSet -g myResourceGroup --query '{"capacity":sku.capacity}' 
    

    После выполнения команды в Cloud Shell видно, что теперь в масштабируемом наборе три экземпляра.

    {
      "capacity": 3,
    }
    

Следующие шаги