Руководство. развертыванию приложений в масштабируемых наборах виртуальных машин в Azure c помощью Ansible
Внимание
Для выполнения примеров сборников схем в этой статье требуется Ansible 2.7 (или более поздней версии).
Масштабируемые наборы виртуальных машин Azure — это решение Azure, которое позволяет настраивать группы идентичных виртуальных машин с подсистемой балансировки нагрузки. За масштабирование наборов, созданных на основе виртуальных машин, плата не взимается. Вы платите только за такие базовые вычислительные ресурсы, как экземпляры виртуальных машин, подсистему балансировки нагрузки или хранилище управляемых дисков. При использовании масштабируемых наборов для запуска и масштабирования приложений предоставляются уровни управления и автоматизации. Можно вместо этого вручную создавать и администрировать отдельные виртуальные машины. При этом использование масштабируемых наборов связано с двумя ключевыми преимуществами. Они полностью поддерживаются в Azure, позволяя выполнять автоматическое масштабирование виртуальных машин в соответствии с потребностями приложения.
Вы узнаете, как выполнять следующие задачи:
- Получение сведений об узле для группы виртуальных машин Azure
- Клонирование и сборка примера приложения
- Установка JRE (среды выполнения Java) в масштабируемом наборе
- Развертывание приложения Java в масштабируемом наборе
Необходимые компоненты
- Подписка Azure. Если у вас нет подписки Azure, создайте бесплатную учетную запись, прежде чем начинать работу.
Установите Ansible: выполните одно из указанных ниже действий.
- Установите и настройте Ansible на виртуальной машине Linux.
- Настройте Azure Cloud Shell и, если у вас нет доступа к виртуальной машине Linux, вы можете создать ее с помощью Ansible.
- Масштабируемый набор виртуальных машин: Если у вас еще нет масштабируемого набора, вы можете настроить масштабируемый набор с помощью Ansible.
- 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-адресу подсистемы балансировки нагрузки для масштабируемого набора.