ansible
运维自动化发展历程及技术应用
早期一个公司需要花费大量的技术人员和资源来搭建自己需要的一切,比如networking,storage,servers,virtualization,OS,Middleware,Runtime,Date,Application
下一个阶段硬件基本架构通过购买,其他的自己搭建,这样就节省了很多资源的消耗,这就是IAAS
之后是PAAS阶段,操作软件,开发环境也通过购买
最后就是全部购买,直接使用,现在大部分软件都是这样的,这就是SAAS
云计算运维工程师核心职能
平台架构组建:负责参与并审核架构设计的合理性和可运维性,搭建运维平台技术架构,通过开源解决方案,以确保在产品发布之后能高效稳定的运行,保障并不断提升服务的可用性,确保用户数据安全,提升用户体验。
日常运营保障:负责用运维技术或者运维平台确保产品可以高效的发布上线,负责保障产品7*24小时稳定运行,对出现的问题快速定位并解决,日常工作中不断优化系统构架和部署的合理性,提升系统服务的稳定性。
性能效率优化:用自动化工具或平台提升软件在研发周期中的工作效率,不断优化系统架构,提升部署效率,优化资源利用率支持产品的不断迭代,需要不断的进行架构优化调整,以确保整个产品能够在功能不断丰富和复杂的条件下,同时保持高可用性。
linux运维工程师职能划分
开发,bug修复,更新数据(开发)
测试用例,性能评测,条件构造(测试)
review,提交代码,打包(上线准备)
配置修改,预发部署,发布验收(预上线)
环境准备,上线部署,配置修改,添加监控(上线)
ansible
ansible是ansible的核心程序
Host Lnventory记录了每一个由ansible管理的主机信息,包括ssh端口,root密码账号,ip地址等等
Playbooks是yaml的格式文件,多个任务定义在一个文件中,使用时可以统一调度,playbooks就是用来定义哪些主机需要调用哪些模块来完成
Core Modules:ansible执行任何管理任务都不是有ansible自己完成,而是由核心模块完成,ansible管理主机之前,先调用core modules中的模块,然后指明管理Host Lnventory中的主机,来完成管理主机
Custom Modules是自定义模块,完成ansible核心模块无法完成的功能,此模块支持任何语言编写
Connection Plugins是连接插件,ansible和host通信使用
Ansible的优点:
- Stupied Simple ,上手简单,学习曲线平滑
- SSH by default ,安全,无需安装客户端
- 配置简单、功能强大、扩展性强
- 支持API及自定义模块,可通过Python轻松扩展
- 通过Playbooks来定制强大的配置、状态管理
- 提供一个功能强大、操作性强的Web管理界面和REST API接口——AWX平台
- 幂等性:一种操作重复多次结果相同
ansible安装:
- yum install epel-release
- yum install ansible
ansible配置客户端
免密登录:
server: ssh-keygen
scp id_rsa.pub root@192.168.254.25:/root/.ssh/authorized_keys
也可以用参数的方式:
vim /etc/ansible/hosts
ansible_ssh_user=root ansible_ssh_port=22 ansible_ssh_pass=root
ansible是一款开源的自动化运维软件,底层是用python编写,核心模块paramiko,jinja2和yaml。
ansible常用命令
- ansible-doc -l #查看支持的模块
- ansible-doc -s MODEL_NAME #查看模块用法
- ansible命令应用基础
- ansible <host-pattern> [options]
-f forks:启动并发线程数
-m model_name:要使用的模块
-a args:特有的参数
- ansible all -m ping #查看client端是否正常ping通
- ansible webserver -m setup #查看客户端信息
- ansible webserver -m copy -a 'src=/root/git_test/code.txt dest=/root/test' #copy文件到cient端
- ansible webserver -m user -a "name=test state=present" #创建test用户
- ansible webserver -m user -a "name=test state=absent" #删除test用户
- ansible webserver -m yum -a ‘name=epel-relese state=latest‘ #yum安装
- ansible webserver -m service -a ‘name=httpd state=stopped enabled=no‘ #停止httpd服务
- ansible webserver -m script -a ‘/tmp/test.sh‘ #运行脚本
- ansible webserver -m command 'date' #查看时间
playbooks
- tasks
- variables
- templates
- handlers
- roles
yaml介绍
yaml是一个可读性高的用来表达资料序列的格式,yaml参考了其他多种语言,包括:xml,c语言,python,perl以及电子邮件格式RFC2822等,ClarkEvans在2001年在首次发表了这种语言。
- yaml的可读性好
- yaml和脚本语言的交互性好
- yaml使用实现语言的数据类型
- yaml有一个一致的信息模型
- yaml易于实现
- yaml可以基于流程来处理
- yaml表达能力强,扩展性好
ansible hoc模式:
ansible的默认并发输是5台,如果想修改并发数可以使用-f
查看ansible是否可以管理客户端:ansible test -m ping (test)是配置文件中配置的组名
查看支持的模块:ansible-doc -l
查看模块的用法:ansible-doc -s MODEL_NAME
查看客户端信息:ansible -m setup
copy文件到client端:ansible IP -m copy -a “src=/root/git_test/code/txt dext=/root/test” (也可以加入属主owner,属组group,权限mode等)
创建test用户:ansible IP -m user -a "name= test state=present"
删除test用户:ansible IP -m user -a "name= test state=absent"
yum安装:ansible IP -m yum -a "name=epel-release state=latest"
停止httpd服务:ansible IP -m service -a "name=httpd state=stopped enabled=no"
运行脚本:ansible IP -m script -a "/tmp/test.sh"
查看时间:ansible IP -m command -a "date"
ansible出了使用hoc命令行模式以外,还可以使用playbooks和roles的模式调用,下面我们来看一下怎么使用
playbooks
简单示例:
变量的使用:三种方式
1.第一种:
第二种:
编辑/etc/ansible/hosts文件
[testhosts:vars]
file=httpd.conf
packages=tree
第三种:
执行playbook文件时给予变量--extra-vars
ansible-playbook test.yaml --extra-vars "touch_file=test.txt"
注册变量的使用:把上一次的输出结果作为value赋予给变量的key
迭代的使用:
触发器的使用:
模板的使用:
roles
roles的作用是减少代码的复写
通过这个树状图能看出来,roles使用相当于将playbook的功能以文件的形式模块化,当我想使用的时候,直接在site.yaml中调用,这是不是和我们使用内置函数有点相似啊
让我们看一下具体的写法:和之前的playbook写法有一些区别
site.yaml:
tasks/main.yaml
files:存放文件
handlers:触发器
template:模板拷贝