ansible(一)安装、参数详解、资源清单、用户级ansible环境
1、什么是Ansible?
Ansible是近年越来越火的一款运维自动化工具,其主要功能是帮助运维实现IT工作的自动化、降低人为操作失误、提高业务自动化率、提升运维工作效率,一个人管理多个操作系统。常用于软件部署自动化、配置自动化、管理自动化、系统化系统任务、持续集成、零宕机平滑升级等。
Ansible完全基于Python开发,而DevOps在国内已然是一种趋势,Python被逐步普及,运维人员自己开发工具的门槛逐步降低,得益于此,方便对Ansible二次开发。Ansible内置丰富的模块,甚至还有专门为商业平台开发的功能模块,完全可以满足日常功能所需。在Ansible去中心化概念下,一个简单的复制操作即可完成管理配置中心的迁移。Agentless(无客户端),客户端无需任何配置,由管理端配置好后即可使用,这点非常诱人,使用ssh的方式。
2、ansible的安装
环境中所用的系统版本与软件源版本保持一致,这里都使用的是8.2版本。 实验准备两台虚拟机westosa(172.25.254.100)做ansible主机,westosb(172.25.254.200)是被控制的node节点。 westosa配置ip为172.25.254.100 修改westosa的域名为westos_ansible.westos.org westosb配置ip为172.25.254.200 修改westosb的域名为westos_node1.westos.org ansible主机配置软件仓库 ansible可以下载epel源,然后直接安装就可以。这里用了另一种方法,首先ansible的依赖性中sshpass这个软件在镜像中没有,其他的依赖性在镜像中都有,所以我们提前下载sshpass的rpm包和ansible的rpm包,安装sshpass 然后安装ansible 查看ansible的版本,说明已经成功安装ansible
3、使用Ansible的参数
进入/etcansible 目录,可以看到ansible.cfg主配置文件,hosts默认清单文件,roles角色。ansible all --list-hosts 列出所有的受控制的主机,发现没有,进入hosts文件,在最后一行添加172.25.254.200,再次列出,就可以看到受控制的主机有172.25.254.200这台主机。 -m表示模块,使用ping这个模块连接,-k参数是询问ssh的密码,出现pong回馈说明,成功连接 由于root权限调用node1权限太大,所以我们一般用普通用户的身份进入受控节点,执行操作,创建devops用户,给密码 但是每次输入密码太麻烦,想ssh免密登陆,ansible把rsa公钥给被控节点的devops用户 ssh的方式默认是root用户登陆,而上面我们给的是被控节点的devops用户,所以报错,只要指定了登陆的用户devops就好了 执行命令时,是devops的用户,没有权力(mnt对其他人没有写的权限) 直接在node1上测试,devops确实没有权限操作mnt
所以要下放权力给devops,node1打开visudo
给devops用户所有权限 -K输入sudo的密码,并且加入–become参数,表示使用sudo执行命令,才能真正提权,而不是直接执行 在node1上成功建立文件
每次输入sudo的密码也很麻烦,node1编辑visudo
NOPASSWD免密登陆sudo 现在不用-K,就可以sudo登陆,删除文件 node1查看,已删除
4、构建Anisble清单
默认清单是用hosts文件,如果自己创建一个westos文件,无法读取,需要使用-i参数指定westos文件查看清单 查看未定义组的清单 设定单层清单,两个组westos1和westos2 也可以设定嵌套清单,westos大组包括westos1和westos2 通过指定主机名称或IP的范围可以简化Ansible主机清单 也可以用域名的方式设定清单 列出192*,可以列出192这个组,也可以列出192的清单 下面测试正则表达式,列出带172或192的 列出在westos1组中,也在westos2组中的 列出在westos1但是不在westos2中的 列出172开头的或者192开头的
5、Ansible配置文件参数详解
/etc/ansible/ansible.cfg文件参数
自己制作的westos文件清单,为什么无法列出呢,是因为在配置文件中inventory指定清单路径为/etc/ansible/hosts inventory中添加清单路径 再次执行,可以列出 remote_tmp和local_tmp是远端的本地的临时文件路径。当执行ansible后,主机生成py临时脚本,ssh发送到受控主机,受控主机执行完删除该临时文件,主机也会删除临时文件 测试,执行等待30秒 在这30秒内,可以看到node1存在py临时文件 同样在这30秒内,ansible主机有py临时文件,一旦执行完毕,自动删除py脚本 打开ask_pass后,每次执行ansible时询问连接用户密码 输入密码 配置文件恢复正常 查看主机名时,正常 如果删除了~/.ssh/known_hosts文件,那么连接时,连接受控主机会询问是否接受受控主机发送过来的身份认证key,会要求输入yes,但是如果一百台node都要输入yes挺累的。 所以修改配置文件中的host_key_checking参数,关闭他,不再询问是否接受 ssh连接时自动输入yes 默认使用的模块是command,可以改为ping 默认使用模块为ping 在远程主机中用devops用户执行指令时,转换用户身份;转换用户身份执行命令时,用sudo调用;转换成root用户;执行sudo指令时,不提示输入密码 成功执行 连接远程主机的用户为devops 执行成功
常用配置参数 | 含义 |
---|
#[default] | 基本信息设定 | inventory= | 指定清单路径 | remote_user= | 在受管主机上登陆的用户名称,未指定使用当前用户 | ask_pass= | 是否提示输入SSH密码,如果公钥登陆设定为false | library= | 库文件存放目录 | local_tmp= | 本机临时命令执行目录 | remote_tmp= | 远程主机临时py命令文件存放目录 | forks= | 默认并发数量 | host_key_checking= | 第一次连接受管主机时是否要输入yes建立host_key | sudo_user= | 默认sudo用户 | ask_sudo_pass= | 每次在受控主机执行ansible命令时是否询问sudo密码 | module_name= | 默认模块,默认使用command,可以修改为shell | log_path= | 日志文件路径 | | | [privilege_escalation] | 身份信息设定 | become= | 连接后是否自动切换用户 | become_method= | 设定切换用户的方式,通常用sudo | become_user= | 在受管主机中切换到的用户,通常为root | become_ask_pass | 是否需要为become_method提示输入密码,默认为false |
6、构建用户级Ansible操作环境
ansible的主配置文件只有一个,如果每个用户的配置不一样,怎么办,需要把配置独立出来,一个用户一个配置文件。 比如ansible主机上的lee用户,先创建lee,给密码,创建lee的snasible目录,编辑配置文件,在当前目录下,会优先找本目录的ansible.cfg文件,找不到才找/etc/ansible/ansible.cfg文件,所以想用该ansible.cfg文件,必须在这个目录中。 指定一些参数, ansible主机本身也可以是受控节点 100中创建devops用户 root把私钥给lee用户,测试,200的devops可以成功,100的devops不行 root把对应的公钥给100的devops用户 并给devops用户做提权 切换lee用户,执行成功
|