ansible自动化运维(一)配置主机清单
目录
一、介绍
1.1了解自动化运维
1.2 ansible简介
1.3 ansible自动化运维的优势
1.4 ansible架构图
二、部署ansible
2.1 基本参数
2.2 Ansible帮助命令
2.3 配置主机清单
2.3.1 查看ansible的所有配置文件
2.3.2 /etc/ansible/ansible.cfg常用配置选项
2.3.3 ssh密码登录
2.3.4 Ansible主机清单里还可以定义变量、使用嵌套
编辑
编辑
2.3.5 ssh密钥登录
一、介绍
1.1了解自动化运维
我们要了解ansible自动化运维工具,就要先弄明白何为自动化运维。
自动化运维是指将日常运维的、大量的重复性工作自动化,把手工执行的工作,通过梳理分析,进行逻辑分解,借助平台或工具转为自动化操作。自动化是IT运维工作的升华,IT运维自动化不单纯是一个维护过程,更是一个管理的提升过程,是运维的更高层次,也是未来的发展趋势
1.2 ansible简介
Ansible是一款使用Python开发,模块化,依赖于ssh协议实现的自动化统一配置管理工具,自动化主要体现在Ansible集成了丰富模块以及功能组件,可以通过一个命令完成一系列的操作,进而能减少重复性的工作和维护成本,可以提高工作效率。
Ansible官网地址:www.ansible.com
官方文档:Ansible 文档 — Ansible 社区文档
1.3 ansible自动化运维的优势
- 可以提高项目的工作效率 ==》可以实现批量执行任务,自动化流程安排。
- 减少人为的失误操作 ==》 具有幂等性原则,如当执行一个安装任务时,ansible会先检查是否已安装且版本是否正确,如满足条件,便不会重复安装,避免重复安装导致的额外错误。
- 事务留痕 ==》会有具体执行任务的信息,比如执行任务发现服务器异常时,可根据执行记录去查看报错信息。
- 运维工作更加灵活 ==》 ansible默认情况是无代理模式的,这就意味着它不需要额外的代理程序,只需要服务器支持ssh(这对大部分linux服务器来说是满足的)
- 可以跨平台管理 ==》 ansible能够管理不同的操作系统,如linux,windows等等
- 方便信息的传递 ==》 ansible是允许定义变量和使用模板的,可以灵活地根据不同环境(如开发环境、测试环境、生产环境)传递相应的配置参数信息。
1.4 ansible架构图
1、主机清单Inventory:定义Ansible需要操作被控端主机的范围
2、剧本Playbook :Ansible的配置文件,将多个任务定义在剧本中,由ansible自动执行
3、核心模块Core Modules:连接主机实现操作, 它依赖于具体的模块来做具体的事情
4、扩展模块Custom Modules:根据自己的需求编写具体的模块
5.插件Plugins:对模块功能的补充,如连接插件Connection Plugins:用于连接主机 用来连接被控端,还有查找插件、模块实用插件、回调插件等。
最重要的一点是:Ansible是模块化的,它所有的操作都依赖于模块。
二、部署ansible
# 先拉取epel扩展源
wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
# 更新yum源
yum makecache fast
# 安装Ansible
yum -y install ansible
# 查看Ansible版本
[root@localhost ~]# ansible --version
ansible 2.9.27
config file = /etc/ansible/ansible.cfg
configured module search path = [u'/root/.ansible/plugins/modules', u'/usr/share/ansible/plugins/modules']
ansible python module location = /usr/lib/python2.7/site-packages/ansible
executable location = /usr/bin/ansible
python version = 2.7.5 (default, Aug 7 2019, 00:51:29) [GCC 4.8.5 20150623 (Red Hat 4.8.5-39)]
-
2.1 基本参数
其实最常用的莫过于-m,-a 和验证语法错误
-m #指定使用的模块名称,不指定默认使用command模块
-a #使用的模块参数,模块的具体动作;指定要执行的具体命令
--syntax-check #验证语法
--version #ansible版本信息
-v #显示详细信息
-i #主机清单文件路径,默认是在/etc/ansible/hosts
-k #提示输入ssh密码,而不使用基于ssh的密钥认证
-C #模拟执行测试,但不会真的执行
-T #执行命令的超时
-f #一次返回几个结果
-
2.2 Ansible帮助命令
ansible –help #查询更多的参数命令
ansible-doc #帮助命令
ansible-doc -l #列出所以的模块
ansible-doc 模块名 #查看模块的详细信息
ansible-doc 模块名 -s #查看模块的选项使用说明
2.3 配置主机清单
主机清单,用于定义被管理主机的认证信息, 例如被管理主机的主机名或IP地址、ssh登录用户名、密码以及key相关信息。
2.3.1 查看ansible的所有配置文件
[root@web01 ~]# rpm -qc ansible
/etc/ansible/ansible.cfg
/etc/ansible/hosts
2.3.2 /etc/ansible/ansible.cfg常用配置选项
[defaults]
#inventory = /etc/ansible/hosts #主机列表配置文件
#library = /usr/share/my_modules/ #库文件存放目录
#remote_tmp = ~/.ansible/tmp #临时py文件存放在远程主机目录
#local_tmp = ~/.ansible/tmp #本机的临时执行目录
#forks = 5 #默认并发数
#sudo_user = root #默认sudo用户
#ask_sudo_pass = True #每次执行是否询问sudo的ssh密码
#ask_pass = True #每次执行是否询问ssh密码
#remote_port = 22 #远程主机端口
host_key_checking = False #跳过检查主机指纹
log_path = /var/log/ansible.log #ansible日志
host_key_checking = False 当使用密码登录时需要配置此项不然会报错
因为ansible是通过ssh对被管理主机建立连接,所以他的登录方式也就是ssh的登陆方式
分为密码登录,密钥登录(公钥、私钥)
2.3.3 ssh密码登录
此方式没有密钥登录安全
密码登录可将密码,用户等信息直接放在主机清单里,在/etc/ansible/hosts中配置
[web01]
192.168.143.161 ansible_ssh_port=22 ansible_ssh_user=root ansible_ssh_pass=050801
# [web01]是用户组,可以在里面配置多个ip,后续对组进行操作时可对里面所有ip进行操作
[web02]
192.168.143.162 ansible_ssh_port=22 ansible_ssh_user=root ansible_ssh_pass=050801
~
Ansible执行命令返回的四种颜色
黄色:执行命令成功,并且做了修改;
绿色:执行命令成功,只查看信息,没有修改
红色:执行失败,报错
紫色:表示对命令发错的操作有警告信息
测试是否成功
2.3.4 Ansible主机清单里还可以定义变量、使用嵌套
语法格式:嵌套 [组名:children]
本身web_group里没有任何主机,但使用嵌套把web01,web02都赋予给了web_group
对组定义变量 [组名:vars]
2.3.5 ssh密钥登录
除了使用密码连接,还可以用密钥连接,实现免密登录。这时就不需要为在主机清单中指定密码了。
Ssh加密使用的是非对称算法,即公钥用于加密,私钥用于解密
实现操作:
生成密钥对
[root@web01 ~]# ssh-keygen
密钥存放位置
推送公钥到远程服务器上
[root@web01 ssh]# ssh-copy-id 192.168.143.162
尝试登录看看是否需要密码
[root@web01 ssh]# ssh 192.168.143.162
Last failed login: Mon Dec 2 14:00:04 CST 2024 from 192.168.143.161 on ssh:notty
There were 2 failed login attempts since the last successful login.
Last login: Mon Dec 2 09:16:21 2024 from 192.168.143.1
[root@web02 ~]#
此时配置主机清单便不需要密码了。