运维自动化之ansible
pxe 一键安装操作系统
操作系统只是提供一个平台
lnmp 需要多软件协同完成的一个简单项目
服务器正常运行 日常运维 巡检
服务器上的软件正常运行 zabbix 普罗米修斯
系统调优,架构调优
云计算核心职能
-
搭建平台架构
-
日常运营保障
-
性能效率优化
相关工具
-
代码管理(SCM):GitHub、GitLab、BitBucket、SubVersion
-
构建工具:maven、Ant、Gradle
-
自动部署:Capistrano、CodeDeploy
-
持续集成(CI):Jenkins、Travis
-
配置管理:Ansible、SaltStack、Chef、Puppet
-
容器:Docker、Podman、LXC、第三方厂商如AWS
-
编排:Kubernetes、Core、Apache Mesos
-
服务注册与发现:Zookeeper、etcd、Consul (大数据工程师去搞)
-
脚本语言:python、ruby、shell、go
-
日志管理:ELK、Logentries
-
系统监控:Prometheus、Zabbix、Datadog、Graphite、Ganglia、Nagios
-
性能监控:AppDynamics、New Relic、Splunk
-
压力测试:JMeter、Blaze Meter、loader.io
-
应用服务器:Tomcat、JBoss、IIS
-
Web服务器:Apache、Nginx
-
数据库:MySQL、Oracle、PostgreSQL等关系型数据库;mongoDB、redis等NoSQL数据库
-
项目管理(PM):Jira、Asana、Taiga、Trello、Basecamp、Pivotal Tracker
自动化脚本 , 去写脚本,
批量处理工具,ansible 替代脚本 同一时间下发 给500 台机器 新建 /data
幂等性
1 Ansible 发展史及功能
作者:Michael DeHaan( Cobbler pxe kikstar 与 Func 作者)ansible 的名称来自科幻小说《安德的游戏》中跨越时空的即时通信工具,使用它可以在相距数光年的距离,远程实时控制前线的舰队战斗2012-03-09,发布0.0.1版,2015-10-17,Red Hat宣布1.5亿美元收购。
官网:https://www.ansible.com/ 官方文档:https://docs.ansible.com/
1.1Ansible 功能
有几千个模块,挑选十几个应用
-
批量执行远程命令,可以对远程的多台主机同时进行命令的执行
-
批量安装和配置软件服务,可以对远程的多台主机进行自动化的方式配置和管理各种服务
-
编排高级的企业级复杂的IT架构任务, Ansible的Playbook和role可以轻松实现大型的IT复杂架构
-
提供自动化运维工具的开发API, 有很多运维工具,如jumpserver(堡垒机)就是基于 ansible 实现自动化管理功能
1.2 Ansible 特性
-
模块化:调用特定的模块完成特定任务,支持自定义模块,可使用任何编程语言写模块(账号,软件等)
-
Paramiko(python对ssh的实现),PyYAML,Jinja2(模板语言)三个关键模块
-
基于Python语言实现
-
部署简单,基于python和SSH(默认已安装),agentless,无需代理不依赖PKI(无需ssl)
-
安全,基于OpenSSH
-
幂等性:一个任务执行1遍和执行n遍效果一样,不因重复执行带来意外情况,此特性非绝对
-
支持playbook编排任务,YAML格式,编排任务,支持丰富的数据结构 剧本演员要按照 系统按照你规定的方式去执行命令
-
较强大的多层解决方案 role
1.3 Ansible 架构
1.3.1 Ansible组成
-
INVENTORY:Ansible管理主机的清单 /etc/anaible/hosts 需要管理的服务清单
-
MODULES:Ansible执行命令的功能模块,多数为内置核心模块,也可自定义(与开发有关)
-
PLUGINS:模块功能的补充,如连接类型插件、循环插件、变量插件、过滤插件等,该功能不常用(与开发有关)
-
API:供第三方程序调用的应用程序编程接口(与开发有关)
1.3.2 Ansible 命令执行来源
-
USER 普通用户,即SYSTEM ADMINISTRATOR
-
PLAYBOOKS:任务剧本(任务集),编排定义Ansible任务集的配置文件,由Ansible顺序依次执行,通常是JSON格式的YML文件
-
CMDB(配置管理数据库) API 调用
-
PUBLIC/PRIVATE CLOUD API调用
2.Ansible 安装和入门
无论版本多低,只要基础功能有就行,
2.1安装
[root@mcb-11-8 ~]#yum install epel-release.noarch -y 先按装epel源 [root@mcb-11-8 ~]#yum install ansible -y
2.2查看基本信息
[root@mcb-11-8 ~]#ansible --version ansible 2.9.27 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, Aug 4 2017, 00:39:18) [GCC 4.8.5 20150623 (Red Hat 4.8.5-16)]
2.3相关文件
-
/etc/ansible/ansible.cfg 主配置文件,配置ansible工作特性,也可以在项目的目录中创建此文件,当前目录下如果也有ansible.cfg,则此文件优先生效,建议每个项目目录下,创建独有的ansible.cfg文 件
-
/etc/ansible/hosts 主机清单
-
/etc/ansible/roles/ 存放角色的目录
[root@mcb-11-8 ~]#vim /etc/ansible/hosts
[root@mcb-11-8 ~]#ansible -m ping 192.168.11.8 -k
[root@mcb-11-8 ~]#ssh 192.168.11.4 The authenticity of host '192.168.11.4 (192.168.11.4)' can't be established. ECDSA key fingerprint is SHA256:f5CWB5B1Xrf1hEtCK5pFcG+mmkQv+skC9fe3Kaa7B9w. ECDSA key fingerprint is MD5:d0:e4:b1:5f:db:31:26:bf:ec:b1:45:27:37:06:f6:95. Are you sure you want to continue connecting (yes/no)? yes Warning: Permanently added '192.168.11.4' (ECDSA) to the list of known hosts. root@192.168.11.4's password: Last login: Mon Mar 11 14:54:23 2024 from 192.168.11.1 [root@mcb-11-4 ~]# exit 登出 Connection to 192.168.11.4 closed. [root@mcb-11-8 ~]#ansible -m ping 192.168.11.4 -k SSH password: 192.168.11.4 | SUCCESS => { "ansible_facts": { "discovered_interpreter_python": "/usr/bin/python" }, "changed": false, "ping": "pong" } [root@mcb-11-8 ~]#
③[root@mcb-11-8 ~]#ssh-copy-id -i ~/.ssh/id_rsa.pub 192.168.11.6 此脚本可以批量添加文本
2.4 ansible 主配置文件
Ansible 的配置文件可以放在多个不同地方,优先级从高到低顺序如下
2.5 inventory 主机清单文件
ansible的主要功用在于批量主机操作,为了便捷地使用其中的部分主机,可以在inventory 主机清单文件中将其分组组织
官方文档:
https://docs.ansible.com/ansible/latest/user_guide/intro_inventory.html
**默认的inventory file 位置在:**
**/etc/ansible/hosts**
ansible 默认使用 ssh 连接 所以管理前要免密登录 [root@node1 ~]#vim /etc/ssh/ssh_config # StrictHostKeyChecking ask # 修改35行 StrictHostKeyChecking no [root@node1 ~]#vim /etc/ansible/ansible.cfg 71 #host_key_checking = False 开启71行的ansible的不验证即可
2.6Ansible相关工具
-
/usr/bin/ansible 主程序,临时命令执行工具
-
/usr/bin/ansible-doc 查看配置文档,模块功能查看工具,相当于man ansible-doc -l |grep 关键字 具体模块名字
-
/usr/bin/ansible-playbook 定制自动化任务,编排剧本工具,相当于脚本
-
/usr/bin/ansible-pull 远程执行命令的工具
-
/usr/bin/ansible-vault 文件加密工具
-
/usr/bin/ansible-console 基于Console界面与用户交互的执行工具
-
/usr/bin/ansible-galaxy 下载/上传优秀代码或Roles模块的官网平台
2.6.1ansible
执行临时任务一次性任务
用法
ansible [-m module_name] [-a args] 命令 主机或者清单中的组 -m 指定模块 -a 执行的任务
选项
--version #显示版本 -m module #指定模块,默认为command -v #详细过程 -vv -vvv更详细 --list-hosts #显示主机列表,可简写 --list -C, --check #检查,并不执行 -T, --timeout=TIMEOUT #执行命令的超时时间,默认10s -k, --ask-pass #提示输入ssh连接密码,默认Key验证 -u, --user=REMOTE_USER #执行远程执行的用户,默认root -b, --become #代替旧版的sudo 切换 --become-user=USERNAME #指定sudo的runas用户,默认为root vim /etc/sudoers 用户权限 -K, --ask-become-pass #提示输入sudo时的口令 -f FORKS, --forks FORKS #指定并发同时执行ansible任务的主机数
例子:
执行返回结果
-
绿色:执行成功并且不需要做改变的操作
-
黄色:执行成功并且对目标主机做变更
-
红色:执行失败
配置文件中定义了
2.6.2 ansible-doc
2.6.3 ansible-console
2.6.4 playbook
2.7 模块
2015年底270多个模块,2016年达到540个,2018年01月12日有1378个模块,2018年07月15日1852个模块,2019年05月25日(ansible 2.7.10)时2080个模块,2020年03月02日有3387个模块虽然模块众多,但最常用的模块也就2,30个而已,针对特定业务只用10几个模块
常用模块帮助文档参考:
https://docs.ansible.com/ansible/2.9/modules/modules_by_category.html https://docs.ansible.com/ansible/2.9/modules/list_of_all_modules.html https://docs.ansible.com/ansible/latest/modules/list_of_all_modules.html https://docs.ansible.com/ansible/latest/modules/modules_by_category.html
2.7.1 Command 模块
功能:在远程主机执行命令,此为默认模块,可忽略 -m 选项
注意:此命令不支持 $VARNAME | ; & 等,可能用shell模块实现
注意:此模块不具有幂等性
例子:
[root@mcb-11-8 ~]#ansible web -a 'hostname'
[root@mcb-11-8 ~]#ansible web -a 'ifconfig'
-
-
-
-
-
-
-