ansible自动化运维工具

一、ansible介绍

ansible是一种自动化运维工具,基于paramiko模块开发,用于批量执行任务和发布工作,被广泛用于日常运维工作当中.

二、ansible架构

架构图:

在这里插入图片描述

ansible核心模块介绍:
Core Models: ansible自带的模块,file,shell,copy等
Custom Models: ansible自带模块不足以满足工作需要时,用户添加扩展模块
Host inventory: 清单,由ansible 管理的主机,包括主机名,ip,端口等
Playbook: yaml格式文件,多任务定义在一个yaml文件中,主要定义哪些功能由哪些模块完成,顺序执行
Connection plugins: ansible通过该插件连接到各个目标主机,内部默认使用paramiko模块ssh协议来完成

三、ansible特性

被管理端无需安装agnet,只要配置满足条件的python版本,和ssh服务
no server 只需要安装ansible软件,配置完之后,命令行完成工作
可以基于任何语言开发新模块
由于被控端没有安装agent软件,只能通过命令端推送任务
定义的任务已存在则不会做任何事情,意味着在同一台服务器上多次执行同一个playbook和执行一次,效果一样

四、ansible执行任务模式

1.ad-hoc模式
单模块,批量执行单条命令
2.playbook模式
批量执行多个任务,多个任务完成一个大的功能,相当于多个ad-hoc的配置文件

五、ansible工作流程

在这里插入图片描述

六、ansible安装流程

安装系统:rehat8.2
过滤本地yum查询有无ansible

[root@chenshunli yum.repos.d]# dnf list all | grep ansible
ansible-freeipa.noarch                        0.1.8-3.el8                            @AppStream

下载Centos网络源

[root@chenshunli yum.repos.d]# curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-8.repo
 

安装epel-release源码包,已安装则重新安装

[root@chenshunli yum.repos.d]# yum install  -y epel-release
Updating Subscription Management repositories.
Unable to read consumer identity
This system is not registered to Red Hat Subscription Management. You can use subscription-manager to register.
上次元数据过期检查:0:01:49 前,执行于 2021年07月13日 星期二 17时32分33秒。
软件包 epel-release-8-11.el8.noarch 已安装。
依赖关系解决。
无需任何处理。
完毕!

重新安装
[root@chenshunli yum.repos.d]# yum  reinstall -y  epel-release

再次过滤过滤本地yum查询有无ansible,发现多了很多包

[root@chenshunli yum.repos.d]# yum list all | grep ansible
CentOS Configmanagement SIG - ansible-29        669 kB/s | 1.8 MB     00:02    
ansible-freeipa.noarch                                 0.1.8-3.el8                                       @AppStream       
centos-release-ansible-29.noarch                       1-2.el8                                           @extras          
ansible.noarch                                         2.9.23-1.el8                                      centos-ansible-29
ansible-doc.noarch                                     2.9.17-1.el8                                      centos-ansible-29
ansible-freeipa.noarch                                 0.3.2-2.el8                                       AppStream        
ansible-test.noarch                                    2.9.23-1.el8                

安装ansible

[root@chenshunli yum.repos.d]# yum -y install ansible

查看ansible版本号

[root@chenshunli ~]# ansible --version
ansible 2.9.23
  config file = /etc/ansible/ansible.cfg
  configured module search path = ['/root/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules']
  ansible python module location = /usr/lib/python3.6/site-packages/ansible
  executable location = /usr/bin/ansible
  python version = 3.6.8 (default, Dec  5 2019, 15:45:45) [GCC 8.3.1 20191121 (Red Hat 8.3.1-5)]

七、ansible管理清单文件

静态清单文件
静态清单文件是指定Ansible目标受管主机的文本文件。可以使用多种不同的格式编写此文件,包括INI样式或YAML。
在最简单的形式中。INI样式的静态清单文件是受管主机的主机名或IP地址的列表,每行一个:

alpha.example.org
beta.example.org
192.168.1.100

默认静态清单的位置
/etc/ansible/hosts文件被视为系统的默认静态清单文件。不过,通常的做法是不使用该文件,而是在Ansible配置文件中为清单文件定义一个不同的位置。

验证清单文件

列出单个受管主机的清单

[root@localhost ansible]# ansible 172.16.1.1 --list-hosts
  hosts (1):
    172.16.1.1

列出组的受管主机清单

[root@localhost ansible]# ansible MOON --list-hosts
  hosts (2):
    172.16.1.1
    172.16.2.2

列出所有受管主机的清单

[root@localhost ansible]# ansible all --list-hosts
  hosts (3):
    172.16.1.1
    172.16.2.2
    192.168.1.1

列出不属于任何组的受管主机

[root@localhost ansible]# ansible ungrouped --list-hosts
  hosts (2):
    172.16.1.1
    172.16.2.2

列出属于某组的受管主机

[root@localhost ansible]# ansible moon --list-host
  hosts (1):
    192.168.1.1

自定义清单文件
修改配置文件,更改默认请问文件

[root@localhost ~]# vim /etc/ansible/ansible.cfg

过滤此行
#inventory      = /etc/ansible/hosts

修改后,wq保存退出
inventory      = /etc/ansible/inventory

创建inventory文件,并写入受管主机

创建清单文件
[root@localhost ansible]# touch inventory

写入受管主机
[root@localhost ansible]# cat inventory 
172.16.1.1
172.16.2.2

[moon]
192.168.2.2
192.168.3.3

验证清单
[root@localhost ansible]# ansible all  --list-host
  hosts (4):
    172.16.1.1
    172.16.2.2
    192.168.2.2
    192.168.3.3

指定清单文件位置验证清单
[root@localhost ansible]# mv inventory  /opt/
[root@localhost ansible]# ansible all -i /opt/inventory --list-hosts
  hosts (4):
    172.16.1.1
    172.16.2.2
    192.168.2.2
    192.168.3.3

八、配置ansible清单文件,连接被控节点

如果不想使用IP地址想使用主机名,可在/etc/hosts中配置域名解析:

[root@localhost ~]# cat /etc/hosts 
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.85.135 node1
192.168.85.136 node2

如果不想手动ssh远程连接到被控节点上,可以如下配置

关闭ssh远程连接询问是否输入yes
[root@localhost ~]# vim /etc/ssh/ssh_config# StrictHostKeyChecking ask
修改为
StrictHostKeyChecking no

配置清单文件

设定用户名/密码
可以看到缺省的情况下SSH: EXEC ssh -C -o会被调用,根据ssh的设定选项,可以不必打通ssh通道,但是实际在执行的时候需要输入用户名和密码,而这两个信息,可以通过如下选项进行设定

设定项 说明
ansible_ssh_user 用户名
ansible_ssh_pass 密码
[root@localhost ~]# vim /etc/ansible/inventory
node1 ansible_ssh_user=root ansible_ssh_pass=1
node2 ansible_ssh_user=root ansible_ssh_pass=1

使用临时命令测试是否能ping通

[root@localhost ~]# ansible all -m ping
node2 | SUCCESS => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/libexec/platform-python"
    },
    "changed": false,
    "ping": "pong"
}
node1 | SUCCESS => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/libexec/platform-python"
    },
    "changed": false,
    "ping": "pong"
}

Logo

一站式 AI 云服务平台

更多推荐