跳到主要内容

其他

1、ansible限制后台运行时间

后台运行总是耗费比较长的时间,从而其状态在随后总是能够查看的,如果踢掉主机,又不想轮训,如下:
[root@ansible-server ~]# ansible web-nodes -B 3600 -P 0 -a "/usr/bin/long_running_operation --do-stuff"

如果要检查服务的状态,可以使用模块async_status,传递job id,如下:
[root@ansible-server ~]# ansible web-nodes -m async_status -a "jid=488359678239.2844"

轮训是内建的, 如下:
[root@ansible-server ~]# ansible web-nodes -B 1800 -P 60 -a "/usr/bin/long_running_operation --do-stuff"

解释说明:
参数-B表示运行最多30分钟,30*60,-P 60 轮训其状态每60S,
当时间运行在-B参数后的时间之后,此服务会被停止运行。
可以使用参数—forksvalue,来确保服务尽快运行

setup和debug -a 'var=vars'

3、Ansible的委托、并发、任务超时

Ansible-playbook 并发运行async、poll, 即ansible的异步执行 ansible方便在于能批量下发,并返回结果和呈现。简单、高效。但有的任务执行起来却不那么直接,可能会花比较长的时间,甚至可能会比ssh的超时时间还要长。这种情况任务是不是没法执行了?

ansible考虑到了这种情况,解决方法就是让下发的任务执行的连接变为异步:任务下发之后,长连接不再保持,而是每隔一段时间轮询结果,直到任务结束。这就需要在playbook的任务中加入两个参数:async和poll。其中: -> async参数值代表了这个任务执行时间的上限值。即任务执行所用时间如果超出这个时间,则认为任务失败。此参数若未设置,则为同步执行。 -> poll参数值代表了任务异步执行时轮询的时间间隔。

ansible默认只会创建5个进程,所以一次任务只能同时控制5台机器执行,那如果你有大量的机器需要控制,或者你希望减少进程数,那你可以采取异步执行。ansible的模块可以把task放进后台,然后轮询它.这使得在一定进程数下能让大量需要的机器同时运作起来。使用async和poll这两个关键字便可以并行运行一个任务。async这个关键字触发ansible并行运作任务,而async的值是ansible等待运行这个任务的最大超时值,而poll就是ansible检查这个任务是否完成的频率时间。

3.1、异步和轮询 Ansible 有时候要执行等待时间很长的操作, 这个操作可能要持续很长时间,设置超过ssh的timeout,这时候你可以在step中指定async 和 poll 来实现异步操作。 async 表示这个step的最长等待时长,如果设置为0,表示一直等待下去直到动作完成。 poll 表示检查step操作结果的间隔时长。

3.2、ansible-playbook执行时的并发限制

serial参数在ansible-1.8以后就开始支持百分比 最大失败百分比

4、委托 通过"delegate_to", 用户可以把某一个任务放在委托的机器上执行.

RUN ONCE

playbook 中的 register

  • import_playbook:

设置playbook 触发(notify)信息,接受触发(handlers)和tasks 平行

6.3 限定playbook 执行范围 --limit

6.4 用户与权限设置 --remote-user 在playbook中,如果在 hosts 字段下没有定义users 关键字,那么Ansible将会使用你在Inventory 文件(/etc/ansible/hosts)中定义的用户,如果Inventory 文件中也没定义用户,ansible 将默认使用系统用户身份来通过ssh连接远程主机,在管理控制主机运行playbook内容。 也可以直接在ansible-playbook 中使用--remote-user选项来指定用户。

--ask-sudo-pass 在某些情况下,需要传递sudo 密码到远程主机,来保证sudo命令的正常运行时,可以以使用--ask-sudo-pass(-K) 选项来交互式输入密码

--sudo 使用--sudo 选项,可以强制所有 playbook 都使用sudo用户,同时使用 --sudo-user选项指定sudo 可以执行那个用户的权限。如果不指定,则默认以root 身份运行 比如当前 用户 ansible 想以 keme 的身份运行 playbook ,命令如下:

7 安全管理优化

在centos/redhat 中ssh 服务的主配置文件 /etc/ssh/sshd_config 中设置
PasswordAuthentication no #禁止 ssh 使用密码认证连接。如此一来就杜绝了所有针对密码的暴力破解攻击。
PermitRootLogin no #禁止 root 用户远程登录。建议只使用普通用户进行远程登录,并使用sudo命令来行使大部分 root 权限。如果实在需要使用 root 用户进行交互式管理,可以使用普通用远程连接到主机,然后通过 su 命令切换到root用户,这样做更加安全
# 明确指定允许或禁止的远程登录用户。使用AllowUser和 DenyUsers 来指定哪些用户可以登录,哪些用户不能登录。比如,只允许用户 keme 登录,可以设置为AllowUsers keme; 允许除了 xixi 以为的其他用户登录,可以设置为:DenyUsers xixi
Port 2636 # 使用非默认端口。ssh 的默认端口为22,将其改为任意不与其他服务冲突的端口(建议采用1024以上的端口号)将会使系统更为安全。在ssh配置文件中设置Port 2636,即可修改ssh默认端口为2849.

禁止 root 用户远程登录并充分利用 sudo;

Ansible 有不同的方法来覆盖变量,也有不同的优先级。 优雅地覆盖组变量