Automatizacija: Skirtumas tarp puslapio versijų

Iš LITNET WIKI.
Peršokti į: navigacija, paiešką
S
S
 
1 eilutė: 1 eilutė:
 
[[Kategorija:Debesija]]
 
[[Kategorija:Debesija]]
Darbą su virtualiomis mašinomis galima automatizuoti. Čia pateikiami naudojimo atvejai ir jų įgyvendinimo pavyzdžiai. Galima naudoti pavyzdžius, pakeičiant kintamuosius, arba remtis jais rašant naujus skriptus.
+
Darbą su virtualiomis mašinomis galima automatizuoti naudojant '''Ansible'''. Čia pateikiami naudojimo atvejai ir jų įgyvendinimo pavyzdžiai. Galima naudoti pavyzdžius, pakeičiant kintamuosius, arba remtis jais rašant naujus skriptus.
 
__TOC__
 
__TOC__
 +
 
== Pasiruošimas ==
 
== Pasiruošimas ==
 
Informaciją apie virtualias mašinas Ansible iš OpenStack gauna per skriptą [https://gitlab.litnet.lt/automation-examples/ansible/-/blob/master/playbooks/openstack_inventory.py openstack_inventory.py]. Jį reikia atsisiųsti.
 
Informaciją apie virtualias mašinas Ansible iš OpenStack gauna per skriptą [https://gitlab.litnet.lt/automation-examples/ansible/-/blob/master/playbooks/openstack_inventory.py openstack_inventory.py]. Jį reikia atsisiųsti.

Dabartinė 11:28, 7 spalio 2020 versija

Darbą su virtualiomis mašinomis galima automatizuoti naudojant Ansible. Čia pateikiami naudojimo atvejai ir jų įgyvendinimo pavyzdžiai. Galima naudoti pavyzdžius, pakeičiant kintamuosius, arba remtis jais rašant naujus skriptus.

Pasiruošimas

Informaciją apie virtualias mašinas Ansible iš OpenStack gauna per skriptą openstack_inventory.py. Jį reikia atsisiųsti.

Darbui su OpenStack reikės autentifikuotis - galima importuoti aplinkos kintamuosius kaip dirbant su CLI, tačiau patogesnė alternatyva į ta patį katalogą patalpinti failą clouds.yaml:

---
clouds:
  Example_project:
    auth:
      auth_url: https://keystone.cloud.litnet.lt:5000/v3
      username: example_project_username
      password: example_project_password
      project_id: example_project_id
      project_name: Example_project
      user_domain_name: "ktu.lt"
    region_name: KTU
    interface: "public"
    identity_api_version: 3

Svarbu: šį failą galima atsiųsti prisijungus prie OpenStack, tačiau reikės pagal pavyzdį pakeisti user_domain_name bei pridėti įraša password su savo slaptažodžiu, gautu iš administratoriaus.

Laikyti slaptažodį teksto faile yra pavojinga. Užtikrinkite, kad niekas kitas jo nepasieks.

Toliau reikia į ssh-agent pridėti visus ssh raktus, kurių reikės prisijungimui prie nuotolinių serverių:

eval "$(ssh-agent -s)"
ssh-add ~/manoraktas1.key
ssh-add /tmp/key

Nurodant savo raktą(-us). Daugiau informacijos čia. Dabar jau galima kviesti komandas.

Sukurti SSH prisijungimus naujam naudotojui

Atvejis: reikia naujam asmeniui prie nurodytų VM sukurti prisijungimus. Pirmiausia sukuriamas ansible playbook užduočių sąrašas, failas users.yml:

---
- hosts: all #vm ip adresai
  remote_user: ubuntu #priklauso nuo OS
  become: true #reikalinga root teisems
  tasks: #uzduociu sarasas
   - name: Sukurti (trukstama) grupe 'vardas' #uzduoties pavadinimas
     group:
       name: vardas #cia grupes vardas
       state: present #uztikrinti, kad egzistuoja

   - name: Sukurti (trukstama) naudotoja #nurodomas ir slaptazodis
     user:
       name: vardas #cia vartotojo vardas
       shell: '/bin/bash'
       password: "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" #sifruotas slaptazodis
       groups: "vardas,sudo" #grupes
       append: true
       state: present

   - name: Sukurti '.ssh' kataloga naudotojui 'vardas'
     file:
       path: /home/vardas/.ssh #vieta
       state: directory #katalogas
       owner: vardas
       group: vardas

   - name: Nurodyti leidziamus prisijungimo raktus
     copy:
       src: authorized_keys #failo vieta vietineje masinoje
       dest: /home/vardas/.ssh/authorized_keys #failo vieta nuotolineje masinoje
       owner: vardas
       group: vardas
       mode: 0640 #failo teises

Playbook veikimas:

  • sukuria naują grupę
  • sukuria naują vartotoją, priskiria grupes ir nurodo slaptažodį
  • sukiria .ssh katalogą
  • į sukurtą katalogą nukopijuoja pateiktą failą authorized_keys


Paleidimas:

ansible-playbook users.yml -i openstack_inventory.py

Paleisti du LAMP stekus

Atvejis: reikia dviejų linux VM su Apache2, MySQL ir PHP.

Svarbu: Ansible nežino naujai sukurtų VM IP adresų. Kad juos pasiimti iš OpenStack, reikia pridėti meta: refresh_inventory po sukūrimo. Visi aktualūs kintamieji yra vars segmentuose (jų yra du). servers turi sutapti abiejuose segmentuose. Failas 2lamps.yml:

- name: Paleisti du Ubuntu serverius
  hosts: localhost
  gather_facts: false #pradziai nereikia jokios informacijos is OpenStack
  vars: #pasiraktojantys kintamieji iskeliami patogumui
    cloud: openstack #projekto informacija is clouds.yaml
    public_key: /home/ubuntu/.ssh/id_rsa.pub #viesas raktas ssh serveriams
    public_key_name: lampkey #raktu poros pavadinimas
    pub_network: vlan229 #isorinis OpenStack tinklas; galima keisti i savo vidini, taciau nepriskyrus floating ip, ansible ju nepasieks
    sec_grp: lamp
    flavor: l1.2xsmall 
    image: Ubuntu-19.10
    servers: ['primary-LAMP', 'fallback-LAMP'] #vm vardai
  tasks:
    - name: Importuoti SSH raktu pora
      os_keypair:
        cloud: "{{ cloud }}"  
        state: present
        name: "{{ public_key_name }}"
        public_key_file: "{{ public_key }}"

    - name: Sukurti ugniasienes taisykliu grupe
      os_security_group:
         cloud: "{{ cloud }}"
         state: present
         name: "{{ sec_grp }}"
         description: Lamp steko taisykles SSH ir HTTP

    - name: Sukurti grupes SSH taisykle
      os_security_group_rule:
        cloud: "{{ cloud }}"
        state: present
        security_group: "{{ sec_grp }}"
        protocol: tcp
        port_range_min: 22
        port_range_max: 22
        remote_ip_prefix: 0.0.0.0/0 #tai nera saugu

    - name: Sukurti grupes HTTP taisykle
      os_security_group_rule:
        cloud: "{{ cloud }}"
        state: present
        security_group: "{{ sec_grp }}"
        protocol: tcp
        port_range_min: 80
        port_range_max: 80
        remote_ip_prefix: 0.0.0.0/0 

    - name: Sukurti dvi VM
      os_server:
        name: "{{ item }}"        
        cloud: "{{ cloud }}"
        state: present
        availability_zone: nova 
        key_name: "{{ public_key_name }}"
        flavor: "{{ flavor }}"
        timeout: 300
        image: "{{ image }}"
        security_groups: "{{ sec_grp }}"
        nics:
          - net-name: "{{ pub_network }}" 
      with_items: "{{ servers }}"

    - meta: refresh_inventory

- name: Prisijungti prie vm, paruosti darbui
  hosts: "{{ servers }}"
  remote_user: ubuntu #priklauso nuo image
  become: true #sudo
  vars:
    servers: ['primary-LAMP', 'fallback-LAMP'] #vm vardai
    cloud: "{{ cloud }}"
    ansible_ssh_private_key_file: home/ubuntu/.ssh/id_rsa #privatus raktas ssh prisijungimui
  tasks:
    - name: Laukti 300 sekundziu arba kol ssh portas pranes "OpenSSH"
      wait_for:
        port: 22
        search_regex: OpenSSH
        delay: 10

    - name: Atnaujinti apt podeli
      apt:
        update_cache: yes

    - name: Instaliuoti Apache
      apt:
        name: apache2
        state: present

    - name: Spausdinti VM pavadinima puslapyje
      shell: "echo 'Sveiki, as <b> {{ ansible_fqdn }}' > /var/www/html/index.html" 
      #pagrindinis puslapis rodys vidini openstack vm fqdn - pavadinimas.local.litnet.lt
    
    - name: Instaliuoti MySQL
      apt:
        name: mariadb-server
        state: present

    - name: Instaliuoti PHP
      apt:
        name: php,libapache2-mod-php,php-mysql
        state: present

Playbook veikimas:

  • į OpenStack įkeliamas viešas raktas (os_keypair)
  • sukuriama ugniasienės taisyklių grupė (os_security-group)
  • ji papildoma taisyklėmis iš viso interneto praleisti įeinantį srautą prievadais 80 ir 22 (os_security_group_rule)
  • sukuria dvi vm nurodytais pavadinimais (os_server)
  • openstack_inventory.py susirenka sukurtų mašinų IP adresus (meta: refresh_inventory)
  • palaukia, kol mašinos sukuriamos ir startuoja ssh servisas (wait_for)
  • atnaujina apt podėlį (apt: update_cache: yes)
  • instaliuoja apache2 taip pat išspausdina pilną vm vardą į pagrindinį puslapį (shell)
  • instaliuoja mariadb ir php

Paleidimas:

ansible-playbook 2lamps.yml -i openstack_inventory.py