Задание:

1. На машине ControlVM создайте скрипт /home/altlinux/bin/DeployApp.sh.

  • 1. Скрипт должен выполняться из любой директории без явного указания пути к исполняемому файлу
  • 3. Команда DeployApp.sh должна запускать средства автоматизации для настройки операционных систем.
    • 1. Разверните web-приложение App1 из репозитория Docker на виртуальных машинах Web1 и Web2.
    • 2. Обеспечьте балансировку нагрузки между Web1 и Web2.
    • 3. Обеспечьте внешний доступ к web-приложению по протоколу https.
    • 4. При обращении по протоколу http должно выполняться автоматическое перенаправления на протокол https.
    • 5. Обеспечивать доверие сертификату не требуется.

Выполнение:

ControlVM:

  • Установим ansible:
sudo apt-get install -y ansible
  • Создадим директорию под ansible:
mkdir ansible
  • Правим основной файл terraform по пути /home/altlinux/bin/main.tf и добавляем следующую информацию:
vim ~/bin/main.tf
    • данный блок будет на основе шаблона автоматически после разрёртывания инфраструктуры с помощью cloudinit.sh - будет создавать инвентарный файл для ansible:
data "template_file" "inventory" {
    template = file("./_templates/inventory.tpl")
  
    vars = {
        user = "altlinux"
        web1 = join("", [yandex_compute_instance.web1.name, " ansible_host=", yandex_compute_instance.web1.network_interface.0.nat_ip_address])
        web2 = join("", [yandex_compute_instance.web2.name, " ansible_host=", yandex_compute_instance.web2.network_interface.0.nat_ip_address])
    }
}

resource "local_file" "save_inventory" {
   content  = data.template_file.inventory.rendered
   filename = "/home/altlinux/ansible/inventory"
}
  • Создаём директорию для шаблона:
mkdir ~/bin/_templates/
  • Теперь создаём сам шаблон для инвентарного файла:
vim ~/bin/_templates/inventory.tpl
    • содержимое:
${web1}
${web2}

[all:vars]
ansible_user = ${user}
ansible_ssh_extra_args = '-o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no'
ansible_python_interpreter = /usr/bin/python3
  • Пишем playbook-сценарий, который будет развёртывать и настроивать web1 и web2:
vim ~/ansible/playbook.yml
    • содержимое:
---
- hosts: all
  remote_user: altlinux
  become: true

  tasks:
    - name: Install docker
      apt_rpm:
        name:
          - docker-ce
          - python3-module-pip
        state: present
        update_cache: true
      ignore_errors: true

    - name: Started and enabled docker
      systemd:
        name: docker
        state: started
        enabled: true

    - name: Install docker-py
      command:
        cmd: pip3 install docker-py

    - name: Start a container App1
      docker_container:
        name: app1
        hostname: "{{ ansible_hostname }}"
        image: newerr0r/app1:1.0
        ports:
          - "80:80"
  • Создаём скрипт по пути /home/altlinux/bin/DeployApp.sh:
vim /home/altlinux/bin/DeployApp.sh
    • содержимое:
#!/bin/bash

cd /home/altlinux/ansible
ansible-playbook -i inventory playbook.yml
  • Задаём права на исполнение:
chmod +x /home/altlinux/bin/DeployApp.sh
  • Запускаем скрипт:
DeployApp.sh
    • результат:

  • Проверяем:
    • из файла /home/altlinux/lb.ip берём внешний адрес Балансировщика и проверяем в браузере доступ:

    • доступ:

    • при обновлении страницы видна пработа балансировщика:

Последнее изменение: пятница, 16 февраля 2024, 13:11