共用方式為


教學課程:使用 Ansible 在 Azure 中設定虛擬機器擴展集

這很重要

本文中的範例腳本需要 Ansible 2.9(或更新版本)執行。

Azure 虛擬機器擴展集 是一項 Azure 功能,可讓您設定一組相同的負載平衡 VM。 擴展集不需要額外的成本,它們是由虛擬機器建置而成的。 您只需支付基礎計算資源的費用,例如 VM 執行個體、負載平衡器或受控磁碟儲存體。 使用擴展集時,會提供管理和自動化層來執行和調整您的應用程式。 您可以改為手動建立和管理個別 VM。 不過,使用擴展集有兩個主要優點。 它們內建於 Azure 中,並自動調整您的虛擬機器以符合應用程式需求。

在本文中,您將學會如何:

  • 設定 VM 的資源
  • 設定規模集
  • 藉由增加 VM 執行個體來調整擴展集的大小

先決條件

  • Azure 訂用帳戶:如果您沒有 Azure 訂用帳戶,請在開始前建立免費帳戶

設定規模設定

本節中的教戰手冊程式碼會定義下列資源:

  • 所有資源將會被部署到的資源群組
  • 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 執行指令集

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 執行個體數目

已設定的擴展組當前有兩個實例。 下列步驟可用來確認該值:

  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 中執行 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 執行指令集

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 中執行 Azure CLI 命令的結果顯示現在存在三個實例:

    {
      "capacity": 3,
    }
    

後續步驟