pssh 10-20台机器
系统装完之后,可以在系统上批量安装服务软件包,ansible由不同的模块组成,,目前为止已经有上千个模块,每个模块都是实现一个功能,由不同的组织开发,
1、运维自动化发展历程及技术应用
2、Ansible命令使用
3、Ansible常用模块详解
4、YAML语法简介
5、Ansible playbook基础 剧本,是一个脚本
6、Playbook变量、tags、handlers使用
7、Playbook模板templates
8、Playbook条件判断 when
9、Playbook字典 with_items
10、Ansible Roles
目录
ansible介绍:
ansible特性
实验环境
安装ansible
配置文件
配置主机清单
ansible命令
实现基于key验证
默认模块command
shell模块
#修改默认模块
scripts模块
copy模块:拷贝文件到远程主机
fetch模块 :抓取远程主机的信息
file模块
hostname主机模块
cron模块
YUM模块 适合红帽系列的系统
service模块
user模块
---------------------------
ansible-galaxy
andible-pull
#主机host清单inventory
#加密hello.yml
#交互式方式执行ansible-console
ansible介绍:
1、运维自动化介绍:
作用:上线新的软件,软件变更,软件升级
功能:运维自动化后期管理:装软件,装服务,推送服务,软件管理,适合一个规模的机器,专业级,自动化运维工具。
ansible是模块化组成,每个模块实现不同的自动化运维功能,模块由不同的人开发。ansiable到目前为止,已有上千个模块
ansible命令:由不同的子命令实现不同模块的功能
ansible playbook: ansible剧本,即命令,具体工作的规则(相当于一个脚本),用YAML语法实现
ansible roles:ansible角色(多个脚本的组合)
2、运维自动化发展历程:
@、本地部署(On-Premises):所有的工作均有自己公司的运维来做(安装机房空调,安装服务器,安装系统,机房规划,电力设施,软件开发,软件安装等)
@、基础设施即服务(IaaS):买一个半成品;如服务器,网络设施,机房等不用自己做,只需要购买就可以了(如阿里云的虚拟机:cpu,内存,带宽)
@、平台即服务(Paas):由一定的平台提供服务,即服务器,操作系统,开发平台,网络设施等均购买,自己开发软件部署即可(如阿里云的开发平台)
@、软件即服务(Saas):所有的一切均是购买(如微信,QQ,公司购买的邮件服务,云环境等基于网络的服务)
IAAS:Infrastructure as a Service :联想卖电脑等硬件
PAAS:Platform as a Service:卖操作系统
SAAS:Software as a Servie:卖android软件,红帽卖服务
图1
Develop开发环境
使用者:程序员
功能:程序员开发软件,测试BUG的环境
管理者:程序员
测试环境
使用者:QA测试工程师
功能:测试经过Dev环境测试通过的软件的功能
管理者:运维
说明:测试环境往往有多套,测试环境满足测试功能即可,不宜过多
1、测试人员希望测试环境有多套,公司的产品多产品线并发,即多个版本, 意味着多个版本同步测试
2、通常测试环境有多少套和产品线数量保持一样
企业实际应用场景分析
发布环境:代码发布机,有些公司为堡垒机(安全屏障)
使用者:运维
功能:发布代码至生产环境
管理者:运维(有经验)
发布机:往往需要有2台(主备)
生产环境
使用者:运维,少数情况开放权限给核心开发人员,极少数公司将权限完全 开放给开发人员并其维护
功能:对用户提供公司产品的服务
管理者:只能是运维
生产环境服务器数量:一般比较多,且应用非常重要。往往需要自动工具协 助部署配置应用。
企业实际应用场景分析
灰度环境(生产环境的一部分)
使用者:运维
功能:在全量发布代码前将代码的功能面向少量精准用户发布的环境,可基于主机或用户执行灰度发布
案例:共100台生产服务器,先发布其中的10台服务器,这10台服务器就 是灰度服务器
管理者:运维
灰度环境:往往该版本功能变更较大,为保险起见特意先让一部分用户优化 体验该功能,待这部分用户使用没有重大问题的时候,再全量发布至所有服务器
程序发布
程序发布要求:
不能导致系统故障或造成系统完全不可用
不能影响用户体验
预发布验证:
新版本的代码先发布到服务器(跟线上环境配置完全相同,只是未接入到调度器)
灰度发布:
发布路径:
/webapp/tuangou #软链接,指向/webapp/tuangou-1.1
/webapp/tuangou-1.1 #旧版本
/webapp/tuangou-1.2 #新版本
发布过程:在调度器上下线一批主机(标记为maintanance状态) --> 关闭服务 --> 部 署新版本的应用程序 --> 启动服务 --> 在调度器上启用这一批服务器
自动化灰度发布:脚本、发布平台
自动化动维应用场景
文件传输
命令执行
应用部署
配置管理
任务流编排
ansible python语言编写,控制端/被控制端;主控/被控;被控制端装一个(agent,ssh) 一对多
ansible的被控制端基于ssh代理,需要把所有机器实现ssh的key验证,可以把主控端的key对复制到所有被控端,适合几百台机器。。
2012-03-09,发布0.0.1版,红帽收购
2015-10-17,Red Hat宣布收购
#Saltstack:python语言,一般需部署agent,执行效率高,适合千台服务器规模。
#Puppet:ruby语言,功能强大,配置复杂,重型,适合大型环境,上万台服务器
ansible创始人为Michael DeHaan ,其还开发了cobbler自动化安装操作系统工具
https://github.com/ 网址搜索ansible有源代码,可以查看,如图2
ansible特性
模块化:调用特定的模块,完成特定任务
有Paramiko,PyYAML,Jinja2(模板语言)三个关键模块
支持自定义模块
基于Python语言实现
部署简单,基于python和SSH(默认已安装),agentless
安全,基于OpenSSH
支持playbook编排任务
幂等性:一个任务执行1遍和执行n遍效果一样,不因重复执行带来意外情况
无需代理不依赖PKI(无需ssl)
可使用任何编程语言写模块
YAML格式,编排任务,支持丰富的数据结构
较强大的多层解决方案
ansible命令Ad-Hoc 可以管理liunx和网络,windows系统也可以管理(用的少)
ansible playbook 脚本
ansible role playbook集合
ANSIBLE PL AYBOOKS:任务剧本(任务集),编排定义Ansible任务集的配置 文件,由Ansible顺序依次执行,通常是JSON格式的YML文件
INVENTORY:Ansible管理主机的清单/etc/anaible/hosts
MODULES:Ansible执行命令的功能模块,多数为内置核心模块,也可自定义
PLUGINS:模块功能的补充,如连接类型插件、循环插件、变量插件、过滤插件等,该功能不常用
API:供第三方程序调用的应用程序编程接口
ANSIBLE:组合INVENTORY、API、MODULES、PLUGINS的绿框,可以理解 为是ansible命令工具,其为核心执行工具
实验环境
3个centos7,1个centos6 。利用一个centos7(192.168.31.7做主控端),其余均为被控制端
[root@centos7:~]# hostname ansible
[root@centos7:~]# exit
[root@ansible:~]#
[root@centos6 ~ ]#
[root@centos7:~]# hostnamectl set-hostname centos7-1
[root@centos7-1:~]#
[root@cos7:~ ]# hostnamectl set-hostname centos7-2
[root@cos7:~ ]# exit
logout
Connecting to 192.168.31.27:22...
Connection established.
To escape to local shell, press 'Ctrl+Alt+]'.
Last login: Sat Jul 28 19:05:27 2018 from 192.168.31.1
[root@centos7-2:~ ]#
安装ansible
[root@ansible:~]# yum install ansible
[root@ansible:~]# ansible --version
ansible 2.6.1
config file = /etc/ansible/ansible.cfg #主配置文件
configured module search path = [u'/root/.ansible/plugins/modules', u'/usr/share/ansible/plugins/modules']
ansible python module location = /usr/lib/python2.7/site-packages/ansible
executable location = /usr/bin/ansible
python version = 2.7.5 (default, Apr 11 2018, 07:36:10) [GCC 4.8.5 20150623 (Red Hat 4.8.5-28)]
[root@ansible:~]# rpm -ql ansible #ansible 组成文件
[root@ansible:~]# rpm -ql ansible | grep .service #没有对应的服务
ansible不是一个服务,只是一个管理软件
[root@ansible:~]# which ansible
/usr/bin/ansible
[root@ansible:~]# ll /usr/bin/ansible
lrwxrwxrwx 1 root