ansible新手入门

混江龙づ霸主 提交于 2020-01-10 07:38:41

在这里插入图片描述

一 ansible简介

1 ansible概述

  1. ansible是2013年推出的一款IT自动化和devops软件,redhat于2015年将其收购,基于python开发,融合了很多运维工具的优点.
  2. 可以实现:
  3. 自动化部署APP
  4. 自动化管理配置项
  5. 自动化持续交付
  6. 自动化(AWS)云服务管理

2 选择ansible的原因

  1. 社区活跃度高,使用广泛
  2. 学习成本低
  3. 使用成本低
  4. 编码语言是Python,做二次开发容易
  5. 性能强大
  6. 功能强大,模块丰富
  7. 只需要ssh和python即可使用
  8. 无客户端

3 ansible特性

模块化设计,调用特定模块完成特定任务
支持json等标准输出格式,可以采用任何编程语言重写
部署简单,支持主从模式,支持自定义模块,支持playbook,支持多层部署,支持异构IT环境

4 工作流程

在这里插入图片描述

二 ansible安装

1 软件依赖关系

管理主机:
要求python2.6或2.7或以上版本
需要安装模块:

  1. paramiko
  2. pyyaml
  3. jinja2
  4. httplib2
  5. six
    被托管主机:
  6. ansible需要通过ssh协议管理机器
  7. 需要安装python2.5
    rsync 增量同步
    rsync -a 基础命令合体
    rsync -S 处理稀疏文件

2 安装ansible

yum -y install ansible
ansible --version

三 ad-hoc

1 主机管理

1.1 主机定义与分组

1.1.1 ansible配置文件查找顺序:
  1. 首先检查ansi_config变量定义的配置文件
  2. 其次检查当前目录下的./ansible.cfg文件
  3. 再次检查当前用户家目录下~/ansible.cfg文件
  4. 最后检查/etc/ansible.cfg是ansible的默认配置文件路径
1.1.2 ansible.cfg 配置文件

inventory 定义托管主机地址配置文件路径
inventory 指定的配置文件,写入远程主机的地址

1.1.3 进入配置文件

[组名称]
主机名称或ip地址

1.1.4 ansible.cfg 配置文件

ssh 主机 key 验证配置参数
host_key_checking = False

如果为false,不需要输入yes
如果为true,等待输入yes

1.1.5 分组定义 范围定义样例

[web]
web1
web2
[db]
db[1:2]
[other]
cache

2 ansible命令基础

absible 主机集合 -m 模块名称 -a 模块参数

  1. -i inventory文件路径,或可执行脚本
  2. -k 使用交互式登录密码
  3. -e 定义变量
  4. -v 显示详细信息
列出要执行的主机

ansible all --list-hosts

批量检测主机

ansible all -m ping -k

3 部署证书文件

ansible是通过ssh在远程执行命令的
ssh 远程执行命令必须要通过认证才行
密码写入配置文件安全性差
使用key方式认证
给所有主机部署公钥

  1. 没有秘钥命令执行会出错
  2. ansible web -a’uptime’

4 inventory 扩展参数

4.1 inventory 参数说明

ansible_ssh_port ssh端口号
ansible_ssh_user 默认ssh用户名
ansible_ssh_pass ssh密码
ansible_ssh_private_key_file ssh使用的私钥文件

4.1.1 vars变量定义,用于组名后面

[all:vars]
ansible_ssh_private_key_file="/root/.ssh/key"

4.1.2 children子组定义,用于引用其他组名称

[app:children]
web
db

四 模块

1 ansible-doc

模块手册
ansible-doc -l 列出所有模块
ansible-doc 模块名称 查看具体帮助

2 ping

测试网络连通性,没有参数
是测试ssh的连通性
ansible host-pattern -m ping

3 command

远程执行命令
ansible host-pattern -m command -a ‘[args]’
查看所有机器负载
uptime
最后三个值1分钟平均负载 5分钟平均负载 15分钟平均负载
ansible all -m command -a ‘uptime’
查看日期和时间
ansible all -m command -a ‘date +%F_%T’

4 shell

通过/bin/sh进行执行命令,可以执行任意命令
不能执行交互式的命令,例如vim top等
查看所有机器的负载
ansible all -m shell -a ‘uptime’

5 script

在本地写脚本,然后使用script模块批量执行
ansible web -m script -a ‘urscript’

6 yum

使用yum包管理器来管理软件包
name:要进行操作的软件包名字
state:动作(installed,removed)

7 service

name:必选项,服务名称
enabled:是否开机自启
sleep:执行restarted,会在stop和start之间沉睡几秒
state:对当前服务执行启动,停止,重启,重新加载等操作(started,stoped,restarted,reloaded)

8 copy

复制文件到远程主机
src:复制本地文件到远程主机,绝对路径和相对路径为目录时会递归复制.若路径以/结尾,只复制目录里的内容,若不以/结尾,则复制包含目录在内的整个内容,类似于rsync
dest:必选项.远程主机的绝对路径,如果源文件是一个目录,那该路径必须是目录
复制文件
ansible all -m copy -a ‘src=/etc/resolv.conf’
dest=/etc/resolv.conf
复制目录
ansible all -m copy -a ‘src=/etc/yum.repos.d/ dest=/etc/yum.repos.d’

9 lineinfile模块

类似sed的一种行编辑替换模块
path 目标文件
regrexp 正则表达式,要修改的行
line 最终修改的结果
例如修改my.cnf中bin-log的格式
mixed --> row
ansible db -m lineinfile -a ‘path="/etc/my.cnf" regexp="^binlog-format" line=“binlog-format = row”’

10 replace

类似sed的一种行编辑替换模块
path 目的文件
regexp 正则表达式
replace 替换后的结果
替换指定字符 row --> mixed
ansible db -m replace -a ‘path="/etc/my.cnf" regexp=“row” replace=“mixed”’

11 setup

主要用于获取主机信息,playbooks里经常会用的另一个参数gather_facts与该模块相关,setup模块下经常用的是filter参数

ansible cache -m setup -a ‘filter=ansible_distribution’

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!