Share via


자습서: Ansible을 사용하여 Azure에서 가상 머신 확장 집합 구성

Important

이 문서의 샘플 플레이북을 실행하려면 Ansible 2.9 이상이 필요합니다.

Azure 가상 머신 확장 집합 은 부하가 분산된 동일한 VM 그룹을 구성할 수 있는 Azure 기능입니다. 확장 집합에 대한 추가 비용은 없으며 가상 머신에서 작성됩니다. VM 인스턴스, 부하 분산 장치 또는 Managed Disk Storage와 같은 기본 컴퓨팅 리소스에 대해서만 비용을 지불합니다. 확장 집합을 사용하면 애플리케이션을 실행하고 크기를 조정할 수 있는 관리 및 자동화 계층이 제공됩니다. 개별 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 Portal에 로그인합니다.

  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,
    }
    

확장 집합 규모 확장

이 섹션의 플레이북 코드는 확장 집합에 대한 정보를 검색하고 용량을 2에서 3으로 변경합니다.

다음과 같은 두 가지 방법으로 샘플 플레이북을 가져올 수 있습니다.

  • 플레이북 을 다운로드하고 저장합니다 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 Portal을 통해 작업 결과를 확인합니다.

  1. Azure Portal에 로그인합니다.

  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,
    }
    

다음 단계