22
Devops.Events Вебинар на тему: Знакомство с Ansible. Популярные практики и ошибки Спикер: Павел Егоров - DevOps инженер в DataRobot

Вебинар на тему знакомство с Ansible. популярные практики и ошибки

Embed Size (px)

Citation preview

Page 1: Вебинар на тему  знакомство с Ansible. популярные практики и ошибки

Devops.Events

Вебинар на тему:Знакомство с Ansible.

Популярные практики и ошибки

Спикер: Павел Егоров - DevOps инженер в DataRobot

Page 2: Вебинар на тему  знакомство с Ansible. популярные практики и ошибки

Кто я?

Павел Егоров

• DevOps инженер• приверженец автоматизации• люблю Ansible• люблю когда работа делает

себя сама

Devops.Events

Page 3: Вебинар на тему  знакомство с Ansible. популярные практики и ошибки

Плюсы и минусы Ansible

Плюсы:• простота• SSH• модульность• agentless• open source

Минусы:• agentless• ручная работа• нет контроля

Devops.Events

Page 4: Вебинар на тему  знакомство с Ansible. популярные практики и ошибки

Из чего состоит Ansible?

• плейбуки• роли• инвентари• групповые переменные• переменные хостов

Devops.Events

Page 5: Вебинар на тему  знакомство с Ansible. популярные практики и ошибки

Playbook

---

- name: "Install LAMP server" hosts: lamp user: ubuntu gather_facts: true vars_files: - ../vars/lamp.yml roles: - role: apache tags: webserver

- role: mysql tags: database

- role: php tags: php

Devops.Events

Page 6: Вебинар на тему  знакомство с Ansible. популярные практики и ошибки

Role

• defaults• handlers• meta• tasks• templates• files

Devops.Events

Page 7: Вебинар на тему  знакомство с Ansible. популярные практики и ошибки

Role: defaults

Хранит переменные по-умолчанию

---

apache_log_path: /mnt/logs/apacheapache_data_path: /mnt/apache/dataapache_port: 8080

Devops.Events

Page 8: Вебинар на тему  знакомство с Ansible. популярные практики и ошибки

Role: handlers

Хранит обработчики

---

- name: "Restart Apache" sudo: yes service: name: apache state: restarted

Devops.Events

Page 9: Вебинар на тему  знакомство с Ansible. популярные практики и ошибки

Role: meta

Хранит зависимости от других ролей

---

dependencies: - { role: java } - { role: basic }

Devops.Events

Page 10: Вебинар на тему  знакомство с Ansible. популярные практики и ошибки

Role: tasks

Делает всю работу---

- name: "Install Apache" sudo: yes apt: name: apache state: present update_cache: yes

- name: "Configure Apache" template: src: apache.conf.j2

Devops.Events

Page 11: Вебинар на тему  знакомство с Ansible. популярные практики и ошибки

Role: templates

Хранит шаблоны создаваемых файловListen {{ apache_port }}<VirtualHost *:{{ apache_port }}> DocumentRoot "{{ apache_site_data }}" ServerName {{ site_name }}

# Other directives here</VirtualHost>

Devops.Events

Page 12: Вебинар на тему  знакомство с Ansible. популярные практики и ошибки

Inventory

Хранит группы серверов[lamp]10.20.30.40

[elasticsearch-cluster-1]10.20.40.4110.20.40.4210.20.40.43

Devops.Events

Page 13: Вебинар на тему  знакомство с Ansible. популярные практики и ошибки

Group/Host vars

Group vars - для групп хостов

Host vars - для отдельных хостов

Devops.Events

Page 14: Вебинар на тему  знакомство с Ansible. популярные практики и ошибки

Patterns & Anti-patterns

Devops.Events

Page 15: Вебинар на тему  знакомство с Ansible. популярные практики и ошибки

Anti-pattern: Писать все задачи в плейбук без разбивки на роли

- name: "Install LAMP server" hosts: lamp user: ubuntu gather_facts: true vars_files: - ../vars/lamp.yml tasks: - name: "install apache" ... - name: "configure mysql" ... - name: "install php" ... - name: "install mysql" ... - name: "kill Sarah Connor"

Devops.Events

Page 16: Вебинар на тему  знакомство с Ansible. популярные практики и ошибки

Pattern:

Использовать в плейбуке роли и теги, делать его модульным

- name: "Install LAMP server" hosts: lamp user: ubuntu gather_facts: true vars_files: - ../vars/lamp.yml roles: - role: apache tags: webserver

- role: mysql tags: database

Devops.Events

Page 17: Вебинар на тему  знакомство с Ansible. популярные практики и ошибки

Anti-pattern:

Описывать задачи в одну строку:

Devops.Events

- lineinfile: dest=/opt/jboss-as/bin/standalone.conf regexp='^(.*)Xms(\d+)m(.*)$' line='\1Xms${xms}m\3' ba

Такая строка даже не поместилась в слайд, как видите

Page 18: Вебинар на тему  знакомство с Ansible. популярные практики и ошибки

Pattern:

При описании задачи записывать каждый параметр в отдельную строку

- lineinfile:

dest: /opt/jboss-as/bin/standalone.conf

regexp: '^(.*)Xms(\d+)m(.*)$'

line: '\1Xms${xms}m\3'

backrefs: yes

Devops.Events

Page 19: Вебинар на тему  знакомство с Ansible. популярные практики и ошибки

Anti-pattern:

Использовать один inventory файл для всей инфраструктуры

Devops.Events

Page 20: Вебинар на тему  знакомство с Ansible. популярные практики и ошибки

Pattern:Создавать отдельные файлы инвентаря для различных окружений и частей системы:

Devops.Events

Page 21: Вебинар на тему  знакомство с Ansible. популярные практики и ошибки

Ansible-lint и код-ревью

• Ansible-linthttps://github.com/willthames/ansible-lint• Yaml-lint

https://github.com/Pryz/yaml-lint

Devops.Events

Page 22: Вебинар на тему  знакомство с Ansible. популярные практики и ошибки

Конец

Спасибо за внимание!email: [email protected]

LinkedIn: Paul Yehorov