자습서: Ansible을 사용하여 Azure에서 가상 머신 확장 집합 구성
Important
이 문서의 샘플 플레이북을 실행하려면 Ansible 2.9 이상이 필요합니다.
Azure 가상 머신 확장 집합 은 부하가 분산된 동일한 VM 그룹을 구성할 수 있는 Azure 기능입니다. 확장 집합에 대한 추가 비용은 없으며 가상 머신에서 작성됩니다. VM 인스턴스, 부하 분산 장치 또는 Managed Disk Storage와 같은 기본 컴퓨팅 리소스에 대해서만 비용을 지불합니다. 확장 집합을 사용하면 애플리케이션을 실행하고 크기를 조정할 수 있는 관리 및 자동화 계층이 제공됩니다. 개별 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을 사용하여 플레이북 실행
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 Portal에 로그인합니다.
구성한 확장 집합으로 이동합니다.
괄호로 묶은 인스턴스 수가 포함된 확장 집합 이름(
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, }
확장 집합 규모 확장
이 섹션의 플레이북 코드는 확장 집합에 대한 정보를 검색하고 용량을 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을 통해 작업 결과를 확인합니다.
Azure Portal에 로그인합니다.
구성한 확장 집합으로 이동합니다.
괄호로 묶은 인스턴스 수가 포함된 확장 집합 이름(
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, }