Ansible 批处理实战¶
软件简介¶
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 操作的配置文件。
批处理实战¶
环境准备¶
IP | 系统 | 主机名 | 描述 |
---|---|---|---|
10.0.0.65 | CentOS 7.8 | ansible01 | ansible 管理节点 (已经安装 dk) |
10.0.0.66 | CentOS 7.8 | ansible02 | 被管理节点 1 |
10.0.0.67 | CentOS 7.8 | ansible03 | 被管理节点 2 |
软件安装¶
登录 ansible01,执行安装命令
主要程序
/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
秘钥分发至需要被管理的节点
修改主机清单文件 /etc/ansible/hosts
,添加分组名称以及主机 ip
验证连通性
常用模块¶
Shell 模块¶
Shell 模块可以在远程主机上调用 shell 解释器运行命令,支持 shell 的各种功能,例如管道等
- 查看当前用户 id
- 查看当前登录至系统的用户
Copy 模块¶
该模块用于将文件复制到远程主机,同时支持给定内容生成文件和修改权限等
- 复制
ansible.cfg
文件至远程主机,并指定权限为 "读写"-rw-rw-rw-
查看远程主机 ansible.cfg
文件
- 指定内容并生成文件
查看远程主机文件
File 模块¶
该模块用于设置文件的属性,比如创建文件、创建链接文件、删除文件等
- 在
/tmp
下创建app
目录
查看 /tmp
目录
- 删除之前从 ansible01 复制过来的
ansible.cfg
文件
Fetch 模块¶
该模块用于从远程某主机获取(复制)文件到本地
- 拉取远程主机
/tmp/hello
文件至/root
目录
在 /root
目录下,可以看到两个新目录 (远程主机 ip 为目录名称)
观测云应用¶
批量安装¶
使用 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)"'
查看进程是否已经启动
批量配置¶
- 开启 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
批量升级¶
新建 DataKit 升级 yaml 文件,/etc/ansible/dk_upgrade.yaml
- hosts: guance
remote_user: root
tasks:
- name: dk version check
shell: datakit --version|grep -i upgrade|wc -l
register: version
- name: dk upgrade
when: version.stdout > "0"
shell: DK_UPGRADE=1 bash -c "$(curl -L https://static.guance.com/datakit/install.sh)"
运行 playbook
查看 DataKit 版本已经为最新
添加定时任务 crontab -e (每天 02 点 02 分执行批量升级)