Day26-20180528【ansible】

回顾
IaaS:基础架构即服务
PaaS:平台即服务
SaaS:软件即服务
常用运维工具
ansible
saltstack
puppet
一个主机控制多台主机
主控端
被控端
代理:相当于“间谍”
无代理:比如SSH
实现key验证是ansible实现的基本要求
“大促”:大型促销
三个关键模块:
Paramike
PyYAML:剧本编写
Jinji2
特性
编写playbook:执行周期性任务
幂等性:执行一次和执行多次的效果是一样的!重复的命令不会执行
ansible基于SSH,不依赖代理
角色:相当于多个playbook的集合
学习目标
(1)单一的模块
(2)编写playbook
(3)编写角色
ansible架构
ansible是主控端,其他远程主机是被控端
Inventory:需要一个主机清单
Plugins:支持额外插件,与远程主机相连接需要SSH插件
被管理端可以是主机、也可以是网络设备
CMDB:配置管理数据库
可以通过公有云/私有云接口来管理
ansible的组成部分
playbook
Ad-hoc:相当于单条命令,仅用于临时执行
inventory
models
plugins
安装方式
yum安装(需要配置EPEL)
yum install ansible
git安装
git clone git://github.com/ansible/ansible.git --recursive
cd ./ansible
source ./hacking/env-setup
ansible相关文件
主配置文件
/etc/ansible/ansible.cfg
主机清单
/etc/ansible/hosts
模块的搜索路径
二进制程序所在路径:使用软链接指向新版本程序
管理文件的模块
角色存放路径
/etc/ansible/roles/
查看配置文档:相当于man帮助
/usr/bin/ansible-doc
主机清单inventory
文件位置:/etc/ansible/hosts
(1)需要被控端的口令,只询问一次,然后用这个口令连接所有主机
~/.ssh/know_hosts
只连接可信的主机,不再询问yes/no
(2)建议基于key验证
ssh-keygen
ssh-copyid
(3)可以分组
使用中括号设置组名
还可以用中括号写数字范围
对方的SSH端口如果不是22,需要手动指定端口
(4)实现原理
先把要执行的命令转换成py脚本,存放到主控端的 ~/.ansible/tmp ;然后将tmp文件拷贝到被控端的 ~/.ansible/tmp 
(5)不检查host_key
host_key_checking = false
(6)启用记录日志
log_path = /var/log/ansible.log
(7)ansible不是以服务运行的,不需要常驻内存,所以修改过配置文件之后不需要使配置文件生效
(8)ansible的man帮助
ansible-doc
-a
-l       # 列出当前可用的模块名
CMD     # 查看对应模块的帮助
-s      # 列出片段,以简单明了的方式显示指定模块的使用帮助
(9)ansible命令用法
ansible <host-pattern> [-m module_name] [-a args]
--version 显示版本
-m module 指定模块,默认为command
-v 详细过程 –vv -vvv更详细
--list-hosts 显示主机列表,可简写—list
-k, --ask-pass 提示连接密码,默认Key验证
-K, --ask-become-pass 提示输入sudo
-C, --check 检查,并不执行
-T, --timeout=TIMEOUT 执行命令的超时时间,默认10s
-u, --user=REMOTE_USER 执行远程执行的用户
-b, --become 代替旧版的sudo 切换
(10)基于key验证
ssh-keygen
ssh-copy-id  192.168.30.101
ssh-copy-id  192.168.30.102
ssh-copy-id  192.168.30.103
通配符*
192.168.30.* :主机清单里有的所有以“192.168.30.”开头的地址
逻辑关系
(1)与
取交集
(2)或
取并集
(3)非
排除,必须用单引号!
ansible执行过程
(1)绿色:没有对被控端远程主机做过修改
(2)黄色:对被控端远程主机已经做过修改
(3)红色:显示错误信息
(4)蓝色:用于显示详细过程
ansible常用模块
1、command模块
不支持管道、重定向、变量、别名
默认使用command模块,但是!!!建议使用 -m 指定使用shell模块
2、shell模块
推荐使用这个模块来执行命令!
-a 参数要放在单引号中
3、scripts模块
允许在指定的被控端远程主机执行主控端本地的某个shell脚本
4、copy模块
将主控端本地的指定文件推送复制到被控端远程主机的指定位置
backup=yes    # 复制时备份
mode=644    # 修改文件权限
owner=wang    # 修改所有者
content    # 将内容写入被控端的指定文件中(覆盖)
5、fetch模块
抓取远程节点上的单个文件,不能是目录
src    # 被控端的单个文件
dest    # 主控端的目标目录
6、file模块
创建文件或目录
name    # 指定文件名
state=touch    # 创建文件
state=absent    # 删除文件、目录、软链接
state=directory    # 创建目录
state=link    # 创建软链接
7、hostname模块
更改主机名,更改之后自动保存到文件并生效
name
CentOS6的:/etc/sysconfig/network
CentOS7的:/etc/hostname
8、cron模块
管理计划任务
minute=*    # 每分钟
weekday=1,3,5    # 逢周一三五
job="/usr/bin/wall "    # 创建计划任务
name=warningcron    # 指定计划任务的标识名
disabled=true    # 禁用计划任务
disabled=false    # 启用计划任务
state=absent    # 删除计划任务
9、yum模块
管理软件包
name=vsftpd    # 指定软件包名
list=installed    # 列出已经安装的软件包
state=absent    # 卸载软件包
state=present    # 默认是安装软件包
disable_gpg_check=yes    # 禁用gpg检查
update_cache=yes    # 更新缓存
10、service模块
管理服务
name=vsftpd    # 
state=started    # 启动服务
state=stopped    # 停止服务
state=restarted    # 重启服务
state=reloaded    # 重新加载服务的配置文件
enabled=true    # 开机启用
enabled=false    #  开机禁用
11、user模块
管理用户
name
shell
uid=80    # 指定用户ID
system=yes    # 设置为系统用户
home
groups
state=absent    # 删除用户
remove=yes    # 删除家目录
12、group模块
管理用户组
gid=80    # 指定组ID
ansible-galaxy
连接官网获取role角色
ansible-galaxy install geerlingguy.nginx
认识role角色
playbook:使用model
ansible-playbook
相当于脚本,将很多模块集成在一起,使用YAML语言编写
建议使用 .yml 后缀
使用 --- 表示整个playbook的开始
remote_user: root    # 以远程主机的root身份执行
task:     # 
ansible-vault
加密剧本
encrypt    # 加密,使用AES256算法
decrypt    # 解密
view    # 查看
edit    # 编辑
rekey    # 更换口令
create    # 创建新playbook
ansible-console
交互式控制台,用于临时测试
[f:5]    # 并发连接数为五
playbook
由多个play组成,每个play可以调用多个model
一个playbook支持多个档案,使用 --- 表示各个档案的开始,但是!!!一般不这么用
YAML语法
K/V 键值对,大小写保持一致
name    # 相当于描述
file    # 使用file模块
一个模块必须对应一个name,哪怕是相同的模块!!
运行playbook
-C     # 干跑一遍,做测试用,被控端不做任何改变
--limit      # 只在某个被控端执行
handler:触发器
notify:通知
tags:标签;多个动作可以共用一个标签
-a 'filter=NAME'      # NAME是变量,过滤显示指定变量的值
命令行的优先级高于配置文件;普通变量优先级高于公共变量

猜你喜欢

转载自www.cnblogs.com/GymUManAlvin/p/9102047.html
今日推荐