Öğretici: Ansible kullanarak Azure'da sanal makine ölçek kümelerini yapılandırma

Önemli

Bu makaledeki örnek playbook'ları çalıştırmak için Ansible 2.9 (veya üzeri) gereklidir.

Azure sanal makine ölçek kümeleri , aynı, yük dengeli VM'lerden oluşan bir grup yapılandırmanıza olanak tanıyan bir Azure özelliğidir. Kümeleri ölçeklendirmek için ek maliyet yoktur ve bunlar sanal makinelerden oluşturulur. Yalnızca VM örnekleri, yük dengeleyiciler veya Yönetilen Disk depolama alanı gibi temel işlem kaynakları için ödeme yapın. Ölçek kümeleri ile, uygulamalarınızı çalıştırmak ve ölçeklendirmek için yönetim ve otomasyon katmanları sağlanır. Bunun yerine tek tek VM'leri el ile oluşturabilir ve yönetebilirsiniz. Ancak ölçek kümelerini kullanmanın iki temel avantajı vardır. Azure'da yerleşik olarak bulunurlar ve sanal makinelerinizi uygulama gereksinimlerini karşılayacak şekilde otomatik olarak ölçeklendirirler.

Bu makalede şunları öğreneceksiniz:

  • VM için kaynakları yapılandırma
  • Ölçek kümesi yapılandırma
  • Ölçek kümesinin VM örneklerini artırarak ölçek kümesini ölçeklendirme

Önkoşullar

  • Azure aboneliği: Azure aboneliğiniz yoksa başlamadan önce ücretsiz bir hesap oluşturun.

Ölçek kümesi yapılandırma

Bu bölümdeki playbook kodu aşağıdaki kaynakları tanımlar:

  • Tüm kaynaklarınızın dağıtılacağı kaynak grubu .
  • 10.0.0.0/16 adres alanında sanal ağ
  • Sanal ağ içinde alt ağ
  • İnternet üzerindeki kaynaklara erişmenizi sağlayan genel IP adresi
  • Ölçek kümenize gelen ve giden ağ trafiğinin akışını denetleen ağ güvenlik grubu
  • Yük dengeleyici kurallarını kullanarak trafiği tanımlı bir VM'ler kümesi arasında dağıtan yük dengeleyici
  • Oluşturulan tüm kaynakları kullanan sanal makine ölçek kümesi

Örnek playbook'u almanın iki yolu vardır:

  • Playbook'u indirin ve dosyayı olarak vmss-create.ymlkaydedin.

  • vmss-create.yml adlı yeni bir dosya oluşturun. Yeni dosyaya aşağıdaki kodu ekleyin:

- 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

Playbook'u çalıştırmadan önce aşağıdaki notlara bakın:

  • vars bölümünde yer tutucuyu {{ admin_password }} kendi parolanızla değiştirin.

Ansible-playbook kullanarak playbook'u çalıştırma

ansible-playbook vmss-create.yml

Playbook'u çalıştırdıktan sonra aşağıdaki sonuçlara benzer bir çıktı görürsünüz:

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 örneği sayısını görüntüleme

Yapılandırılan ölçek kümesinin şu anda iki örneği vardır. Bu değeri onaylamak için aşağıdaki adımlar kullanılır:

  1. Azure Portal oturum açın.

  2. Yapılandırdığınız ölçek kümesine gidin.

  3. Ölçek kümesi adını parantez içindeki örnek sayısıyla görürsünüz: Standard_DS1_v2 (2 instances)

  4. Aşağıdaki komutu çalıştırarak Azure Cloud Shell ile örnek sayısını da doğrulayabilirsiniz:

    az vmss show -n myScaleSet -g myResourceGroup --query '{"capacity":sku.capacity}' 
    

    Cloud Shell'de Azure CLI komutunu çalıştırmanın sonuçları iki örneğin mevcut olduğunu gösterir:

    {
      "capacity": 2,
    }
    

Ölçek kümesinin ölçeğini genişletme

Bu bölümdeki playbook kodu ölçek kümesi hakkındaki bilgileri alır ve kapasitesini ikiden üçe değiştirir.

Örnek playbook'u almanın iki yolu vardır:

  • Playbook'u indirin ve öğesine vmss-scale-out.ymlkaydedin.

  • vmss-scale-out.yml adlı yeni bir dosya oluşturun. Yeni dosyaya aşağıdaki kodu ekleyin:

---
- 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 kullanarak playbook'u çalıştırma

ansible-playbook vmss-scale-out.yml

Playbook'u çalıştırdıktan sonra aşağıdaki sonuçlara benzer bir çıktı görürsünüz:

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

Sonuçları doğrulama

Azure portalı aracılığıyla çalışmanızın sonuçlarını doğrulayın:

  1. Azure Portal oturum açın.

  2. Yapılandırdığınız ölçek kümesine gidin.

  3. Ölçek kümesi adını parantez içindeki örnek sayısıyla görürsünüz: Standard_DS1_v2 (3 instances)

  4. Değişikliği Azure Cloud Shell ile aşağıdaki komutu çalıştırarak da doğrulayabilirsiniz:

    az vmss show -n myScaleSet -g myResourceGroup --query '{"capacity":sku.capacity}' 
    

    Cloud Shell'de Azure CLI komutunu çalıştırmanın sonuçları üç örneğin mevcut olduğunu gösterir:

    {
      "capacity": 3,
    }
    

Sonraki adımlar