linux自动化运维--ansible
linux自动化分为三个层次
1.OS provisioning 自动化安装系统
常用软件:cobbler(red hat 用、PXE
2.OS config 自动化配置系统
常用软件:cfengine,puppet,saltstack chef
3.OS deployment 深度定制自动化
常用软件:func(C/S,ssl)、fabric(ssh,python)、ansible
ansible:由于可以完成三个层次的事情所以比较强大。(基于ssh去连接到主机,所以先要认证)
ansible特性:
部署简单,只需在主控端部署Ansible环境,被控端无需做任何操作;
默认使用SSH协议对设备进行管理;
有大量常规运维操作模块,可实现日常绝大部分操作;
配置简单、功能强大、扩展性强;
支持API及自定义模块,可通过Python轻松扩展;
通过Playbooks来定制强大的配置、状态管理;
轻量级,无需在客户端安装agent,更新时,只需在操作机上进行一次更新即可;
提供一个功能强大、操作性强的Web管理界面和REST API接口——AWX平台。
ansible的架构及组件
Ansible:Ansible核心程序。
HostInventory:记录由Ansible管理的主机信息,包括端口、密码、ip等。
Playbooks:“剧本”YAML格式文件,多个任务定义在一个文件中,定义主机需要调用哪些模块来完成的功能。
CoreModules:核心模块,主要操作是通过调用核心模块来完成管理任务。
CustomModules:自定义模块,完成核心模块无法完成的功能,支持多种语言。
ConnectionPlugins:连接插件,Ansible和Host通信使用
安装ansible:yum安装
安装ansible:
1.下载epel源到/etc/yum.repos.d
#wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-6.repo
2.yum clean all
3. yum makecache
4.yum install ansible -y
使用ansible准备
1.配置主机:
在安装有ansible服务器上/etc/hosts 文件中添加主机
格式:
[机组名] 例: [websevices]
机组ip或主机名 192.168.29.129
www.zrq1.com
2.配置认证:这里由于ansible需要到客户机上执行操作,所以需要对于客户机有登录权限,最好设置免密登录
1.创建证书,密码为空
#ssh-keygen -t rsa -P \’\’
2.拷贝证书
#ssh-copy-id -i ./ssh/id_rsa.pub root@192.1168.1.162
3.测试是否成功
#ansible all -m pinng :像所有的客户机发送ping测试
ansible配置文件:
hosts:配置主机群
ansible基本语法:
ansible
ansible <host-pattern> [options]
host-pattern:在host中定义的主机群
all:所有主机
options:
-m:后面接模块
如果直接执行命令,不用模块可以省略
例如:ansible all -a ‘service httpd status’
查看客户机的httpd服务状态
-a:后面接模块的命令
ansible-doc -l:列出所有模块
常用模块:copy、cron、acl、group、user
ansible-doc -s 模块名:查看指定模块的参数
例:ansible webserver -m copy -a “src=/root/zrq.sh dest=/tmp/zrq/” 注意:命令不支持管道
用复制模块复制文件到websever服务器群的目录中
ansible相关命令:
ansible-doc
-l:查看所有模块
主要模块:
命令模块:
command执行一些命令
例如:ansible all -m command -a “hostname”
解析:对所有主机通过command模块执行一个命令hostname,查看主机名
shell:执行一些脚本
例如:ansible all -m shell -a “ps aux”
解析:对所有主机通过shell模块,执行shell命令“ps aux ”,查看目标主机进程
文件模块:
copy:复制文件
例如:ansible all -m copy -a “src=./2.txt dest=/root”
解析:对于所有主机,通过copy拷贝当前目录下2.txt文件到目标主机的/root目录下
fetch:抓取目标主机的文件到管理机上(注意:这里抓取过来会以这个主机的主机名为目录下)
例如:ansible all -m fetch -a “src=/root/zrq.txt dest=/root/”
解析:对于所有主机,抓取/root/zrq.txt文件到本机的/root目录下。
file:实现创建、删除、更改属性(属主,属组)对于文件或目录
例如:ansible all -m file -a “path=/root/book.txt state=touch”
解析:对于所有主机,在/root下创建book.txt文件
安装模块
yum:
例如:ansible all -m yum -a “name=httpd state=installed”
解析:安装httpd
服务模块
service:
例如: ansible all -m service -a “name=httpd state=started enabled=yes”
解析:启动httpd服务,并且设置为开机自启
挂载模块
mount:
例如:ansible all -m mount -a “src=192.168.1.172:/data/ path=/mnt fstype=nfs state=mounted”
解析:对于所有主机,把nfs的192.168.1.172的/data目录,通过nfs文件系统类型,挂载在/mnt下,并且卸载fstab文件中
定时任务:
cron:
例如:ansible all -m cron -a “name=\’echo 123\’ minute=*/1 job=\’echo 123 >> /root/1.txt\'”
解析:创建一个定时任务,名称是echo 123,间隔每分钟执行一次,内容是,输出123到1.txt文件
用户模块
group:
例如:ansible all -m group -a “name=zabbix1 gid=1052”
解析:创建一个组,组名zabbix1,组id是1052
user:
例如:ansible all -m user -a “name=zabbix1 uid=1052 group=root groups=zabbix1”
-s:查看指定模块的参数
例如:ansible-doc -s copy
ansible的playbook模块:
1.基于YAML(一种文本格式)语言:
ymal文件扩展名通常为。yaml
-:表示
空格:表示
每个任务都有名称
注意缩进
2.playbooks:基于yaml语言格式的一个.yaml文件
示例:(注意:千万注意缩进以及对其,特别是-)
#vim test.yaml
- hosts: all
remote_user: root
tasks:
– name: ensure apache status
service:
name: httpd
state: status