自动化运维工具Ansible工具学习及使用---持续更新中

简介: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

自动化运维工具Ansible工具学习及使用---持续更新中_第1张图片

 6. 拷贝公钥到3台被管理节点

ssh-copy-id  -i ~/.ssh/id_rsa.pub -p 22 [email protected]

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模块,并显示执行过程

如下图所示:

自动化运维工具Ansible工具学习及使用---持续更新中_第2张图片'

"all" 代表在/etc/ansible/hosts中定义的所有主机清单,

我的主机清单如下:

自动化运维工具Ansible工具学习及使用---持续更新中_第3张图片

以上这种ad-hoc模式一般用于查看远程节点信息或文件使用。

如果需要用于执行复杂任务或一个任务需要调用多个模块的一般使用playbook模式

 

Ansible Roles的使用:

roles是ansible里面重要的一个内容,我们可以在/etc/ansible/工作目录下创建roles目录,可以按照项目来定义role,也可以通过功能来定义role,目录结构如下图: 

自动化运维工具Ansible工具学习及使用---持续更新中_第4张图片

  我们根据需求创建目录,后面用于同步系统配置文件及部署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

内容持续更新中.....

 

你可能感兴趣的:(Linux,运维,自动化,ansible)