ansible

ansible是一款批量自动化运维的工具,在一台主机上安装ansible就可以对其他主机进行批量化操作了。采用模块化设计,基于python、paramiko、pyyaml、jinja2。

使用ansible需要关注两个集合:主机集合,命令集合。 表明了对哪些主机进行什么样的操作。本质上是通过ssh连接到远程主机上然后执行对应的命令。

软件依赖管理:使用python2.6或者python2.7,使用paramiko、pyyaml、jinja2、httplib2、six这几个模块。被托管的主机需要安装ssh,如果开启selinux则需要安装libselinux-python

一、结构规划:

管理主机:”192.168.4.10
被托管主机:4.11(web1)、4.12(web2)、4.13(db1)、4.14(db2)、4.15(cache)

二、安装ansible:(只在管理主机上安装)

修改/etc/hosts将上述ip以及对应的主机名添加到文件中

配置具有ansible的yum源

yum -y install ansible

ansible --version #查看对应版本

三、配置:

ansible中需要重点关注的就是主机集合以及命令集合
主机的集合需要放在文件当中,在ansible的配置文件中引用这个文件
ansible可以在不同的目录下自定义配置文件,因此需要了解ansible配置文件的搜索顺序
这个配置文件的搜索顺序决定了ansible的执行的顺序
1、环境变量ANSIBLE_CONFIG
2、当前目录下的./ansible.cfg	#这一条意味着,ansible配置文件可以有无数个
3、用户家目录下的~/ansible.cfg
4、默认配置文件/etc/ansible/ansible.cfg

修改配置文件:
# 也可以在任意目录下自定义配置文件,只需要在这个目录下执行ansible命令就可以了
	vim /etc/ansible/ansible.cfg
	inventory = /etc/ansible/hosts	#这个文件就是主机集合文件,14行
	host_key_checking = False	#执行命令时不需要输入yes,61行
	remote_user = root	#ansible是通过ssh执行的,这个参数决定了使用ssh执行时的用户,97行
	
定义主机集合文件:
	vim /etc/ansible/hosts
	[web]	#组名,分组是为了方便管理
	web1
	web2

	[db]
	db1
	db2

	[other]
	cache

四、ansible命令:(基础)

ansible 组名(主机名) -m 模块名 -a 模块参数
ansible web --list-hosts	#查看组中对应的主机
ansible all -m ping [-k]	#批量检测主机,-k表示交互式的输入密码

五、部署证书:

ansible的本质是通过ssh在远程主机上执行命令的,因此需要输入密码
为了方便管理和操作,因此需要部署证书,实现免密登陆
cd /root/.ssh
ssh-keygen -t rsa -b 2048 -N "" -f key
# -t指明加密方式是rsa,-b表示秘钥长度,-N指明了密码为"",-f指定了秘钥文件的名字

# 发送公钥
for i in web1 web2 db1 db2 cache
do
ssh-copy-id -i key.pub $i	#-i指明了需要发送公钥的名字
done

ssh -i 私钥名字 ip	#使用指定的私钥登陆目的主机

ansible在ssh远程主机时,默认找/root/.ssh/id_rsa这个私钥文件
上述过程生成的私钥文件的文件名是key,因此需要改变ansible寻找的私钥文件
rm -fr /root/.ansible/cp/*	#清空ansible缓存

# 在主机集合文件中,定义访问哪些主机,需要哪个私钥
vim /etc/ansible/hosts
#为一台主机指定私钥
[web]	#组名,分组是为了方便管理
web[1:2]	#web1,web2的简写

[db]
db1
db2 ansible_ssh_port = 222	#指定ssh端口号,如果是22可以不写

# 为所有主机指定私钥
[all:vars]	#all代表所有主机,是一个关键字;vars也是一个关键字,表示一个变量
ansible_ssh_private_key_file = /root/.ssh/key

# 为自定义组指定私钥
[app:children]	#app是自定义的组名,children表示这个组是子组
web	#组名,要在这个文件中定义
db	#组名,要在这个文件中定义
[app:vars]
ansible_ssh_private_key_file = /root/.ssh/key

六、自定义ansible配置:

ansible可以在不同的目录下自定义配置文件
在意在任意目录下创建ansible.cfg文件,以及hosts文件
在ansible.cfg中配置inventory 对应的值就可以了

七、动态主机:

inventory可以分为静态和动态
静态的inventory是指hosts文件中定义的主机
动态的inventory事指通过外部脚本获取主机列表,然后将json返回给ansible

八、ansible常用模块:

# ansible命令格式
ansible 组名(主机名) -m 模块名 -a 模块参数	

1、ansible-doc和ping模块:
	# 查看帮助文档
	ansible-doc -l	#列出所有模块
	ansible-doc	模块名	#查看对应模块的文档,参数前是"="的为必选项,为"-"的是可选选项
	ansible 组名(主机名) -m ping	#测试连通性

2、command模块:
	# linux命令模块
	ansible 组名(主机名) -m command -a '具体的linux命令'
	# 注意具体的linux命令使用的是单引号'',表示在远程解析
	# 如果使用的是双引号"",则表示在本地解析
	# command模块是直接执行命令,不是通过bash执行的
	# 因此有很多bash的属性无法使用
	# 例如:管道 | ,重定向 > 等

3、shell模块:
	# 用法和command模块基本相同,但是shell模块是通过/bin/sh(/bin/bash)执行命令的
	# 但是不能执行交互式的命令
	例:
		ansible web -m shell -a 'cd /tmp'
		ansible web -m shell -a 'touch abc'	
		# 由于ansible是ssh执行的,每次ssh都在/root/,因此abc文件在/root/目录下
		# 想要在/tmp目录下创建文件需要使用chdir=/tmp 指定工作目录
		ansible web -m shell -a 'chdir=/tmp touch abc'

4、script模块:
	# 用于执行本地编写的脚本,本质上是拷贝到远程主机上,然后再执行
	例:
		vim work.sh
		#!/bin/bash
		id sda1 > /dev/null
		if [ $? != 0 ]; then
			useradd sda1
			echo 123456 | passwd --stdin sda1
		fi
	
		ansible web1,db2 -m script -a work.sh

5、yum模块:
	# 用于管理软件,被托管主机上要配置好对应的yum源
	例:
		ansible db -m yum -a 'name="mariadb-server" state=installed'
		# name表示对应的软件包名
		#  state表示执行的动作,installed安装,removed删除

6、service模块:
	# 对服务的相关操作
	# name:对应的服务名
	# enabled:是否开机自启动
	# sleep:重启服务的时候stop和start之间间隔多少秒
	# state:执行的动作,started、stopped、estarted、reloaded
	例:
		ansible web -m service -a 'name="sshd" enabled="yes" state="startted"'

7、copy模块:
	# 复制文件到远程主机上
	# src:本地文件路径,注意/tmp 和 /tmp/的区别,必选项
	# dest:远程主机的路径,必选项
	# backup:覆盖钱先备份原有文件,是否包含时间 yes/no
	# force:若目标主机包含该文件,但是内容不相同时,若force=yes(默认)则强制覆盖,若force=no,则目标主机不存在该文件时才进行复制
	例:
		ansible all -m copy -a 'src=/etc/yum.repos.d/ dest=/etc/yum.repos.d/'	
		#注意目录的写法,是/etc/yum.repos.d/还是/etc/yum.repos.d

8、lineinfile模块:
	# 类似于sed的一种编辑模块
	# 找到匹配行的时候清空这一行的内容,然后从重写内容
	# path:目标文件
	# regexp:正则表达式,匹配到某一行
	# line:需要重写的内容
	例:
		ansible db -m lineinfile -a 'path=/etc/my.cnf regexp="mixed$" line="binlog-format=row"'

9、replace模块:
	# 和lineinfile类似,但是不是重写整行的内容,而是重写匹配到的内容
	# path:目标文件
	# regexp:正则表达式,匹配到某个位置
	# replace:需要重写的内容
	例:
		ansible db -m replace -a 'path=/etc/my.cnf regexp="row" replace="mixed"'

10、setup模块:
	# 用于获取主机的信息
	例:
		ansible db1 -m setup	#查看db1主机所有信息,json格式
		ansible db1 -m setup -a 'filter=ansible_hostname'	#使用filter进行过滤

九、提权:

	在ansible.cfg中配置的远程用户是root,如果想要使用普通用户去执行命令则需要提权
	vim ansible.cfg
	[defaults]
	inventory = /etc/ansible/hosts	#可以自定义
	remote_user = sda1
	host_key_checking = False	#执行命令时不需要输入yes

	[privilege_escalation]	#提权
	become = yes			#需要切换用户
	become_method = sudo	#使用sudo切换,还可以是su
	become_user = root		#切换成什么用户
	become_ask_pass = no	#不询问切换密码

	在被托管主机上需要为sda1用户提权
	visudo
	sda1	ALL=(ALL)	NOPASSWD:ALL

写总结的第七十六天!!!

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值