Aracılığıyla paylaş


Öğretici: Ansible kullanarak Azure'da sanal makine ölçek kümelerine uygulama dağıtma

Önemli

Bu makaledeki örnek playbook'ları çalıştırmak için Ansible 2.7 (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:

  • Bir grup Azure VM'sinin konak bilgilerini alma
  • Örnek uygulamayı kopyalama ve derleme
  • JRE'yi (Java Çalışma Zamanı Ortamı) bir ölçek kümesine yükleme
  • Java uygulamasını ölçek kümesine dağıtma

Önkoşullar

  • Azure aboneliği: Azure aboneliğiniz yoksa başlamadan önce ücretsiz bir hesap oluşturun.
  • Git - Bu öğreticide Java örneği indirmek için git kullanılmaktadır.
  • Java SE Development Kit (JDK) - Örnek Java projesini derlemek için JDK kullanılır.
  • Apache Maven - Apache Maven , örnek Java projesini derlemek için kullanılır.

Ana bilgisayar bilgilerini alma

Bu bölümdeki playbook kodu, bir grup sanal makine için konak bilgilerini alır. Kod, belirtilen kaynak grubu içindeki genel IP adreslerini ve yük dengeleyiciyi alır ve envanterde adlı scalesethosts bir konak grubu oluşturur.

Aşağıdaki örnek playbook'u get-hosts-tasks.yml olarak kaydedin:

- name: Get facts for all Public IPs within a resource groups
  azure_rm_publicipaddress_info:
    resource_group: "{{ resource_group }}"
  register: output_ip_address

- name: Get loadbalancer info
  azure_rm_loadbalancer_info:
    resource_group: "{{ resource_group }}"
    name: "{{ loadbalancer_name }}"
  register: output

- name: Add all hosts
  add_host:
    groups: scalesethosts
    hostname: "{{ output_ip_address.publicipaddresses[0].ip_address }}_{{ item.properties.frontendPort }}"
    ansible_host: "{{ output_ip_address.publicipaddresses[0].ip_address }}"
    ansible_port: "{{ item.properties.frontendPort }}"
    ansible_ssh_user: "{{ admin_username }}"
    ansible_ssh_pass: "{{ admin_password }}"
  with_items:
    - "{{ output.ansible_info.azure_loadbalancers[0].properties.inboundNatRules }}"

Uygulamaları dağıtım için hazırlama

Bu bölümdeki playbook kodu, GitHub'dan bir Java örnek projesini kopyalamak için kullanır git ve projeyi oluşturur.

Aşağıdaki playbook'u app.yml olarak kaydedin:

- hosts: localhost
  vars:
    repo_url: https://github.com/spring-guides/gs-spring-boot.git
    workspace: ~/src/helloworld

  tasks:
  - name: Git Clone sample app
    git:
      repo: "{{ repo_url }}"
      dest: "{{ workspace }}"

  - name: Build sample app
    shell: mvn package chdir="{{ workspace }}/complete"

Örnek Ansible playbook'u aşağıdaki komut ile çalıştırın:

ansible-playbook app.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 [Git Clone sample app] 
changed: [localhost]

TASK [Build sample app] 
changed: [localhost]

PLAY RECAP 
localhost                  : ok=3    changed=2    unreachable=0    failed=0

Uygulamayı ölçek kümesine dağıtma

Bu bölümdeki playbook kodu şunları yapmak için kullanılır:

  • JRE'yi adlı bir konak grubuna yükleyin saclesethosts
  • Java uygulamasını adlı bir konak grubuna dağıtma saclesethosts

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

  • Playbook'u indirin ve öğesine vmss-setup-deploy.ymlkaydedin.

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

- hosts: localhost
  vars:
    resource_group: myResourceGroup
    scaleset_name: myScaleSet
    loadbalancer_name: myScaleSetLb
    admin_username: azureuser
    admin_password: "{{ admin_password }}"
  tasks:
  - include: get-hosts-tasks.yml

- name: Install JRE on a scale set
  hosts: scalesethosts
  become: yes
  vars:
    workspace: ~/src/helloworld
    admin_username: azureuser

  tasks:
  - name: Install JRE
    apt:
      name: default-jre
      update_cache: yes

  - name: Copy app to Azure VM
    copy:
      src: "{{ workspace }}/complete/target/gs-spring-boot-0.1.0.jar"
      dest: "/home/{{ admin_username }}/helloworld.jar"
      force: yes
      mode: 0755

  - name: Start the application
    shell: java -jar "/home/{{ admin_username }}/helloworld.jar" >/dev/null 2>&1 &
    async: 5000
    poll: 0

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.

  • Ssh bağlantı türünü parolalarla kullanmak için sshpass programını yükleyin:

    Ubuntu:

    apt-get install sshpass
    
  • Bazı ortamlarda anahtar yerine SSH parolası kullanmayla ilgili bir hata görebilirsiniz. Bu hatayı alırsanız veya öğesine aşağıdaki satırı /etc/ansible/ansible.cfg ~/.ansible.cfgekleyerek konak anahtarı denetimini devre dışı bırakabilirsiniz:

    [defaults]
    host_key_checking = False
    

Playbook'u aşağıdaki komut ile çalıştırın:

ansible-playbook vmss-setup-deploy.yml

ansible-playbook komutunu çalıştırma çıkışı, örnek Java uygulamasının ölçek kümesinin konak grubuna yüklendiğini gösterir:

PLAY [localhost]

TASK [Gathering Facts]
ok: [localhost]

TASK [Get facts for all Public IPs within a resource groups]
ok: [localhost]

TASK [Get loadbalancer info]
ok: [localhost]

TASK [Add all hosts]
changed: [localhost] ...

PLAY [Install JRE on scale set]

TASK [Gathering Facts]
ok: [40.114.30.145_50000]
ok: [40.114.30.145_50003]

TASK [Copy app to Azure VM]
changed: [40.114.30.145_50003]
changed: [40.114.30.145_50000]

TASK [Start the application]
changed: [40.114.30.145_50000]
changed: [40.114.30.145_50003]

PLAY RECAP
40.114.30.145_50000        : ok=4    changed=3    unreachable=0    failed=0
40.114.30.145_50003        : ok=4    changed=3    unreachable=0    failed=0
localhost                  : ok=4    changed=1    unreachable=0    failed=0

Sonuçları doğrulama

Ölçek kümenizin yük dengeleyicinin URL'sine giderek çalışmanızın sonuçlarını doğrulayın:

Azure'da ölçek kümesinde çalışan Java uygulaması.

Sonraki adımlar