重要
需要 Ansible 2.7(或更高版本)才能运行本文中的示例剧本。
Azure 虚拟机规模集 是一项 Azure 功能,可用于配置一组相同的负载均衡 VM。 规模集无需额外付费,它们是从虚拟机生成的。 只需为基础计算资源(例如 VM 实例、负载均衡器或托管磁盘存储)付费。 使用规模集时,提供管理和自动化层,以支持应用程序的运行和扩展。 可以改为手动创建和管理单个 VM。 但是,使用规模集有两个关键优势。 它们内置于 Azure 中,可自动缩放虚拟机以满足应用程序需求。
在这篇文章中,你将学会如何:
- 检索一组 Azure VM 的主机信息
- 克隆并生成示例应用
- 在虚拟机规模集上安装 JRE(Java 运行时环境)
- 将 Java 应用程序部署到虚拟机规模集
先决条件
- Azure 订阅:如果没有 Azure 订阅,请在开始之前创建 一个免费帐户 。
安装 Ansible:执行以下选项之一:
- 在 Linux 虚拟机上安装和 配置 Ansible
- 配置 Azure Cloud Shell ,如果无权访问 Linux 虚拟机, 请使用 Ansible 创建虚拟机。
- 虚拟机规模集:如果还没有规模集,可以使用 Ansible 配置规模集。
- git - git 用于下载本教程中使用的 Java 示例。
- Java SE 开发工具包 (JDK) - JDK 用于生成示例 Java 项目。
- Apache Maven - Apache Maven 用于生成示例 Java 项目。
获取主机信息
本部分中的 playbook 代码检索一组虚拟机的主机信息。 该代码获取指定资源组中的公共 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 }}"
准备部署应用程序
本部分中的 playbook 代码用于 git 从 GitHub 克隆 Java 示例项目并生成项目。
将以下 playbook 保存为 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
运行 playbook 后,会看到类似于以下结果的输出:
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
将应用程序部署到虚拟机规模集
本部分中的剧本代码使用于:
- 在名为
saclesethosts的主机组上安装 JRE - 将 Java 应用程序部署到名为
saclesethosts的主机组
可通过两种方法获取示例剧本:
下载 playbook 并将其保存到
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
在运行 playbook 之前,请参阅以下注意事项:
在本
vars部分中,将{{ admin_password }}占位符替换为你自己的密码。若要将 ssh 连接类型与密码配合使用,请安装 sshpass 程序:
Ubuntu:
apt-get install sshpass在某些环境中,你可能会看到有关使用 SSH 密码而不是密钥的错误。 如果收到该错误,可以通过向
/etc/ansible/ansible.cfg或~/.ansible.cfg添加以下行来禁用主机密钥检查:[defaults] host_key_checking = False
可以使用下列命令来运行 playbook:
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,验证您的工作结果。