Ansible 批处理实战 - 编程小专家
source link: https://www.cnblogs.com/littleguance/p/16822271.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
软件简介
Ansible 是一款自动化运维工具,基于 Python 开发,集合了众多运维工具(puppet、chef、func、fabric)的优点,实现了批量系统配置、批量程序部署、批量运行命令等功能。
功能特点
-
部署简单,只需在主控端部署 Ansible 环境,被控端无需做任何操作
-
默认使用 SSH 协议对设备进行管理
-
有大量常规运维操作模块,可实现日常绝大部分操作
-
配置简单、功能强大、扩展性强
-
支持 API 及自定义模块,可通过 Python 轻松扩展
-
通过 Playbooks 来定制强大的配置、状态管理
基础架构
-
Ansible:Ansible 核心程序。
-
HostInventory:记录由 Ansible 管理的主机信息,包括端口、密码、ip 等。
-
Playbooks:YAML 格式文件,多个任务定义在一个文件中,定义主机需要调用哪些模块来完成的功能。
-
CoreModules:核心模块,主要操作是通过调用核心模块来完成管理任务。
-
CustomModules:自定义模块,完成核心模块无法完成的功能,支持多种语言。
-
ConnectionPlugins:连接插件,Ansible 和 Host 通信使用
任务执行
Ansible 系统由控制主机对被管节点的操作方式可分为两类,即 adhoc 和 playbook
-
ad-hoc 模式(点对点模式) 使用单个模块,支持批量执行单条命令。ad-hoc 命令是一种可以快速输入的命令,而且不需要保存起来的命令,就相当于 bash 中的一句 shell 命令。
-
playbook模式 (剧本模式) Ansible 主要管理方式,也是 Ansible 功能强大的关键所在。playbook 通过多个 task 集合完成一类功能,如 Web 服务的安装部署、数据库服务器的批量备份等。可以简单地把 playbook 理解为通过组合多条 ad-hoc 操作的配置文件。
批处理实战
环境准备
软件安装
登录 ansible01,执行安装命令
yum install -y ansible |
-
/usr/bin/ansible 主程序
-
/usr/bin/ansible-doc 配置文档
-
/usr/bin/ansible-playbook 定制自动化任务,编排剧本工具
-
/usr/bin/ansible-pull 远程执行命令的工具
-
/usr/bin/ansible-vault 文件加密工具
主要配置文件
-
/etc/ansible/ansible.cfg 主配置文件
-
/etc/ansible/hosts 主机清单(将被管理的主机放到此文件)
-
/etc/ansible/roles/ 存放角色的目录
免密登录
登录 ansible01,生成秘钥,默认路径为 /root/.ssh/id_rsa、/root/.ssh/id_rsa.pub
ssh-keygen |
秘钥分发至需要被管理的节点
ssh-copy-id root @10 .0. 0.66 ssh-copy-id root @10 .0. 0.67 |
修改主机清单文件 /etc/ansible/hosts,添加分组名称以及主机 ip
[guance] 10.0 . 0.67 10.0 . 0.66 |
验证连通性
ansible guance -m ping |
常用模块
Shell 模块
Shell 模块可以在远程主机上调用 shell 解释器运行命令,支持 shell 的各种功能,例如管道等
-
查看当前用户 id
ansible guance -m shell -a 'id' |
-
查看当前登录至系统的用户
ansible guance -m shell -a 'who' |
Copy 模块
该模块用于将文件复制到远程主机,同时支持给定内容生成文件和修改权限等
-
复制 ansible.cfg 文件至远程主机,并指定权限为 "读写" -rw-rw-rw-
ansible guance -m copy -a 'src=/etc/ansible/ansible.cfg dest=/tmp/ansible.cfg mode=666' |
查看远程主机 ansible.cfg 文件
ansible guance -m shell -a 'ls -l /tmp/ansible.cfg' |
-
指定内容并生成文件
ansible guance -m copy -a 'content="hello world" dest=/tmp/hello mode=666' |
查看远程主机文件
ansible guance -m shell -a 'cat /tmp/hello' |
File 模块
该模块用于设置文件的属性,比如创建文件、创建链接文件、删除文件等
-
在 /tmp 下创建 app 目录
ansible guance -m file -a 'path=/tmp/app state=directory' |
查看 /tmp 目录
ansible guance -m shell -a 'ls -l /tmp' |
-
删除之前从 ansible01 复制过来的 ansible.cfg 文件
ansible guance -m file -a 'path=/tmp/ansible.cfg state=absent' |
Fetch 模块
该模块用于从远程某主机获取(复制)文件到本地
-
拉取远程主机 /tmp/hello 文件至 /root 目录
ansible guance -m fetch -a 'src=/tmp/hello dest=/root' |
在 /root 目录下,可以看到两个新目录 (远程主机 ip 为目录名称)
yum -y install treetree /root |
观测云应用
批量安装
使用 shell 模块安装 datakit (注意修改对应的 token)
ansible guance -m shell -a 'DK_DATAWAY="https://openway.guance.com?token=token" bash -c "$(curl -L https://static.guance.com/datakit/install.sh)"' |
查看进程是否已经启动
ansible guance -m shell -a 'ps -ef|grep datakit|grep -v grep' |
批量配置
-
开启 netstat 插件
使用 shell 模块复制文件 netstat.conf.sample 为 netstat.conf
ansible guance -m shell -a 'cp /usr/local/datakit/conf.d/host/netstat.conf.sample /usr/local/datakit/conf.d/host/netstat.conf' |
批量重启 datakit
ansible guance -m shell -a 'systemctl restart datakit' |
批量升级
新建 datakit 升级 yaml 文件,/etc/ansible/dk_upgrade.yaml
- hosts: guance remote_user: root tasks: - name: dk versioncheck shell: datakit--version|grep -i upgrade|wc -l register:version -name: dkupgradewhen: version.stdout > "0" shell: DK_UPGRADE=1bash -c"$(curl -L https: //static.guance.com/datakit/install.sh)" |
运行 playbook
ansible-playbook /etc/ansible/dk_upgrade.yaml |
查看 datakit 版本已经为最新
ansibleguance -m shell -a 'datakit --version' |
添加定时任务 crontab -e (每天 02 点 02 分执行批量升级)
02 02 * ** ansible-playbook /etc/ansible/dk_upgrade.yaml |
Recommend
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK