Ansible简介
ansible基于python开发,集合了众多优秀运维工具的优点,实现了批量运行命令、部署程序、配置系统等功能。默认通过SSH协议进行远程命令执行或下发配置,无需部署任何客户端代理软件,从而使得自动化环境部署变得更加简单。可同时支持多台主机并进行管理,使得管理主机更加便捷。主版本大概每2个月发布一次。
核心组件说明
Ansible core :核心引擎
Host inventory :用来定义Ansible 所管理的主机,默认是在Ansible的host配置文件中定义被管理主机,同时也支持自定义动态主机清单和指定其他配置文件的位置。
Connection plugins:负责和被管理主机实现通信。除支持使用ssh连接被管理主机外, Ansible还支持其他的连接方式,所以需要有连接插件将各个主机用连接插件连接到 Ansible。
Playbooks:用来集中定义 Ansible任务的配置文件,即将多个任务定义在一个剧本中由 Ansible自动执行,可以由控制主机针对多台被管理主机同时运行多个任务。
Core modules:是 Ansible自带的模块,使用这些模块将资源分发到被管理主机,使其执行特定任务或匹配特定的状态。
Custom modules:用于完成模块功能的补充,可借助相关插件完成记录日志、发送邮件等功能。
ansible功能特性
应用代码自动化部署
系统管理配置自动化
支持持续交付自动化
支持云计算,大数据平台环境
轻量级,无需在客户端安装agent,更新时只需在控制机上进行更改即可
批量任务执行可以写成脚本,不用分发到远程就可以执行
支持非root用户管理操作,支持sudo
使用python编写,维护更简单
Ansible 工作模型
部署Ansible
Ansible 自动化运维环境由控制主机与被管理主机组成,由于Ansible是基于SSH协议进行通信的,所以控制主机安装Ansible软件后不需要重启或运行任何程序,被管理主机也不需要安装和运行任何代理程序。
代码语言:javascript复制#确保host上安装python
Python –V
#查看yum仓库中是否存在ansible 的rpm包
yum list |grep ansible
#安装ansible服务
yum install ansible -y
#查看ansible 版本
ansible --version
Linux zabbix-agent 批量部署
环境
hostname | ip | des |
---|---|---|
zabbix-server | 192.168.99.200 | zabbix-server ansible |
zabbix-proxy1 | 192.168.99.209 | zabbix-agent |
zabbix-db2 | 192.168.99.210 | zabbix-agent |
将所有主机ip加入到/etc/ansible/hosts文件中:
定义linux主机组和主机
代码语言:javascript复制[root@zabbix-server ~]# egrep -v "*#|^$" /etc/ansible/hosts
[zabbix-agent-linux]
192.168.99.209
192.168.99.210
默认ssh的端口为22端口,如果为其他端口号,可在主机名后面加上端口号,如 192.168.159.131:9604,也可以修改配置文件中的remote_port变量值/etc/ansible/hosts也可以定义一个主机范围,如192.168.99.[100:200] ,表示192.168.99.100 - 192.168.99.200 的主机。
免密登录
生成密钥对并将公钥推送给被管理端
代码语言:javascript复制cd ~
cd .ssh
#将公钥推送至被管理端
ssh-copy-id root@192.168.99.209
ssh-copy-id root@192.168.99.210
查看linux被管理端是否已经连接
代码语言:javascript复制[root@zabbix-server ~]# ansible -i /etc/ansible/hosts zabbix-agent-linux -m ping
192.168.99.209 | SUCCESS => {
"changed": false,
"ping": "pong"
}
192.168.99.210 | SUCCESS => {
"changed": false,
"ping": "pong"
}
[root@zabbix-server ~]# ansible -i /etc/ansible/hosts zabbix-agent-linux -a date
192.168.99.209 | SUCCESS | rc=0 >>
Wed Jan 1 09:35:03 CST 2020
192.168.99.210 | SUCCESS | rc=0 >>
Wed Jan 1 09:35:05 CST 2020
[root@zabbix-server ~]# ansible -i /etc/ansible/hosts zabbix-agent-linux -m command -a "free -m"
192.168.99.209 | SUCCESS | rc=0 >>
total used free shared buff/cache available
Mem: 3771 184 3320 19 266 3306
Swap: 3967 0 3967
192.168.99.210 | SUCCESS | rc=0 >>
total used free shared buff/cache available
Mem: 1819 171 1445 22 202 1445
Swap: 4091 0 4091
至此 ansible 安装以及主机清单配置完成。(注:如果连接失败请检查ansibleserver和被管理端是否能ping通,如能ping通,可以删除.ssh下的密钥,重新生成并下发)
ansible 批量下发文件
代码语言:javascript复制ansible -i /etc/ansible/hosts zabbix-agent-linux -m copy -a "src=/opt/system.sh des=/opt/"
实现步骤
1.安装zabbix-agent4.2的rpm包
2.使用yum安装zabbix-agent
3.修改agent配置文件的一些变量,将模板文件覆盖到agent配置文件
4.重启zabbix-agent
定义agent模板
创建模板文件,里面包含agent中可变的变量,如:主机名和server地址等
代码语言:javascript复制[root@zabbix-server opt]# cat /etc/ansible/zabbix_agentd.conf
PidFile=/var/run/zabbix/zabbix_agentd.pid
LogFile=/var/log/zabbix/zabbix_agentd.log
LogFileSize=50
EnableRemoteCommands=1
LogRemoteCommands=1
Server={{server}}
ServerActive={{server}}
Hostname={{hostname}}
HostMetadata=Linux
Timeout=10
Include=/etc/zabbix/zabbix_agentd.d/*.conf
UnsafeUserParameters=1
添加linux 的 playbook文件
代码语言:javascript复制[root@zabbix-server opt]# cat /etc/ansible/linux-agent.yml
- hosts: zabbix-agent-linux
remote_user: root
vars:
server: 192.168.99.200
hostname: "{{ ansible_hostname }}"
tasks:
- name: install rpm
command: rpm -ivh https://repo.zabbix.com/zabbix/4.2/rhel/7/x86_64/zabbix-agent-4.2.1-1.el7.x86_64.rpm
- name: install agent
command: yum install zabbix-agent -y
- name: cp templates zabbix_agentd.conf to zabbix agentd
template: src=/etc/ansible/zabbix_agentd.conf dest=/etc/zabbix/zabbix_agentd.conf
- name: restart zabbix-agent
command: systemctl restart zabbix-agent
执行playbook文件进行批量部署
代码语言:javascript复制ansible-playbook -i /etc/ansible/hosts /etc/ansible/linux-agent.yml
Windows zabbix-agent 批量部署
环境
hostname | ip | des |
---|---|---|
zabbix-server | 192.168.99.200 | zabbix-server ansible |
windows server 2016 | 192.168.99.234 | zabbix-agent |
Ansible依赖
pywinrm>=0.3.0
pywinrm可以使用pip来进行安装,执行以下命令
pip install pywinrm>=0.3.0
Windows依赖
PowerShell 3.0
NET Framework 4.0
这里使用的是2016,上面的环境是不需要做配置的,如果是使用的server2008或更低版本需要进行升级之后才能使用,获取升级的详细信息可以访问ansible官方文档查看
代码语言:javascript复制https://docs.ansible.com/ansible/latest/user_guide/windows_setup.html#host-requirements
在防火墙上开启winrm服务端口和agent服务端口
可以在powershell上执行下面的命令查看winrm当前的监听端口
代码语言:javascript复制winrm enumerate winrm/config/Listenerwinrm
服务默认是5985端口,zabbix-agent使用的是10050端口,因此需要在防火墙上开启5985和10050端口或直接关闭防火墙
下载Windows-agent压缩包
首先需要下载Windows-agent的压缩包并解压到ansible主机/etc/ansible/windows下
下载地址:https://www.zabbix.com/download_agents
代码语言:javascript复制yum install -y unzip zip
unzip zabbix_agents-4.2.8-win-amd64.zip -d zabbix_agents
在ansible/hosts中添加主机信息
需要在hosts中指定与Windows连接的配置信息,默认情况下使用ntlm认证,如果想要获取关于winrm认证的详细信息,
访问
代码语言:javascript复制https://docs.ansible.com/ansible/latest/user_guide/windows_winrm.html
定义linux主机组和主机
代码语言:javascript复制/etc/ansible/hosts
[zabbix-agent-windows]
172.18.51.122 ansible_python_interpreter=/usr/bin/python ansible_user="administrator" ansible_password="asd.123" ansible_port=5985 ansible_connection="winrm" ansible_winrm_transport=ntlm ansible_winrm_server_cert_validation=ignore
查看linux被管理端是否已经连接
代码语言:javascript复制[root@zabbix-server zabbix_agents]# ansible -i /etc/ansible/hosts zabbix-agent-windows -m win_ping
192.168.99.234 | SUCCESS => {
"changed": false,
"ping": "pong"
}
实现步骤
1.从ansible复制下载好的agent文件到Windows
2.修改windows agent配置文件的一些变量
3.安装zabbix-agent
4.启动zabbix-agent
定义windows agent模板
/etc/ansible/windows/zabbix_agentd.conf
创建一个模板文件,里面包含agent中可变的变量,如:主机名和server地址
代码语言:javascript复制LogFile=c:zabbix_agentd.log
LogFileSize=50
EnableRemoteCommands=1
LogRemoteCommands=1
Server={{server}}
ServerActive={{server}}
Hostname={{hostname}}
HostMetadata=Windows
UnsafeUserParameters=1
编写windows 的 playbook文件
代码语言:javascript复制[root@zabbix-server windows]# cat windows-agent.yml
- hosts: zabbix-agent-windows
remote_user: administrator
vars:
server: 192.168.99.200
hostname: "{{ ansible_hostname }}"
tasks:
- name: cp zabbix-agent
win_copy:
src: /etc/ansible/windows/zabbix_agents/
dest: C:windows_agent
- name: cp templates zabbix_agentd.conf to zabbix agentd
win_template:
src: /etc/ansible/windows/zabbix_agents/conf/zabbix_agentd.conf
dest: C:windows_agentconf
- name: install zabbix-agent
win_command: zabbix_agentd.exe -i -c C:windows_agentconfzabbix_agentd.conf
args:
chdir: C:windows_agentbin
- name: start zabbix-agent
win_command: zabbix_agentd.exe -s -c C:windows_agentconfzabbix_agentd.conf
args:
chdir: C:windows_agentbin
执行playbook文件进行批量部署
代码语言:javascript复制[root@zabbix-server windows]# ansible-playbook -i /etc/ansible/hosts /etc/ansible/windows/windows-agent.yml
PLAY [zabbix-agent-windows] ***************************************************************
TASK [Gathering Facts] ********************************************************************
ok: [192.168.99.234]
TASK [cp zabbix-agent] ********************************************************************
changed: [192.168.99.234]
TASK [cp templates zabbix_agentd.conf to zabbix agentd] **********************************
TASK [install zabbix-agent] **************************************************************
TASK [start zabbix-agent] ****************************************************************
PLAY RECAP ********************************************************************************
配合ZABBIX 自动注册功能可实现主机的自助上线,主机自动注册的内容请查阅前期文章!
ZABBIX web 查看上线主机