ansible 特点
ansible的编排引擎可以出色的完成各种配置管理,ansible在流程控制,资源部署方面很强大,并且ansible无需安装客户端软件,使用yaml配置文件语法,功能强大,便于维护
- ansible是基于Python开发
- 安装部署简单
- 管理主机便捷,支持多台主机并行管理
- 无需安装被管理节点的客户端(no agent),且无需占用客户端其他的端口,仅仅使用ssh服务即可
- 不仅仅支持python,还支持其他语言的二次开发
- 不用root用户也可以执行,降低系统权限
ansible实践部署
1.安装ansible,先准备ansible管理机器(老板)
yum install epel-release -y
yum install -y ansible libselinux-python
rpm -ql ansible | grep -E '^/etc|^/usr/bin'
ansible --version
再准备ansible被管理机器(员工)
安装ansible 所需的系统模块
yum install -y epel-release libselinux-python
ansible管理方式
ansible批量管理主机的方式主要由两种,
cp /etc/ansible/hosts{,.bak}
[root@chenjian01 ~]
[webserver]
114.116.107.193
[root@chenjian /etc/ansible]
hosts (1):
114.116.107.193
ssh密码认证方式管理机器
ansible是直接利用linux本地的ssh服务,以及一些远程的ssh操作,一般情况下客户端的ssh服务默认都是开启的,无需额外管理
ansible webserver -m command -a "hostname" -k -u root
ssh root@114.116.107.193
exit
vim /etc/ansible/ansible.cfg
host_key_checking=false
ansible webserver -m command -a "hostname" -k -u root
-u 指定用户
-k 指定连接ssh密码
--become 提权
--become-user 提权到root用户
--ask-become-pass 提权用户输入密码
ansible webserver -m command -a "ls /root" -k -u user --become --become-user root
--ask-become-pass
配置免密登录
每次执行ansible命令的是否,都需要输入ssh认证密码,也就是root密码,如果不同主机密码不一致,那你还得输入多次密码才行
ansible自带的密码参数(安全性太低,不推荐)
参数
ansible_host 主机地址
ansible_port 端口,默认为22
ansible_user 认证的用户
ansible_ssh_pass用户认证的密码
使用hosts文件的参数形式,来实现ssh认证
[root@chenjian01 ansible]
[webserver]
114.116.107.193 ansible_user=root ansible_ssh_pass=Cch109731
ansible webserver -m command -a "hostname"
ssh密钥方式批量管理主机(推荐,必须使用这个)
ssh-keygen -f ~/.ssh/id_rsa -P "" > /dev/null 2>&1
[root@chenjian01 .ssh]
authorized_keys id_rsa id_rsa.pub known_hosts
编写公钥分发脚本
#!/bin/bash
rm -rf ~/.ssh/id_rsa*
ssh-keygen -f ~/.ssh/id_rsa -P "" > /dev/null 2>&1
SSH_Pass=Cch109731
Key_Path=~/.ssh/id_rsa.pub
for ip in 138 139
do
sshpass -p$SSH_Pass ssh-copy-id -i $Key_Path "-o StrictHostKeyChecking=no" 192.168.178.$ip
done
此时在管理机器上再次连接客户端机器,就无需输入账号和密码了,可以尝试使用ansible命令进行连接
ansible webserver -m command -a "uname -a"
此时无需输入密码,即可远程管理
ansible模式与命令
ansible 实现批量化主机管理的模式,主要由两种:
- 利用ansible的纯命令行实现的批量管理,ad-hoc模式-----好比简单的shell命令管理
- 利用ansible的playbook剧本来实现批量管理,playbook剧本模式------好比复杂的shell脚本管理
ad-hoc模式
ansible的ad-hoc模式是ansible,也就是处理一些临时的,简单的任务,可以直接用ansible的命令行来操作
比如:
- 临时批量查看被管理机器的内存情况,cpu负载情况,网络情况
- 比如临时的分发配置文件等等
playbook模式
ansible的playbook模式是针对比较具体,且比较大的任务,那么就得写好剧本
ansible的ad-hoc命令模式解析
ansible webserver -m command -a “hostname”
- Ansible–自带提供的命令操作
- webserver–/etc/ansible/hosts文件中定义的主机组,还可以写主机ip地址,以及通配符*
- -m command --ansible指定模块的参数,以及指定了command模块
- -a 指定给command模块什么参数,hostname,uname -r
ansible-doc命令
ansible-doc -l | grep ^command
ansible-doc -s command
Ansible模块精讲
command模块
作用:在远程节点上执行一个命令
chdir 在执行命令之前,先通过cd进入该参数指定的目录
creats 在创建一个文件之前,判断该文件是否存在,如果存在了则跳过前面的东西,如果不存在则执行前面的动作
free_form 该参数可以输入任何的系统命令,实现远程执行和管理
removes 定义一个文件是否存在,如果存在则执行前面的动作,如果不存在则跳过动作
command模块是ansible的默认基本模块,也可以省略不写,不能出现特殊符号><!;&这些符号command模块都不认识,如果想用这些变量,就使用shell模块了
获取所有被管理机器的负载信息
ansible webserver -m command -a "uptime"
chdir参数
先切换到/tmp,然后再打印工作目录
ansible webserver -m command -a "pwd chdir=/tmp/"
creats参数
该参数作用是判断该文件是否存在?存在则跳过,不存在则执行
ansible webserver -m command -a "pwd creats=/tmp/"
removes实践
存在则执行,不存在则跳过
ansible webserver -m command -a "pwd removes=/tmp/"
copy模块
ansible webserver -m copy -a "src=nginx-1.15.3.tar.gz dest=/tmp/" -u root
file模块
ansible web -m file -a "dest=/emp/abc mode=600 state=touch" -u root
ansible web -m file -a "dest=/emp/abc state=absent" -u root
yum模块
ansible webserver -m yum -a "name=memcached state=present" -u root
ansible webserver -m yum -a "name=memcached state=absent" -u root
user模块
ansible web -m user -a "name=foo password=123com" -u root
ansible web -m user -a "name=foo state=absent" -u root
ansible web -m user -a "name=foo password=123com shell=/sbin/nologin" -u root
git模块
ansible web -m git -a "repo=https://github.com/ansible/ansible.git dest=/tmp/ansible" -u root
service模块
ansible web -m service -a "name=memcached state=started" -u root
ansible web -m service -a "name=memcached state=stopped" -u root
ansible web -m service -a "name=memcached state=restarted" -u root
ansible web -m service -a "name=memcached enabled=true" -u root
setup模块
ansible web -m setup
ansible web -m setup -a "filter=ansible_nodename"
ansible_nodename
ansible_os_family
ansible_pkg_mgr
ansible_processor
shell模块
作用:再远程机器上执行命令(复杂命令)
了解模块用法的渠道
shell模块支持的参数和解释
chdir 在执行命令之前,通过cd进入该参数指定的目录
creats 定义一个文件是否存在,如果存在则跳过,如果存在该文件,则执行shell命令
free_form参数信息中可以输入任何的系统命令,实现远程管理
removes 定义一个文件是否存在?如果存在该文件,则执行命令,如果不存在,则跳过
批量查询进程信息
ansible webserver -m shell -a "ps -ef | grep vim | grep -v grep"
批量在客户端机器,创建写入文件信息
ansibel webserver -m shell -a "echo 你真棒 > /tmp/heihei.txt"
批量执行脚本
该需要执行的脚本,必须要求客户端机器上存在,否则会报错文件不存在,这是shell模块的特点,是因为还有一个专门执行脚本的script模块
ansible webserver -m shell -a "mkdir -p /server/myscripts/;echo 'hostname' > /server/myscripts/hostname.sh;
chmod +x /server/myscripts/hostname.sh;bash /server/myscripts/hostname.sh warn=false"
script模块
功能:把管理机器上的脚本远程的传输到被管理机器节点上去执行,比起shell模块,script模块的功能更强大,在管理机器上有一份脚本,就可以在所有被管理节点上去运行
script的模块参数
应用案例
mkdir -p /myscript
echo -e "pwd\nhostname" > /myscript/local_hostname.sh
chmod +x /myscript/local_hostname.sh
远程的批量执行脚本,且在客户端不存在该脚本
ansible webserver -m script -a "/myscript/local_hostname.sh"
利用script模块,可以批量让所有被管理机器执行脚本,且该脚本不需要再客户端存在。
playbook模式解析
特点:易读的编排语言-YAML,非常适合配置管理和应用部署,非常适合部署复杂的工作
|