简介:Ansible是一款基于python开发的自动化运维工具,轻量化且功能强大。功能节点可以分为控制节点(管理节点)及被管理节点。在控制节点上,Ansible可以通过SSH、PowerShell等方式实现远程管理其它节点设备,所有操作都只需要在控制节点上执行,不需要数据库及守护进程。本文主要对Ansible部分模块应用进行示例,Ansible其它特点不在此阐述。
Ansible 官方地址: https://docs.ansible.com/ansible/latest/
Ansible 控制节点要求: 已安装 Python 3.8 或更新的版本
下面我们使用测试环境来部署及使用ansible的各个模块及功能
测试环境信息:
Hostname | Address | OS version | Marks |
test01 | 10.172.56.38 | Ubuntu 22.04 | Controller |
test02 | 10.172.58.43 | Ubuntu 22.04 | node |
test03 | 10.172.56.46 | CentOS 7.9 | node |
test04 | 10.172.58.67 | CentOS 7.9 | node |
Ubuntu22.04安装部署控制节点:
1. 安装ansible套件
sudo apt-get install software-properties-common
2. 添加ansible源
sudo apt-add-repository ppa:ansible/ansible
3. 更新源
sudo apt-get update
4.安装ansible及sshpass工具
sudo apt-get install ansible sshpass
5. 创建ssh-key
6. 拷贝公钥到3台被管理节点
ssh-copy-id -i ~/.ssh/id_rsa.pub -p 22 root@10.172.58.43
Ansible相关工作目录及文件:
/etc/ansible/ ansible配置目录
/etc/ansible/ansible.cfg 主配置文件
/etc/ansible/hosts 主机目录文件
/var/log/ansible.log 日志文件
/usr/share/my_modules 库文件目录
Ansible.cfg主配置文件内容
官方内容参考: https://github.com/ansible/ansible/blob/stable-2.9/examples/ansible.cfg
一般保持默认即可
Ansible命令格式:
ansible +被管理主机 +模块 +参数
例如:ansible all -m ping -v 表示对hosts里所有主机执行ping模块,并显示执行过程
如下图所示:
'
"all" 代表在/etc/ansible/hosts中定义的所有主机清单,
我的主机清单如下:
以上这种ad-hoc模式一般用于查看远程节点信息或文件使用。
如果需要用于执行复杂任务或一个任务需要调用多个模块的一般使用playbook模式
Ansible Roles的使用:
roles是ansible里面重要的一个内容,我们可以在/etc/ansible/工作目录下创建roles目录,可以按照项目来定义role,也可以通过功能来定义role,目录结构如下图:
我们根据需求创建目录,后面用于同步系统配置文件及部署ldap及zabbix客户端
mkdir -pv {system,ldap,zabbix}/{files,templates,tasks,handlers,vars,meta,defaults}
另外,也可以用ansible-galaxy程序来生成完整的roles目录,命令如下:
ansible-galaxy init zabbix roles
/defaults: 角色默认的变量目录
/files: 存放文件目录 用于模块直接调用
/templates: 存放模板的目录 文件格式需以j2结尾,
/tasks: 任务存放目录, 与handlers配合使用
/handlers: 触发任务目录,只有在tasks中的任务被执行且被通知的情况下才会执行handlers目录下的任务
/vars: 其它变量存放目录,可被task调用
/meta:依赖关系目录 ,可定义角色的依赖关系
创建playbook来调用roles (注意:在写yml文件时需要注意缩进)
在/etc/ansible/目录下创建一个playbook-install.yml来调用roles(zabbix和ldap)
- name: zabbix_install
hosts: k8s,coreservice
roles:
- zabbix
以上hosts可以写主机组,也可以直接写节点
我们进入/etc/ansible/roles/zabbix/tasks/目录下继续编写main.yml, 在main.yml文件中我们并没有直接写具体的模块,而是在这里做一个判断来区分不同节点的客户端执行不同的task。
当被管理机器系统为ubuntu时,则执行ubuntu.yml。
当被管理机器系统为centos时,则执行centos.yml。
- include_tasks: ubuntu.yml
when: ansible_distribution == "Ubuntu"
- include_tasks: centos.yml
when: ansible_distribution == "CentOS"
上面我们通过不同的系统来执行不同的task, 我们在tasks目录下继续创建ubuntu.yml及centos.yml
centos.yml内容如下:
- name: copy rpm souce to agent
copy:
src: zabbix.repo
dest: /etc/yum.repos.d/
- name: clean up
command: yum clean all
- name: install the zabbix-agent2
yum:
name: zabbix-agent2
state: present
- name: config the zabbix_agent2.conf
template:
src: zabbix_agent2.conf.j2
dest: /etc/zabbix/zabbix_agent2.conf
- name: start zabbix-agent
service:
name: zabbix-agent2
state: started
enabled: true
ubuntu.yml内容如下:
- name: get the zabbix-agent2
copy:
src: zabbix.list
dest: /etc/apt/sources.list.d/
- name: install the zabbix-agent2
apt:
name: zabbix-agent2
state: present
- name: copy the zabbix_agent2.conf
template:
src: zabbix_agent2.conf.j2
dest: /etc/zabbix/zabbix_agent2.conf
when: ansible_hostname != 'test01'
- name: start zabbix-agent
service:
name: zabbix-agent2
state: started
enabled: true
内容持续更新中.....