自动化运维利器Ansible要点汇总
- 部署简单,只需在主控端部署Ansible环境,被控端无需做任何操作,默认使用SSH协议对设备进行管理;
- 配置简单、功能强大、扩展性强;
- 支持API及自定义模块,可通过Python轻松扩展;
- 通过Playbooks来定制强大的配置、状态管理;
- 幂等性:一种操作重复多次结果相同
Ansible工作流程
ansible.cfg主要配置指定host文件路径,指定roles_path参数,其它参数默认。
部署Ansible的控制机需要python 2.7及以上,需要安装paramiko模块、PyYAML、Jinja2、httplib2等模块,若被管节点为windows,则需要有powershell3并制授权远程管理。
控制节点交互一般采用公钥认证,这需要将主机节点的公钥发放到所有被管节点,也可采用密码形式通讯,但由于需要在hosts文件中明文标出不安全 不推荐,配置密码:
/etc/ansible/hosts
192.168.0.200 ansible_ssh_user=root ansible_ssh_pass=123@abc
主机清单(host inventory)定义了管理主机的策略,需要在host文件中写入主机的IP地址即可,若操作的主机未在清单中会提示错误。
ansible命令执行过程
1、加载自己的配置文件,默认/etc/ansible/ansible.cfg2、查找对应的主机配置文件,找到要执行的主机或者组。3、加载自己对应的模块文件,如command4、通过ansible将模块或命令生成对应的临时py文件,并将该文件传输至远程服务器5、对应执行用户家目录的.ansible/tmp/XXX/XXX.PY文件6、给文件+x执行7、执行并返回结果8、删除临时py文件,sleep 0 退出。
ansible命令
获取192.168.0.123主机信息
ansible 192.168.0.123 -m shell -a "uname -a"
ansible常用模块
- command、shell、raw、script执行shell命令
- copy:复制文件到远程主机,可以改权限等
- file设置文件目录属性等
- fetch 从远程某主机获取文件到本地
- service 服务程序管理,启动停止重启服务等操作
- user管理用户账号
- script在指定节点运行服务端的脚本
Playbooks中的一些技巧
webservice.yml为入口,files目录存放静态文件,handlers存放一些task的handler,templates存放jinja2模板文件,vars存放变量文件。
ansible-playbook执行logstash安装剧本
ansible-playbook /logstash/site.yml
delegate_to
- name: get statuscommand: get k8s statusdelegate_to: "192.168.0.9"
- name: get statuslocal_action : command 'get k8s status'
run_once
run_once: true来指定该task只能在某一台机器上执行一次. 可以和delegate_to 结合使用,指定在"192.168.0.9"上执行一次升级数据库操作
- command: /opt/upgrade_db.py
run_once: true
delegate_to: "192.168.0.9"
如果没有delegate_to, 那么这个task会在第一台机器上执行
ignore_errors
- name: 'Delete logs'shell: rm -f /var/log/nginx/errors.logignore_errors: true
register 注册变量
使用 debug 模块与 register 变量,输出网络信息
- hosts: proxyservers
tasks:
- name: "get host port info"
shell: netstat -lntp
register: host_port- name: "print host port"
debug:
#msg: "{{ host_port }}" # 输出全部信息
#msg: "{{ host_port.cmd }}" # 引用方式一
msg: "{{ host_port['stdout_lines'] }}" # 引用方式二
connection: local
- name: 创建 aggregator proxy证书签名请求
template: src=aggregator-proxy-csr.json.j2 dest=/ssl/aggregator-proxy-csr.json
connection: local
until轮询等待
轮询等待kube-apiserver启动完成,查看api服务是否running状态,重试10次,每次间隔3秒
- name: 轮询等待kube-apiserver启动
shell: "systemctl status kube-apiserver.service|grep Active"
register: api_status
until: '"running" in api_status.stdout'
retries: 10
delay: 3
tags: upgrade_k8s, restart_master
when判断
当系统为centos等时执行centos.yml任务
- import_tasks: centos.yml
when: 'ansible_distribution in ["CentOS","RedHat","Amazon","Aliyun"]'
内置变量inventory_hostname
inventory_hostname变量可以获取到被操作的当前主机的主机名称,这里所说的主机名称并不是linux系统的主机名,而是对应主机在清单中配置的名称
如果使用IP配置主机,inventory_hostname的值就是IP,如果使用别名,inventory_hostname的值就是别名
如只给k8s主节点分发配置文件
- name: 分发kubeconfig配置文件
copy: src=cluster_dir/item dest=/etc/kubernetes/item
when: "inventory_hostname in groups['kube_master']"
notify指令和handlers
如果在某个task中定义了notify指令,当Ansible在监控到该任务 changed=1时,会触发该notify指令所定义的handler,然后去执行handler,需要注意的是hander是被触发而被动执行的。
网上示例,安装httpd、复制配置文件到远端主机、启动httpd服务:
cat apache.yml
- hosts: webservers
remote_user: root
tasks:
- name: install apache
yum: name=httpd state=latest
- name: install configure file for httpd
copy: src=/root/conf/httpd.conf dest=/etc/httpd/conf/httpd.conf
notify:
- restart httpd #通知restart httpd这个触发器
- check httpd #可以定义多个触发器
- name: start httpd service
service: enabled=true name=httpd state=started
handlers: #定义触发器,和tasks同级
- name: restart httpd #触发器名字,被notify引用,两边要一致
service: name=httpd state=restart
- name: check httpd
shell: netstat -ntulp | grep 80
ansible管理windows
环境要求Ansible管理主机Linux系统,远程主机的通信方式也由SSH变更为PowerShell,同时管理机必须预安装Python的Winrm模块。
Windows客户端主机开启Winrm服务,PowerShell需3.0+版本且Management Framework 3.0+版本,实测Windows 7 SP1和Windows Server 2008 R2及以上版本系统经简单配置可正常与Ansible通信。
具体安装内容这里不作详情介绍。
自动化运维利器Ansible要点汇总的更多相关文章
- 自动化运维工具Ansible详细部署 (转载)
自动化运维工具Ansible详细部署 标签:ansible 原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://sofar.blog. ...
- 自动化运维工具Ansible详细部署 - 人生理想在于坚持不懈 - 51CTO技术博客
自动化运维工具Ansible详细部署 - 人生理想在于坚持不懈 - 51CTO技术博客 自动化运维工具Ansible详细部署
- CentOS7Linux中自动化运维工具Ansible的安装,以及通过模块批量管理多台主机
使用自动化运维工具Ansible集中化管理服务器 Ansible概述 Ansible是一款为类Unix系统开发的自由开源的配置和自动化工具.它用Python写成,类似于saltstack和Puppet ...
- 自动化运维工具Ansible介绍
一个由 Python 编写的强大的配置管理解决方案.尽管市面上已经有很多可供选择的配置管理解决方案,但他们各有优劣,而 ansible 的特点就在于它的简洁. 让 ansible 在主流的配置管理系统 ...
- 自动化运维之ansible
第三十九课 自动化运维之ansible 目录 十五. ansible介绍 十六. ansible安装 十七. ansible远程执行命令 十八. ansible拷贝文件或目录 十九. ansible远 ...
- 在CentOS7.6上安装自动化运维工具Ansible以及playbook案例实操
前言 Ansible是一款优秀的自动化IT运维工具,具有远程安装.远程部署应用.远程管理能力,支持Windows.Linux.Unix.macOS和大型机等多种操作系统. 下面就以CentOS 7.6 ...
- 自动化运维工具-Ansible基础
目录 自动化运维工具-Ansible基础 什么是Ansible 同类型软件对比 Ansible的功能及优点 Ansible的架构 Ansible的执行流程 安装Ansible ansible配置文件 ...
- 如何高效地远程部署?自动化运维利器 Fabric 教程
关于 Python 自动化的话题,在上一篇文章中,我介绍了 Invoke 库,它是 Fabric 的最重要组件之一.Fabric 也是一个被广泛应用的自动化工具库,是不得不提的自动化运维利器,所以,本 ...
- 自动化运维工具-Ansible之7-roles
自动化运维工具-Ansible之7-roles 目录 自动化运维工具-Ansible之7-roles Ansible Roles基本概述 Ansible Roles目录结构 Ansible Roles ...
随机推荐
- sass和js的联动(共享变量)
一般做共享变量用于主题功能 假设我们在xxx.scss中声明了一个 theme:blue,我们在 js 中该怎么获取这个变量呢?我们可以通过import variables from '@/style ...
- 泛微OA E-cology(CNVD-2019-32204)远程命令执行漏洞复现分析
漏洞复现 影响版本: E-cology 7.0 E-cology 8.0 E-cology 8.1 E-cology 9.0 直接在网站根目录后加入组件访问路径 /weaver/bsh.servl ...
- 截断误差VS舍入误差
截断误差:是指计算某个算式时没有精确的计算结果,如积分计算,无穷级数计算等,使用极限的形式表达的,显然我们只能截取有限项进行计算,此时必定会有误差存在,这就是截断误差. 舍入误差:是指由于计算机表示 ...
- 一起学习PHP中GD库的使用(二)
在日常的开发过程中,GD 库最常用的功能就是帮我们对图片进行一些处理,当然,除了处理已有的图片之外,它也可以直接来画图,就像我们最常见的图片验证码.今天的内容主要就是和画图有关,所以最后我们也会做一个 ...
- PHP中的PDO对象操作学习(一)初始化PDO及原始SQL语句操作
PDO 已经是 PHP 中操作数据库事实上的标准.包括现在的框架和各种类库,都是以 PDO 作为数据库的连接方式.基本上只有我们自己在写简单的测试代码或者小的功能时会使用 mysqli 来操作数据库. ...
- PHP中的对象比较
在之前的文章中,我们讲过PHP中比较数组的时候发生了什么?.这次,我们来讲讲在对象比较的时候PHP是怎样进行比较的. 首先,我们先根据PHP文档来定义对象比较的方式: 同一个类的实例,比较属性大小,根 ...
- javascript 无限分类
* 根据php无限分类实现js版本的 /** * 根节点 parentid=0, 每个节点都有id, parentid字段 * @param items * @returns {*} */ funct ...
- selenium下拉选择框处理
HTML: (一)通过xpath层级标签定位 driver.find_element_by_xpath(".//*[@id='Resolution']/option[2]").cl ...
- 如何实现Web视频聊天?
在网页里实现文字聊天是比较容易的,但若要实现视频聊天,就比较麻烦了.这里,我们将实现一个简单的网页版视频聊天Demo,可以支持所有类型的浏览器. 本Demo除了视频聊天功能外,还包含以下功能: 1.上 ...
- R7000 电脑调整亮度
R7000 电脑亮度太亮,想调整亮度,fn+F5,F6 不起作用,需要调整显卡的设置