运维 Ansible

扫码查看

Ansible架构图

Ansible特性

- 基于python实现,由Paramike,PyYAML和Jinjia2三个关键模块
- 部署简单,agentless
- 使用ssh协议
- 主从集中化模式
- 支持自定义模块
- 支持playbook
- 幂等性:一种操作可重复多次结果相同

Ansible核心组件

- ansible core:Ansible的核心程序
- host iventory:记录了每一个由Ansible管理的主机信息,信息包括ssh端口,root帐号密码,ip地址等
- core modules:Ansible管理主机之前,先调用core Modules中的模块,然后指明管理Host Lnventory中的主机,就可以完成管理主机
- custom modules:自定义模块
- playbook(yaml,jinjia2):YAML格式文件,多个任务定义在一个文件中
- connect plugin:连接插件,Ansible和Host通信使用

Invetory文件说明

参数说明:

  • ansible_ssh_host 将要连接的远程主机名,可用于设置别名
  • ansible_ssh_port ssh端口,非默认可通过它来设置
  • ansible_ssh_user 默认的ssh用户名
  • ansible_ssh_pass ssh密码 不安全
  • ansible_sudo_pass sudo密码 不安全
  • ansible_connection 主机连接类型
  • ansible_ssh_private_key_file ssh 使用的私钥文件.适用于有多个密钥
  • ansible_shell_type 目标系统的shell类型
  • ansible_python_interpreter 目标主机的python路径

查看模块帮助信息

- ansible-doc -l
- ansible-doc -s  module_name

变量

  • invetory中定义变量
  • playbooks中定义变量

在playbook文件中冒号后面的值不能以”{ “开头,解决办法:要在”{ “开始的值加上引号,如:

  • 通过系统变量(facts),可直接使用,如ansible_os_family,ansible_ens3.ipv4.address;
  • 运行结果当做变量使用-注册变量,register: result ,debug: msg=”“
  • 文件模板中使用的变量
  • 定义命令行变量如下

用命令行传递参数

  • -e或者–extra-vars, -e ‘参数名1=值1 参数名2=值2’
  • json格式传递参数 -e ‘{‘hosts’:’local’, ‘user’:’root’}’
  • 参数放在json文件里面中 -e “@vars.json”

ansible命令应用

常见模块

  • command
  • cron
  • user
  • group
  • copy
  • file
  • ping
  • setup
  • service
  • shell
  • script
  • yum/apt

cron:计划任务

user:用户管理

group:用户组管理

copy:文件复制

file:文件管理属性

ping:测试主机联通性

setup:收集远程主机的facts

service:常用服务的运行状态

shell:远程执行命令,可传递参数

script:将本地脚本在远程上执行

yum/apt: 安装程序包

playbook

通过yaml将多个模块组装起来运行多个任务
实例说明:https://github.com/ansible/ansible-examples

组成结构:
Playbooks:
Tasks:任务列表,定义的一组hosts映射到task
Variables:变量
Templates:模板
Handlers:处理器,由某事件触发执行的操作,一般用来重启服务,或者触发系统重启操作,handlers按照声明的顺序执行
Roles:角色
Include语句

运行说明:
0)yaml语法检测
ansible-playbook –syntax-check /path/to/playbook.yaml
1)yaml测试运行
ansible-playbook -C /path/to/playbook.yaml
2)运行
ansiable-playbook /path/to/playbook.yml
-t TAGS #给指定的任务定义一个调用标识
–tags=TAGS #给指定的任务定义一个调用标识
–skip-tags=SKIP_TAGS #跳过指定的标签
–start-at-task=START_AT #从哪个任务后执行
–list-tags #查看标签
基本结构:

roles

roles:用于层次化、结构化的组织playbook;role能够根据层次结构自动装载变量文件、task以及handlers等,要使用roles只需要在playbook中使用include指令;roles通过分别将变量、文件、任务、模块及处理器放置在单独的目录中,并可以便捷地通过include它们的一种机制,角色一般用于基于主机构建服务的场景中;Roles 的概念来自于这样的想法:通过 include 包含文件并将它们组合在一起,组织成一个简洁、可重用的抽象对象

创建role的步骤如下:

  1. 创建以roles命名的目录
  2. 在roles目录中分别创建以各角色名称命名的目录,如websrvs等
  3. 在每个角色命名的目录中分别创建files、handlers、meta、tasks、templates和vars目录;用不到的目录可以创建为空目录,也可以不创建
  4. 在palybook文件中调用各角色

roles内各目录中可用的文件

wordpress-nginx 实例如下:

目录结构

site.yml -入口函数

group_vars/all -全局变量

common

roles/common/tasks/main.yml

roles/common/handlers/main.yml

mysql

roles/mysql/tasks/main.yml

roles/mysql/handlers/main.yml

roles/mysql/templates/my.cnf.j2

nginx

roles/nginx/tasks/main.yml

roles/nginx/handlers/main.yml

roles/nginx/templates/default.conf

php-fpm

roles/php-fpm/tasks/main.yml

roles/php-fpm/handlers/main.yml

roles/php-fpm/templates/wordpress.conf

wordpress

roles/wordpress/tasks/main.yml

roles/wordpress/templates/wp-config.php

原文:大专栏  运维 Ansible


01-14 10:31
查看更多