51 ansible

1.什么是Ansible?

Ansible 是一个配置管理和应用部署工具,即在管理主机上操作一些命令就能在节点主机上进行相应的动作。

2.Ansible的特点?

  • no angents:被管控节点无需安装agent
  • no server:无服务端,使用时直接调用命名
  • modules in any languages:基于模块工作,可以使用任意语言开发模式
  • 易读的语法:基于yaml语法编写playbook
  • 基于推送模式:不同于puppet的拉取模式,直接由调用者控制变更在服务器上发生的时间
  • 模块是幂等性的:定义的任务已存在则不会做任何事情,意味着在同一台服务器上多执行同一个playbook是安全的

3.Ansible中ansible.cfg配置文件 优先级

  • ANSIBLE_CFG:首先,Ansible命令会先检查环境变量,及这个环境变量将指向的配置文件;(export ANSIBLE_CONFIG=xxxx配置文件)
  • ./ansible.cfg:其次,将会检查当前目录下的ansible.cfg配置文件;
  • ~/.ansible.cfg:再次,将会检查当前用户home目录下的.ansible.cfg配置文件;
  • /etc/ansible/ansible.cfg:最后,将会检查在安装Ansible时自动生产的配置文件

ansible配置文件的参数

    inventory = /etc/ansible/hosts      这个参数表示资源清单inventory文件的位置
    library = /usr/share/ansible        指向存放Ansible模块的目录,支持多个目录方式,只要用冒号(:)隔开就可以
    forks = 5                           并发连接数,默认为5
    sudo_user = root                    设置默认执行命令的用户
    remote_port = 22                    指定连接被管节点的管理端口,默认为22端口,建议修改,能够更加安全
    host_key_checking = False           设置是否检查SSH主机的密钥,值为True/False。关闭后第一次连接不会提示配置实例
    timeout = 60                        设置SSH连接的超时时间,单位为秒
    log_path = /var/log/ansible.log     指定一个存储ansible日志的文件(默认不记录日志)

4.定义ansible inventory(主机列表)

ansible的主要功用在于批量主机操作,为了便捷地使用其中的部分主机,可以在inventory file中将其分组命名。默认的inventory file为/etc/ansible/hosts。
inventory file可以有多个。

  • 1.基于IP地址+密码的方式
[webservers]
172.16.1.7ansible_ssh_user='root'
ansible_ssh_pass='1'
172.16.1.8ansible_ssh_user='root'
ansible_ssh_pass='1'
  • 2.基于密钥连接,需要先创建公钥和私钥,并下发公钥至被控端
[root@manager ~]ssh-copy-id -I ~/.ssh/id_rsa.pub [email protected]
[root@manager ~]ssh-copy-id -I ~/.ssh/id_rsa.pub [email protected]
[root@manager ~]cat hosts
[webservers]
172.16.1.7
172.16.1.8
  • 3.主机组使用方式
[lbservers] #定义lbservers组
172.16.1.5
172.16.1.6
[webservers] #定义webservers组
172.16.1.7
172.16.1.8
[servers:children] #定义servers组包括两个子组
[lbservers,webservers]
lbservers
webserver

5.Ansible任务执行模式

  • ad-hoc模式(点对点模块)
    使用单个模块,支持批量执行单条命令,相当与在bash中执行一句shell命令
  • playbook模式(剧本模式)
    ansible主要的管理方式,通过多个task的集合完成一类功能,可以理解为多个ad-hoc的配置文件
ansible ad-Hoc 单条命令
image.png
command                            执行命令     默认   不支持管道
shell                              执行命令              支持管道  

yum_reposity                       yum仓库配置
yum                                yum安装软件
copy                               拷贝配置文件
service|systemd                    启动服务
file                               创建目录 创建文件 递归授权
mount                              挂载
cron                               定时任务
firewalld                          防火墙
selinux                  

1.command
ansible webservers -a "ps axu|grep nginx" -i hosts 不支持管道(简单命令)
2.shell
ansible webservers -m shell -a "ps axu|grep nginx" - i hosts 支持管道
3.yum

name 服务名
state:
        present 安装
        absent 卸载
        latest 最新
enablerepo 指定使用按个仓库
disablerepo 排除使用哪个仓库
  • 1.安装最新的httpd服务
    [root@manager project1] # ansible webservers -m yum
    -a "name=httpd state=latest disablerepo=webtaticphp" -i hosts
  • 2.移除httpd服务
    [root@manager project1]# ansible webservers -m yum
    -a "name=httpd state=absent disablerepo=webtaticphp" -i host
  • 3.安装httpd指定从哪个仓库安装
    [root@manager project1]# ansible webservers -m yum
    -a "name=httpd state=latest enablerepo=testing" -i
    hosts
  • 4.通过URL方式进行安装
    [root@manager project1]# ansible webservers -m yum
    -a "name=https://mirrors.aliyun.com/zabbix/zabbix/3.0/
    rhel/7/x86_64/zabbix-agent-3.0.0-1.el7.x86_64.rpm
    state=present disablerepo=webtatic-php" -i hosts

4.copy

src 本地路径,可以是相对,可以是绝对
dest 目标位置
owner 属主
group 属组
mode 权限
backup 备份

[root@manager project1]# ansible webservers -m copy
-a "src=./file/ansible.oldxu.com.conf
dest=/etc/nginx/conf.d/ansible.oldxu.com.conf
owner=root group=root mode=644" -i hosts

[root@manager project1]# ansible webservers -m copy
-a "src=./file/ansible.oldxu.com.conf
dest=/etc/nginx/conf.d/ansible.oldxu.com.conf
owner=root group=root mode=644 backup=yes" -i hosts

5.service|systemd

state
      started:启动
      stopped:停止
      restarted:重启
      reloaded:重载

enabled          是否开机自启
        yes            是
        no              否

[root@manager project1]# ansible webservers -m
systemd -a "name=nginx state=restarted enabled=yes"
-i hosts

6.file
创建/code/ansible

path       路径
state   
    touch            创建文件
    directory       创建目录
owner      属主
group       属组
mode        权限

[root@manager project1]# ansible webservers -m file
-a "path=/code/ansible state=directory mode=755
owner=www group=www" -i hosts

7.user group
[root@manager project1]# ansible webservers -m
group -a "name=www gid=666 state=present" -i hosts

user

name                    名称
uid                      uid
group                    组名或gid
create_home              是否创建家目录
system                   是否作为系统组
shell                    指定登录shell
state
      present             创建用户
      adsent              删除用户不删除家目录
remove                   移除用户并删除家目录
groups                   添加附加组                 
password               创建密码

[root@manager project1]# ansible webservers -m user
-a "name=www uid=666 group=666 create_home=no
shell=/sbin/nologin state=present" -i hosts

8.mount

present             写入/etc/fstab
absent              卸载/etc/fstab
mounted             临时挂载
unmounted           卸载当前挂载

挂载过程中,如果目录不存在,则会创建该目录
[root@manager project1]# ansible webservers -m
mount -a "src=172.16.1.31:/data/zrlog
path=/test_zrlog fstype=nfs opts=defaults
state=mounted" -i hosts

9.cron

minute          分
hour            时
day             日
month           月
week            周
job             添加任务    

[root@manager project1]# ansible webservers -m cron
-a 'name=test_job minute=00 hour=02 job="/bin/bash
/server/scripts/client_to_data_server.sh
&>/dev/null"' -i hosts

10.firewalld

开启防火墙

[root@manager project1]# ansible webservers -m
systemd -a "name=firewalld state=started" -i hosts

针对服务

[root@manager project1]# ansible webservers -m
firewalld -a "service=http state=enabled" -i hosts

针对端口

[root@manager project1]# ansible webservers -m
firewalld -a "port=9999/tcp state=enabled" -i hosts

针对source来源

ansible webservers -m firewalld -a "source=172.16.1.0/24
state=disabled permanent=no" -i hosts

11.selinux
[root@manager project1]# ansible webservers -m
selinux -a "state=disabled" -i hosts

你可能感兴趣的:(51 ansible)