Ansible 常用运维技巧(非模块类)

Ansible简介

Ansible是基于Python开发的自动化运维工具,基于SSH协议通信,通过Jinja2实现模板功能,无需安装客户端,部署简单。
其工作场景主要是配置管理、批量管理服务器。

Ansible安装参考

官网:https://docs.ansible.com/ansible/latest/installation_guide/intro_installation.html#latest-release-via-dnf-or-yum

ansible.cfg常用优化参数

[defaults]
callback_whitelist = profile_tasks
inventory      = /data/ansible/dev # 指定当前环境的配置文件
pattern        = *
forks          = 20
poll_interval  = 15
sudo_user      = root
transport      = smart
remote_port    = 22
module_lang    = C
gathering = smart # 优化速度
fact_caching_timeout = 30
roles_path    = /data/ansible/roles # 指定当前环境的roles路径
host_key_checking = False # 首次访问也不需要输入yes
require_sudo = False
sudo_exe = sudo
timeout = 10
remote_user = root # 远程执行命令用户,视情况吧
module_name = shell # 修改默认模块为shell
ansible_managed = Ansible managed: {file} modified on %Y-%m-%d %H:%M:%S by {uid} on {host}
deprecation_warnings = False

打通key认证

主控端:
ssh-keygen -t rsa
ssh-copy-id -i /root/.ssh/id_rsa.pub root@192.168.170.133
测试成功:
ssh root@192.168.170.133

变量

1.变量来源

inventory中定义
playbook中定义
include文件和角色中定义变量
系统facts ansible hostname -m setup
local facts

2.变量使用

{{ ansible_eth0[“ipv4”][“address”] }} 或者 {{ ansible_eth0.ipv4.address }}. 复杂变量可以像字典或者熟悉一样访问.

3.内置变量

hostvars 可以让你调用其他host的变量和facts, 即使你没有在这个机器上执行过playbook, 你仍然可以访问变量, 但是不能访问facts. 例如: {{ hostvars[‘test.example.com’][‘ansible_distribution’] }}
group_names 当前host所在的group的组名列表. 包括其父组
groups 所有组包括组中的hosts
inventory_hostname 配置在inventory文件中当前机器的hostname
play_hosts 执行当前playbook的所有机器的列表
inventory_dir inventory文件的路径
inventory_file inventory文件的路径和文件名
role_path 当前role的路径

打印所有变量

---
- hosts: "your host or group"
  tasks:
    - debug: var=vars

4.变量优先级

roles/x/defaults/main.yml -> inventory file -> roles/x/vars/main.yml -> 调用role时的参数 -> role play 中的变量 -> 执行命令-e 传入的变量.

playbook示例

- hosts: tt  ##主机组名称,一般在/etc/ansible/hosts 里面定义
  remote_user: root  ##以root身份执行
  serial: 0 ## 并发数
  tasks:  ##任务列表和行为
    - name: ensure apache is the latest version  ##打印
      yum: state=latest name=httpd  #使用yum模块安装

    - name: apache configure file  ##打印
      copy: src=/root/httpd.conf dest=/etc/httpd/conf/httpd.conf force=yes  #使用copy模块
      notify:  ##通知,最后被触发,调用handlers模块的restart httpd列表,一般用于修改配置之后重启服务
        - restart httpd
  handlers:  ##是tasks列表,与tasks没啥区别
    - name: restart httpd
      service: name=httpd state=restarted

常用技巧

  • 执行指定tag:ansible-playbook site-role.yml --tags=“start”
  • 跳过指定tag:ansible-playbook example.yml --skip-tags “start”
  • 列出所有task(-e表示命令行传参):ansible-playbook --list-tasks site-role.yml -e “rolename=cronolog”
  • 循环with_items,调用其中的元素使用{{ item }}
    with_items:
    - git
    - ntpdate
    - … …
  • 使用or需要(): when: ("{{ name }}" == “apps-manager-service”) or ("{{ name }}" == “base-feed-service”)
  • 配置文件可以通过template统一管理多环境配置信息,结合环境inventory和group_vars下的环境变量文件

优化加速

1.计时插件“ansible-profile”

cd /etc/ansible
mkdir callback_plugins
cd callback_plugins
wget https://raw.githubusercontent.com/jlafon/ansible-profile/master/callback_plugins/profile_tasks.py
ansible.cfg
[defaults]
callback_whitelist = profile_tasks

2.开启ControlPersist

vim ~/.ssh/config
Host *
Compression yes
ServerAliveInterval 60
ServerAliveCountMax 5
ControlMaster auto
ControlPath ~/.ssh/sockets/%r@%h-%p
ControlPersist 1h

3.启用pipelining=True (利用管道替换默认的拷贝模块后再执行的操作)

4.fact缓存

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值