Ansible部署
简单介绍、安装、简单部署可点击查看之前文章。
Inventory简介
Inventory是Ansible管理主机信息的配置文件,相当于系统HOSTS文件的功能,默认存放在/etc/ansible/hosts。可以使用 -i 选项指定inventory文件定义主机和组。
Ansible配置文件的优先级
1、首先找执行ansible命令的当前目录中,是否有ansible.cfg文件 2、如果找不到,再找当前用户的家目录下是否有ansible.cfg 3、如果还找不到,就使用全局配置文件/etc/ansible/ansible.cfg 要检查当前使用的是哪个配置文件可以使用ansible --version 命令,会显示配置文件路径
Ansible命令常用参数
参数 功能
-m 要执行的模块,默认为command
-a 指定模块的参数
-u ssh连接的用户名,默认用root,ansible.cfg中可以配置
-b,–become 变成那个用户身份,不提示密码
-k 提示输入ssh登录密码,当使用密码验证的时候用
-s sudo运行
-U sudo到哪个用户,默认为root
-K 提示输入sudo密码,当不是NOPASSWD模式时使用
-C 只是测试一下会改变什么内容,不会真正去执行
-c 连接类型(default=smart)
-f fork多少进程并发处理,默认为5个
-i 指定hosts文件路径,默认default=/etc/ansible/hosts
-I 指定pattern,对已匹配的主机中再过滤一次
-list-host 只打印有哪些主机会执行这个命令,不会实际执行
-M 要执行的模块路径,默认为/usr/share/ansible
-o 压缩输出,摘要输出
–private-key 私钥路径
-T ssh连接超时时间,默认是10秒
演示环境
三台虚拟机:rhel7.6的OS
server1(controller) 192.168.122.11 ansible管理端
server2(node1) 192.168.122.12 远程主机
server3(node1) 192.168.122.13 远程主机
Anisble参数使用简单示例
由于root权限调用node1权限太大,所以我们一般用普通用户的身份进入受控节点,以普通用户身份使用Ansible,相当于构建了用户级Ansible操作环境
创建一个普通用户,以普通用户身份使用ansible,并创建一个目录,拷贝一份配置文件 我们之后执行命令就在当前目录下,ansible会优先使用该目录下的配置文件 配置文件内容如下:
[devops@server1 ansible]$ cat ansible.cfg
[defaults]
inventory = ./hosts
编辑全局的主配置文件,将添加的远程主机删掉
[root@server1 ansible]
在当前目录下编辑主机清单文件,内容如下:
[root@server1 ansible]
[testserver2]
server2
[testserver3]
server3
回到上级目录,变更目录属主,以我们刚创建的devops用户身份登录 在两个远程主机也创建devops用户并给密码
[root@server2 ~]
[root@server2 ~]
Changing password for user devops.
passwd: all authentication tokens updated successfully.
[root@server3 ~]
[root@server3 ~]
Changing password for user devops.
passwd: all authentication tokens updated successfully.
做devops用户的免密,两个远程主机都要做,因为ansible是通过ssh连接的,如果不做免密,那每次都要输入密码很麻烦 测试调用ping模块成功! 可以加-k参数询问ssh的密码,-m表示模块,使用ping这个模块连接,出现pong回馈说明,成功连接 可以-a指定动作,查看挂载情况 指定创建文件 想忽略提示警告按照提示编辑配置文件
[devops@server1 ansible]$ vim ansible.cfg
加上如图参数
可以查看,文件创建成功 在这我改了下主机名和解析,配置中的主机名也一并修改 因为权限问题,在mnt下创建文件被拒绝,devops普通用户是没有权力执行的
到node1节点赋予devops用户所有权力
[root@node1 ~]
devops ALL=(ALL) ALL
加入–become参数,表示使用sudo执行命令,才能真正提权,而不是直接执行,还需搭配-K使用,-K输入sudo的密码。现在因为有权限创建文件成功 如果不想每次输入sudo密码,可以到node1修改设置
[root@node1 ~]
devops ALL=(ALL) NOPASSWD:ALL
修改前: 修改后:
构建Anisble清单
默认清单是用hosts文件,如果自己创建一个清单文件,无法读取,需要使用-i参数指定清单文件查看清单 可以设定嵌套清单,big大组包括test1和test2 通过指定主机名称或IP的范围可以简化Ansible主机清单(这个清单里包含了使用域名的和ip的)
ansible命令指定清单的正则表达式
*
:
:&
:!
~
~(str1|str2)
下图意思依次是: 列出172*,可以列出172这个组,也可以列出172的清单; 列出带172或192的; 列出在test1组中,也在test2组中的; 列出172开头的或者192开头的
Ansible配置文件参数详解
常用配置参数 | 含义 |
---|
#[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 |
inventory中添加清单路径 再次执行,可以列出 remote_tmp和local_tmp是远端的本地的临时文件路径。当执行ansible后,主机生成python临时脚本,ssh发送到受控主机,受控主机执行完删除该临时文件,主机也会删除临时文件 打开ask_pass后,每次执行ansible时询问连接用户密码 如果清空了~/.ssh/known_hosts文件,那么连接时,连接受控主机会询问是否接受受控主机发送过来的身份认证key,会要求输入yes,主机数量多时就不方便了。所以修改配置文件中的host_key_checking参数,关闭,不再询问是否接受 默认使用的模块是command,可以改为ping 在远程主机中用devops用户执行指令时,转换用户身份;转换用户身份执行命令时,用sudo调用;转换成root用户;执行sudo指令时,不提示输入密码 如果控制端是用root用户的身份执行需要在配置文件加上remote_user=devops ,我是devops用户所以不用,如下文件创建成功说明使用的是root身份
|