ansible自动化运维,快速入门(一)
01.Ansible 快速入门
1.Ansible基础概述
1.什么是Ansible
-
基础批量管理工具
-
Xshell/SecureCRT
-
密钥认证(免密码登录)+命令pssh
-
密钥认证(免密码登录)+ 脚本
-
批量管理工具:Ansible/SaltStack
-
自动化本质:完成重复性工作,减少占用时间,核心:标准化
-
Ansible是一个IT自动化的配置管理工具,自动化主要体现在Ansible集成了
丰富模块,丰富的功能的组件,可以通过一个命令行完成一系列的操作。
进而能减少我们重复性的工作和维护成本,以提高工作的效率。
2.Ansible可以完成哪些功能
- 🌟🌟🌟🌟🌟执行命令: 批量执行远程命令,并发,可以对N多台主机
同时进行命令的执行。
- 🌟🌟🌟🌟配置管理: 批量配置软件服务,可以进行自动化的方式配
置和管理服务。
- 二次开发: 实现软件开发功能,jumpserver底层使用ansible来实现的
自动化管理。
- 🌟🌟🌟🌟剧本(playbook): 编排高级的IT任务,Ansible的Playbook
是一门编程语言,可以用来描绘一套IT架构*。
4.Ansible的架构中的控制节点、被控制节点、inventroy、ad-hoc、
playbook、连接协议这些是什么?

3.Ansible安装配置
3.1 环境准备与检查
#01 用户与端口
whoami
ss -lntup |grep ssh
#02 防火墙与selinux
[root@m01 ~]# getenforce
Disabled
[root@m01 ~]# systemctl is-active firewalld.service
iptables.service
unknown
inactive
3.2 Ansible安装
1) Ansible急速安装
yum install ansible -y
#查看ansible的版本
[root@manager ~]# ansible --version
# 配置文件
/etc/ansible/ansible.cfg
# ansible <host-pattern> [options]
--version #ansible版本信息
-v #显示详细信息 用于排错 -vvv -vvvv debug模式
-i #inentory 文件 主机清单文件路径,默认是 在/etc/ansible/hosts
-m #使用的模块名称,默认使用command模块 module
-a #使用的模块参数,模块的具体动作 action 模 块中的具体功能/参数
-k #提示输入ssh密码,而不使用基于ssh的密钥认证 ansible 默认时候 基于密钥认证
-C #模拟执行测试,但不会真的执行 --check 检查语法 (playbook(剧本中必备))
-T #执行命令的超时 timeout 超时时间 默认是10s
-f 修改并发数,默认是5
2) Ansible主配置文件
Ansible*的配置文件可以存放在任何位置,但配置文件有读取顺序,先
Ansible配置做一个基本了解。
ansible的配置文件有查找顺序:
1) 最先查找$ANSIBLE_CONFIG变量对应的位置和文件
2) 其次查找当前目录下ansible.cfg
3) 然后查找用户家目录下的.ansible.cfg
4) 最后查找/etc/ansible/ansible.cfg(默认)
[root@manager ~]# cat /etc/ansible/ansible.cfg
#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 #远程主机端口
ssh端口号
host_key_checking = False #跳过检查主机指纹
log_path = /var/log/ansible.log #ansible日志
#如果是普通用户则需要配置提权 [privilege_escalation]
#become=True
#become_method=sudo
#become_user=root
#become_ask_pass=False
[root@m01 ~]# egrep -v '#|^$' /etc/ansible/ansible.cfg
[defaults]
host_key_checking = False
log_path = /var/log/ansible.log
[inventory]
[privilege_escalation]
[paramiko_connection]
[ssh_connection]
[persistent_connection]
[accelerate]
[selinux]
[colors]
[diff]
4.Ansible Inventory
-
主机清单
-
某一台主机,多台
-
给主机进行分组
-
划分子组
Inventory文件中填写需要被管理主机与主机组信息(逻辑上定义)*。默认
Inventory文件在/etc/ansible/hosts。当然也可以自定义,然后使用-i指定
Inventory文件位置。下面通过几个场景演示,如何配置Inventory文件
-
4.1 场景一、基于密码连接 🌟🌟🌟
[root@oldboy.com ~]# cat /etc/ansible/hosts
#方式一、主机+端口+密码 ※※※※※
[webservers]
10.0.0.31 ansible_ssh_port=22 ansible_ssh_user=root ansible_ssh_pass='123456'
10.0.0.41 ansible_ssh_port=22 ansible_ssh_user=root
ansible_ssh_pass='123456'
#方式二、主机+端口+密码
[webservers]
web[01:04].oldboy.com ansible_ssh_pass='123456'
#方式三、主机+端口+密码
[webservers]
web[1:2].oldboy.com
[webservers:vars] #给webservers 主机组 设置共用 变量 variables
ansible_ssh_pass='123456'
4.2 场景二、基于密钥连接,需要先创建公钥和私钥,并下发公钥至被控 端 🌟 🌟🌟 🌟🌟
[root@manager ~]# ssh-copy-id -i ~/.ssh/id_rsa.pub root@172.16.1.7
[root@manager ~]# ssh-copy-id -i ~/.ssh/id_rsa.pub root@172.16.1.8
[root@m01 ~]# for n in {5..10} 31 41 51 ; do ssh 172.16.1.$n hostname ;done
[root@m01 ~]# ansible all -i hosts -a 'hostname'
172.16.1.9 | CHANGED | rc=0 >>
web03
172.16.1.10 | CHANGED | rc=0 >>
web04
4.3 场景三、主机组使用方式 🌟🌟🌟🌟🌟
-
主机清单中
-
直接书写主机ip/域名
-
主机分组
-
主机分组:子组
-
[lbservers] #定义lbservers组
172.16.1.5
172.16.1.6
[webservers] #定义webserver组
172.16.1.7
172.16.1.8
[servers:children] #定义servers组包括两个子组
[lbservers,webserver]
lbservers
webserver
#servers组 包含的lb和web两个组的内容
4.4 了解:列出每个主机组下面的主机情况
[root@m01 playbook]# ansible data -i ./hosts --list-hosts
hosts (4):
172.16.1.7
172.16.1.31
172.16.1.41
172.16.1.51
[root@m01 playbook]# ansible web -i ./hosts --list-hosts
hosts (1):
172.16.1.7
5.总结
-
Ansible架构-主机清单,模块,剧本 🌟🌟🌟
-
Ansible部署:yum/apt
-
Ansible命令的选项与配置🌟🌟🌟
-
Ansible Inventory 主机清单使用: 分组,子组 🌟🌟🌟🌟?

浙公网安备 33010602011771号