ansible全面介绍
ansible命令使用
ansible常用模块详解
yaml语法简介
ansible playbook基础
playbook变量,tags,handlers使用
playbook模板templates
playbook条件判断when
playbook字典with_items
ansible roles
运维自动化发展历程及技术应用
on-premises:本地部署
laas:基础设施即服务(硬件)
paas:平台即服务(系统)
saas:软件即服务(全系列提供)
云计算运维工程师核心职能
平台架构组建
日常运营保障
性能,效率优化
企业实际应用场景分析
- Dev开发环境
使用者:程序员
功能:程序员开发软件,测试BUG的环境
管理者:程序员
- 测试环境
使用者:QA测试工程师
功能:测试经过Dev环境测试通过的软件的功能
管理者:运维
说明:测试环境往往有多套,测试环境满足测试功能即可,不宜过多
- 测试人员希望测试环境有多套,公司的产品多产品线并发,即多个版本意味着多个版本同步测试
- 通常测试环境有多少套和产品线数量保持一样
- 发布环境:代码发布机,有些公司称为堡垒机(安全屏障)
使用者:运维
功能:发布代码至生产环境
管理者:运维(有经验)
发布机:往往需要有2台(主备)
- 生产环境
使用者:运维,少数情况开放权限给核心开发人员,极少数公司将权限完全开放给开发人员并且维护
功能:对用户提供公司产品的服务
管理者:只能是运维
生产环境服务器数量:一般比较多,且应用非常重要。往往需要自动工具协助部署配置应用。
- 灰度环境(生产环境的一部分)
使用者:运维
功能:在全量发布代码前将代码的功能面向少量精准用户发布的环境,可基于主机或用户执行灰度发布
案例:共100台生产服务器,先发布其中的10台服务器,这10台服务器就是灰度服务器
管理者:运维
灰度环境:往往该版本功能变更较大,为保险起见特意先让一部分用户优化体验该功能,待这部分用户使用没有重大问题的时候,再全面发布至所有服务器。
程序发布
预发布验证:
新版本的代码先发布到服务器(跟线上环境配置完全相同,只是未接入到调度器)
程序发布:
不能导致系统故障或造成系统完全不可用
不能影响用户体验
灰度发布:
发布路径:
/webapp/tuangou-1.1
/webapp/tuangou
/webapp/tuangou-1.2
发布过程:在调度器上下线一批主机(标记为maintanance状态)-->关闭服务—>部署新版本的应用程序-->启动服务-->在调度器上启用这一批服务器
自动化灰度发布:脚本、发布平台
#调度器:将用户的请求分别发送到后端真实应用服务器。
常用自动化运维工具:
ansible: python,agentless,中小型应用环境
saltstack: python,一般需要部署agent,执行效率更高
puppet: ruby,功能强大,配置复杂,重型,适合大型环境
fabric:python,agentless
chef: ruby,国内应用少
cfengine:
func:
ansible工作架构和原理
ansible特性:
模块化:调用特定的模块,完成特定任务
有Paramiko,PyYAML,Jinja2(模块语言)三个关键模块
支持自定义模块
基于python语言实现
部署简单,基于python和ssh(默认已安装)
安全,基于openssh
支持playbook编排任务
幂等性:一个任务执行1遍和执行n遍效果一样,不因重复执行带来意外情况
无需代理不依赖PKI(无需ssl)
可使用任何编程语言写模块
YAML格式,编排任务,支持丰富的数据结构
较强大的多层解决方案
ansible工作原理:
ansible架构:
ansible主要组成部分
ansible playbooks: 任务剧本(任务集),编排定义ansible任务集的配置文件,有ansible顺序依次执行,通常是json格式的YML文件
inventory:ansible管理主机的清单/etc/ansible/hosts
modules: ansible执行命令的功能模块,多数为内置核心模块,也可自定义
plugins:模块功能的补充,如连接类型插件、循环插件、变量插件、过滤插件等,该功能不常用
API:供第三方程序调用的应用程序编程接口
ansible: 组合inventory、API、modules、plugins的绿框,可以理解为是ansible的命令工具,其为核心执行工具
ansible命令执行来源:
user:普通用户,即system administrator
cmdb(配置管理数据库)API调用
public/private cloud API调用
user->ansible playbook->ansible
利用ansible实现管理的方式:
ad-hoc 即ansible命令,主要用于临时命令使用场景
ansible-playbook主要用于长期规划好的,大型项目的场景,需要有前提规划
ansible-playbook(剧本)执行过程:
将已有编排好的任务集写入ansible-playbook
通过ansible-playbook命令分拆任务集逐条ansible命令,按预定规则逐条执行
ansible主要操作对象:
hosts主机
networking网络设备
注意事项
执行ansible的主机一般称为主控端,中控,master或堡垒机
主控端python版本需要2.6以上
被控端python版本小于2.4需要安装python-simplejson
被控端如开启selinux需要安装libselinux-python
windows不能做主控端
安装
yum安装(centos7可直接安装)
yum -y install epel*
yum -y install ansible
#编译安装…
#Git安装…
#pip安装…
确认安装:ansible --version
相关文件
配置文件
/etc/ansible/ansible.cfg 主配置文件,配置ansible工作特性
/etc/ansible/hosts 主机清单
/etc/ansible/roles/ 存放角色的目录
#reles(角色):多个palybook的集合
程序
/usr/bin/ansible 主程序
/usr/bin/ansible-doc 查看配置文档,模块功能查看工具
/usr/bin/ansible-galaxy 下载/上传优秀代码或roles模块的官网平台
/usr/bin/ansible-playbook 定制自动化任务,编排剧本工具
/usr/bin/ansible-pull 远程执行命令的工具
/usr/bin/ansible-vault 文件加密工具
/usr/bin/ansible-console 基于console界面与用户交互的执行工具
主机清单inventory(库存)
inventory主机清单
ansible的主要功能在于批量主机操作,为了便捷地使用其中的部分主机,可以在inventory file中将其分组命名
默认的inventory file为/etc/ansible/hosts
inventory file可以有多个,且也可以通过Dynamic inventory来动态生成
ansible配置文件
ansible配置文件/etc/ansible/ansible.cfg(一般保持默认)
[defaults]
#inventory = /etc/ansible/hosts //主机列表配置文件
#library = /usr/share/my_modules/ //库文件存放目录
#remote_rmp = $HOME/.ansible/tmp //临时py命令文件存放在远程主机目录
#local_tmp = $HOME/.ansible/tmp //本机临时目录执行目录
#forks = 5 //默认并发数(同时5台机器执行)
#sudo_user = root //默认sudo用户
#ask_sudo_pass = True //每次执行ansible命令是否询问ssh密码
#ask_pass = True
#remote_port = 22
host_key_checking = False //检查对应服务器的host_key,建议取消注释
log_path = /var/log/ansible.log //日志文件