0%

Ansible 介绍和基础操作

关于 Ansible 系列其他文章的传送门

  1. 《 Ansible 介绍和基础操作 》                 您当前所在位置

  2. 《 Ansible Playbook 以及 Roles 的简单使用方法 》

  3. 《 使用Ansible Playbook 通过 yum 部署 LNMP 环境 》

  4. 《 使用Ansible Roles 快速搭建 Nginx 代理后端的 LAMP 模型 》

  5. 《 使用Ansible Playbook 自动完成硬盘的分区、格式化、挂载 》



absible-1

一、Ansible 是什么

在生产环境中,会有很多集群,比如 openstack 集群、ceph 集群、k8s 集群等等,集群中的主机数量从十几台到上百、上千台不等,当出现大量的发布、部署工作时,如果一台一台去修改,发布周期会非常长,而且这种又无聊又繁琐的工作老子早就烦的掀桌子不想干了, 而且这种大量重复的操作,一是没有效率,二是人工去做很容易出现错误。孔子曾经说过 “懒人使科技进步”(误),国外有个叫 Michael DeHaan 的 “懒人” 开发了 Ansible,他在项目中对 ansible 的介绍是:

Ansible 是一个极其简单的 IT 自动化系统。它处理配置管理,应用程序部署,云配置,临时任务执行和多节点编排 - 包括使用负载平衡器实现零停机滚动更新等微不足道的操作

Ansible 糅合了众多老牌运维工具的优点实现了批量操作系统配置、批量程序的部署、批量运行命令等功能。 仅需在管理工作站上安装 ansible 程序,配置被管控主机的 IP 信息,被管控的主机无客户端,也就是说他可以代替人工,按照你之前设定好的方式,批量的执行某些操作,后在 2015 年被 RedHat 收购,收录在 epel 源中。

Ansible 特性有

  • 模块化:能调用特定的模块,来实现特定的功能;
  • 基于 Python 开发:由 PyYAML 和 Jinja2 三个关键模块;
  • 部署简单:不需要 agent 端;
  • 幂等性:用户对于同一操作发起的一次请求或者多次请求的结果是一致的,不会因为多次点击而产生了副作用。

二、安装 Ansible

Ansible 收录在 epel 源中,所以先安装 epel 源, 随后安装 ansible

1
2
3
yum install epel-release
yum install ansible

安装后使用 rpm -ql ansible 查看程序文件:

  • 主配置文件:/etc/ansible/ansible.cfg
  • 主机清单:/etc/ansible/hosts
  • 主程序:ansibleansible-playbookansible-doc

三、使用方法

基本语法:

1
ansible HOST-PATTERN -m MOD_NAME -a MOD_ARGS -C -u USERNAME -c CONNECTION

查看 ansible 模块:

1
ansible-doc -l

查看指定模块的帮助信息:

1
ansible-doc -s ping

常用模块

ping 模块

  • 测试所有远程主机的连通性
1
ansible all -m ping

command 模块

  • 在远程主机运行命令,直接调用内核显示时钟
1
ansible all -m command -a "date"

shell 模块

  • 在远程主机上调用 shell 来指定命令,支持 shell 特性
1
ansible all -m shell -a "echo 123 | passwd root --stdin"

copy 模块

  • 把文件或目录复制到远程主机
1
2
3
4
5
6
7
8
src: 原文件路径
content: 直接指定要生成文件的内容
dest:目的地路径
owner:属主
group:属组
mode:权限

ansible all -m copy -a "src=/etc/fstab dest=/tmp/fstab.bak owner=root group=root mode=755"

fetch 模块

  • 将远程主机的文件拉取到本地
1
2
3
4
5
src:远程目标路径
dest:本地路径
会在本地创建一个叫远程主机名的文件夹,防止文件重复

ansible all -m fetch -a "src=/data/nginx/index.html dest=/total/index/

cron 模块

  • 在远程主机上创建 crontab 计划任务
1
2
3
4
5
6
7
8
9
10
11
12
name=ansible 的任务名
minute = 分
hour = 时
day = 日
month = 月
weekday = 周
job = 要创建的内容
backup:是否备份之前的任务计划
user:新建任务计划的用户
state= present(创建) | absent(删除)

ansible all -m cron -a "minute=0 hour=0 day=* month=* weekday=* name='Ntpdate sync' job='ntpdate 172.25.70.250' state=absent"

file 模块

  • 在远程主机上操作文件

创建链接文件 path=/tmp/fstab.l src=/etc/fstab state=link
修改属性 path=/etc/nginx/nginx.conf owner=root group=nginx mode=644
创建目录 path=/tmp/testdir state=directory

hostname 模块

  • 顾名思义是修改远程主机的主机名
1
ansible node3 -m name -a "name=node3.local"

yum 模块

  • 管理远程主机的 yum
1
2
3
4
name = 软件包名
state=[installed | removed | latest]

ansible all -m yum -a "name=nginx state=installed"

service 模块

  • 管理服务
1
2
3
4
name = 服务名
state=[ started | stopped | restarted ]

ansible all -m service -a "name=nginx state=restarted"

user 模块

  • 管理远程主机的账号
1
2
3
4
5
6
7
8
name = 用户名
system = 是否为系统账户
uid=uid
shell = 使用哪个 shell
group = 属组
groups = 附加组
comment = 注释
home = 家目录

setup

  • 获取 facts,一些自带变量
1
ansible all -m setup