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


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

Внимание

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

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

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

  • Получение сведений об узле для группы виртуальных машин Azure
  • Клонирование и сборка примера приложения
  • Установка JRE (среды выполнения Java) в масштабируемом наборе
  • Развертывание приложения Java в масштабируемом наборе

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

  • git - git используется для скачивания примеров Java, которые есть в этом руководстве.
  • Пакет SDK для Java SE (JDK). JDK используется для сборки примера проекта Java.
  • Apache Maven - Apache Maven используется для сборки примера проекта Java.

Получение сведений об узле

Код из сборника схем в этом разделе извлекает сведения об узле для группы виртуальных машин. Этот код получает общедоступные IP-адреса и подсистему балансировки нагрузки в указанной группе ресурсов и создает группу узлов scalesethosts в списке ресурсов.

Сохраните следующий пример сборника схем как get-hosts-tasks.yml:

- name: Get facts for all Public IPs within a resource groups
  azure_rm_publicipaddress_info:
    resource_group: "{{ resource_group }}"
  register: output_ip_address

- name: Get loadbalancer info
  azure_rm_loadbalancer_info:
    resource_group: "{{ resource_group }}"
    name: "{{ loadbalancer_name }}"
  register: output

- name: Add all hosts
  add_host:
    groups: scalesethosts
    hostname: "{{ output_ip_address.publicipaddresses[0].ip_address }}_{{ item.properties.frontendPort }}"
    ansible_host: "{{ output_ip_address.publicipaddresses[0].ip_address }}"
    ansible_port: "{{ item.properties.frontendPort }}"
    ansible_ssh_user: "{{ admin_username }}"
    ansible_ssh_pass: "{{ admin_password }}"
  with_items:
    - "{{ output.ansible_info.azure_loadbalancers[0].properties.inboundNatRules }}"

Подготовка приложения для развертывания

Код из сборника схем в этом разделе использует git для клонирования примера проекта Java из GitHub и выполняет сборку этого проекта.

Сохраните следующий сборник схем как app.yml:

- hosts: localhost
  vars:
    repo_url: https://github.com/spring-guides/gs-spring-boot.git
    workspace: ~/src/helloworld

  tasks:
  - name: Git Clone sample app
    git:
      repo: "{{ repo_url }}"
      dest: "{{ workspace }}"

  - name: Build sample app
    shell: mvn package chdir="{{ workspace }}/complete"

Запустите пример сборника схем Ansible, выполнив следующую команду:

ansible-playbook app.yml

После запуска сборника схем отобразятся результаты, аналогичные приведенным ниже.

PLAY [localhost] 

TASK [Gathering Facts] 
ok: [localhost]

TASK [Git Clone sample app] 
changed: [localhost]

TASK [Build sample app] 
changed: [localhost]

PLAY RECAP 
localhost                  : ok=3    changed=2    unreachable=0    failed=0

Развертывание приложения в масштабируемом наборе

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

  • Установите JRE в группе узлов saclesethosts.
  • Разверните приложение Java в группе узлов saclesethosts.

Существуют два способа получить пример сборника схем.

  • Скачайте сборник схем и сохраните его в vmss-setup-deploy.yml.

  • Создайте файл с именем vmss-setup-deploy.yml. Вставьте следующий код в новый файл:

- hosts: localhost
  vars:
    resource_group: myResourceGroup
    scaleset_name: myScaleSet
    loadbalancer_name: myScaleSetLb
    admin_username: azureuser
    admin_password: "{{ admin_password }}"
  tasks:
  - include: get-hosts-tasks.yml

- name: Install JRE on a scale set
  hosts: scalesethosts
  become: yes
  vars:
    workspace: ~/src/helloworld
    admin_username: azureuser

  tasks:
  - name: Install JRE
    apt:
      name: default-jre
      update_cache: yes

  - name: Copy app to Azure VM
    copy:
      src: "{{ workspace }}/complete/target/gs-spring-boot-0.1.0.jar"
      dest: "/home/{{ admin_username }}/helloworld.jar"
      force: yes
      mode: 0755

  - name: Start the application
    shell: java -jar "/home/{{ admin_username }}/helloworld.jar" >/dev/null 2>&1 &
    async: 5000
    poll: 0

Перед выполнением сборника схем ознакомьтесь со следующими указаниями.

  • В разделе vars замените заполнитель {{ admin_password }} собственным паролем.

  • Чтобы использовать тип соединения SSH с паролями, установите программу sshpass.

    Ubuntu:

    apt-get install sshpass
    
  • В некоторых средах может произойти ошибка использования пароля SSH вместо ключа. Если вы видите эту ошибку, можно отключить проверку ключа узла, добавив следующую строку в файл /etc/ansible/ansible.cfg или ~/.ansible.cfg.

    [defaults]
    host_key_checking = False
    

Выполните следующую команду, чтобы запустить сборник схем:

ansible-playbook vmss-setup-deploy.yml

Результат выполнения команды ansible-playbook указывает, что пример приложения Java установлен в группу узлов масштабируемого набора.

PLAY [localhost]

TASK [Gathering Facts]
ok: [localhost]

TASK [Get facts for all Public IPs within a resource groups]
ok: [localhost]

TASK [Get loadbalancer info]
ok: [localhost]

TASK [Add all hosts]
changed: [localhost] ...

PLAY [Install JRE on scale set]

TASK [Gathering Facts]
ok: [40.114.30.145_50000]
ok: [40.114.30.145_50003]

TASK [Copy app to Azure VM]
changed: [40.114.30.145_50003]
changed: [40.114.30.145_50000]

TASK [Start the application]
changed: [40.114.30.145_50000]
changed: [40.114.30.145_50003]

PLAY RECAP
40.114.30.145_50000        : ok=4    changed=3    unreachable=0    failed=0
40.114.30.145_50003        : ok=4    changed=3    unreachable=0    failed=0
localhost                  : ok=4    changed=1    unreachable=0    failed=0

Проверка результатов

Проверьте результаты своей работы, перейдя по URL-адресу подсистемы балансировки нагрузки для масштабируемого набора.

Приложение Java работает в масштабируемом наборе в Azure.

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