教學課程:使用 Ansible 在 Azure 中設定虛擬機擴展集
重要
需要 Ansible 2.9 (或更新版本)才能執行本文中的範例劇本。
Azure 虛擬機擴展集 是一項 Azure 功能,可讓您設定一組相同的負載平衡 VM。 擴展集不需要額外的成本,而且是從虛擬機建置的。 您只需支付基礎計算資源的費用,例如 VM 實例、負載平衡器或受控磁碟記憶體。 使用擴展集,可提供管理和自動化層級,以執行和調整您的應用程式。 您可以改為手動建立和管理個別 VM。 不過,使用擴展集有兩個主要優點。 它們內建於 Azure 中,並會自動調整虛擬機以符合應用程式需求。
在本文中,您將學會如何:
- 設定 VM 的資源
- 設定擴展集
- 藉由增加擴展集的 VM 實例來調整擴展集
必要條件
- Azure 訂用帳戶:如果您沒有 Azure 訂用帳戶,請在開始前建立免費帳戶。
安裝 Ansible:執行下列其中一個選項:
- 在 Linux 虛擬機上安裝及 設定 Ansible
- 設定 Azure Cloud Shell ,如果您無法存取 Linux 虛擬機, 請使用 Ansible 建立虛擬機。
設定擴展集
本節中的劇本程式代碼會定義下列資源:
- 將部署所有資源的資源群組 。
- 10.0.0.0/16 位址空間中的虛擬網路
- 虛擬網路內的子網
- 可讓您透過因特網存取資源的公用IP位址
- 控制擴展集進出網路流量的網路安全組
- 使用 負載平衡器規則將流量分散到一組已定義的 VM 的負載平衡器
- 使用所有已建立資源的虛擬機擴展集
有兩種方式可取得範例劇本:
下載劇本 ,並將檔案儲存為
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 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
檢視 VM 實例數目
設定的 擴展集 目前有兩個實例。 下列步驟可用來確認該值:
登入 Azure 入口網站。
流覽至您設定的擴展集。
您會看到延伸集名稱,其中包含括弧中的實體數目:
Standard_DS1_v2 (2 instances)
您也可以執行下列命令,以驗證 Azure Cloud Shell 的實體數目:
az vmss show -n myScaleSet -g myResourceGroup --query '{"capacity":sku.capacity}'
在 Cloud Shell 中執行 Azure CLI 命令的結果顯示存在兩個實例:
{ "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 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 中執行 Azure CLI 命令的結果顯示,現在有三個實例存在:
{ "capacity": 3, }