Ansible介绍与部署
# Ansible批量管理服务介绍
# 简介
是基于Python语言开发的自动化软件工具,是基于SSH服务实现远程主机批量管理。运用得当可以很好的提高运维人员的工作效率、准确度等,减少对主机维护成本与一些重复性的工作。
# 功能
- 可以实现批量系统操作配置。
- 可以实现批量软件服务部署。
- 可以实现批量文件数据分发。
- 可以实现批量主机信息收集。
# 特点
- 管理端不需要启动服务程序。
- 管理端不必要编写配置文件。
- 受控端不需要安装软件程序。
- 受控端不需要启动服务程序。
- 服务程序管理操作模块众多。
- 利用剧本编写来实现自动化。
# Ansible服务部署
# 1. 关闭SeLinux
- 如果不想关闭selinux,可以安装
libselinux-python
软件。
# 2. 安装部署软件
yum install -y ansible
注意:yum安装ansible需要epel源。
# 3. 编写主机清单文件
/etc/ansible/hosts
,主机清单文件用于定义被管理主机的信息。- 添加被管理的主机IP地址到其中,可以使用内网地址也可以使用外网地址。另外需要提取分发公钥给被控制端。
# 4. 测试是否可以管理多个主机
ansible [主机] -a "[命令]"
- 主机IP处填
all
则表示管理所有主机。 -a
执行命令动作,不指定模块默认是command模块。
- 主机IP处填
# 5. SSH公钥分发
- 由于ansible是基于SSH服务进行远程管理的,所以需要分发SSH公钥(推荐),或在主机清单中配置账号密码登录。
# 生成密钥对
执行
ssh-keygen -t [指定加密方式]
命令,生成ssh密钥对。SSH1只支持RSA加密方式,SSH2支持所以加密方式,加密方式一般使用rsa即可。
执行后会提示输入密钥保存位置和密钥密码,回车默认即可。
# 分发公钥
- 执行
ssh-copy-id -i [公钥路径.pub] [远程主机用户名]@[远程主机IP]
命令,分发公钥给被控制端 - 如
ssh-copy-id -i ~/.ssh/id_rsa.pub root@10.0.0.6
- 密钥路径在
~/.ssh/
目录下
- 执行
# 编写批量分发脚本
使用vim编写一个远程主机IP的文本(用作for循环的迭代对象),将远程主机IP一行一行写入。
如
vim ~/hostip.txt
10.0.0.6 10.0.0.7 ...
1
2
3
执行
yum install -y sshpass
命令,安装sshpass软件 (用于标准输入密码)编写脚本文件
vim ~/distr_pubkey.sh
#!/bin/bash # this is script for distribute the public key. # 远程主机的密码 REMOTE_PASSWD=123456 for IP in `cat ~/hostip.txt` do # "StrictHostKeyChecking=no" 使第一次SSH连接不用输yes/no sshpass -p $REMOTE_PASSWD ssh-copy-id -i ~/.ssh/id_rsa.pub root@$IP -o "StrictHostKeyChecking=no" done
1
2
3
4
5
6
7
8
9
10
11可以自己再写一些提示信息。
# Ansible服务架构
Public/Private
- 公钥和私钥,不使用密钥则需要主机清单中配置密码登录,但还是建议使用密钥进行认证。Host Inventory
- 主机清单,定义需要管理的主机。Playbooks
- 剧本,将多个模块的命令整合成一个剧本。Core Modules
- 核心模块Custom Modules
- 自定义模块Plugins
- 插件Connection Plugins
- 连接插件,需要关闭SeLinux。
# Ansible配置目录
/etc/ansible/hosts
- 主机清单文件。/etc/ansible/roles
- 角色目录,用来分角色编写剧本。/etc/ansible/ansible.cfg
- 配置文件。
# Ansible命令说明
ansible [主机] -m [模块名称] -a [动作]
[主机]
- all/主机名称/主机组名称/主机IP地址-m
- 指定应用的模块信息-a
- 指定批量执行的操作动作
- ansible提示颜色说明
绿色信息
- 查看主机信息 / 对主机未做改动。黄色信息
- 对主机数据信息做了修改。红色信息
- 命令执行发生错误。粉色信息
- 警告信息。蓝色信息
- 显示ansible命令执行的过程。
# Ansible主机清单配置
# 1. 主机分组配置
执行命令或编写剧本时,可直接使用组名来指定一组主机。
[组名] 主机IP地址 主机IP地址 ... ...
1
2
3
4
# 2. 符号匹配配置
在指定主机地址时,我们还可以通过[n,m]来指定地址是连续的主机。
# 匹配域名 web[01:03].com # 同等于 web01.com web02.com web03.com # 匹配1-10主机IP 192.168.0.[1:10]
1
2
3
4
5
6
7
8
9
# 3. 主机名解析配置
- 使用主机名配置主机,执行命令时可以更直观的定位到具体的主机。在
/etc/hosts
中可以配置本地的主机名解析。 - 例如:
web01
、web[01:03]
。
# 4. 指定主机SSH连接端口配置
- 在主机后加上端口号即可,格式:
[主机]:[端口]
。 - 例如:
10.0.0.41:520
、web01:520
。
# 5. 添加主机变量配置
ansible_ssh_user=[用户名]
# 指定登录用户ansible_ssh_pass=[用户密码]
# 登录用户密码- 例如:
10.0.0.41 ansible_user=root ansible_pass=123456
# 6. 主机IP命名配置
- 实现自定义主机名和主机IP的映射,配置格式:
[主机命名] ansible_host=[主机IP]
- 主机名规范:城市-机房位置-机房编号-主机名。
# 7. 嵌入式配置
# 嵌入分组
将多个分组合并为一个大组。
# 格式 [父组名:children] 下级子组名 ... ... # 例子 [web:children] web_group_01 web_group_02
1
2
3
4
5
6
7
8
9
# 嵌入变量
批量给指定组添加变量,设置的变量会应用到对应组的主机。
# 格式 [组名:vars] 如: ansible_port=...... 其他变量...... [组名] 主机信息 ...... # 例子 [web:vars] ansible_port=3443 [web] 10.0.0.1 10.0.0.2 10.0.0.3
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17