今天,我们开始学习运维自动化工具Ansible。
一、Ansible原理
1.1 什么是Ansible
Ansible一种集成IT系统的配置管理、应用部署、执行特定任务的开源平台/框架。基于Python语言实现,核心模块包括:jinja2、PyYAML和paramiko。Ansible允许重复执行而不出错,客户端无agent,服务端无deamon进程。Ansible特点:
-
Ansible支持API接口调用,例如通过CMDB调用或公有云接口调用
-
Ansible是一个框架,基于模块、插件工作
-
基于SSH工作,即被管理端要支持SSH管理
-
通过playbooks来编写强大的配置、状态管理,实现自动化
1.2 Ansible重要组件说明
-
模块:Ansible由多种功能模块组成
-
playbook:Ansible剧本,使用yml语法调用不同功能模块完成特定的功能
-
roles:Ansbiel角色,可以使用ansible-galaxy命令下载第3方的roles角色。
-
ansible-vault:文件加密工具
-
ansilbe-console:基于console与用户进行交互
-
ansible-doc:帮助文档,-l所有模块,-s简要帮助
1.3 Ansible执行过程及原理说明
-
加载配置文件,默认是/etc/ansible/ansible.cfg
-
加载对应模块
-
生产临时py文件,并传输到目标机器的~/.ansible/tmp目录下
-
给py文件加上+x权限,执行并返回结果
-
删除py文件并sleep 0 退出
1.4 Ansible执行状态说明
-
绿色:执行成功,不需要做改变
-
黄色:执行成功,对目标主机做变更
-
红色:执行失败
二、Ansible安装与配置
2.1 安装Ansible
安装Ansible,以CentOS 7.6为例:
-
[root@ansible ~]
# cat /etc/redhat-release
-
CentOS Linux release
7.6
.1810 (Core)
-
[root@ansible ~]
# uname -a
-
Linux ansible
3.10
.0
-957.el7.x86_64
#1 SMP Thu Nov 8 23:39:32 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux
-
#配置epel源
-
[root@ansible ~]
# cat /etc/yum.repos.d/epel-7.repo
-
[epel]
-
name=Extra Packages
for Enterprise Linux
7 - $basearch
-
baseurl=http://mirrors.aliyun.com/epel/
7/$basearch
-
failovermethod=priority
-
enabled=
1
-
gpgcheck=
0
-
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL
-7
-
[epel-debuginfo]
-
name=Extra Packages
for Enterprise Linux
7 - $basearch - Debug
-
baseurl=http://mirrors.aliyun.com/epel/
7/$basearch/debug
-
failovermethod=priority
-
enabled=
0
-
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL
-7
-
gpgcheck=
0
-
[epel-source]
-
name=Extra Packages
for Enterprise Linux
7 - $basearch - Source
-
baseurl=http://mirrors.aliyun.com/epel/
7/SRPMS
-
failovermethod=priority
-
enabled=
0
-
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL
-7
-
gpgcheck=
0
-
#安装Ansible
-
[root@ansible ~]
# yum install ansible -y
-
#查看已安装Ansible版本
-
[root@ansible ~]
# ansible --version
-
ansible
2.8
.2
-
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, Oct
30
2018,
23:
45:
53) [GCC
4.8
.5
20150623 (Red Hat
4.8
.5
-36)]
-
[root@ansible yum.repos.d]
#
-
ansible
-2.8
.2
-1.el7.noarch
查看Ansible相关文件
-
-
yum info ansible
-
rpm -qa ansible
-
rpm -ql ansibel | less
2.2 Ansible配置文件
Ansible主要配置文件及作用说明如下:
-
-
/etc/ansible/
-
├── ansible.cfg
# Ansible主配置文件
-
├── hosts
#用来定义被管理的机器清单
-
└── roles
#该目录用于定义角色
Ansible配置文件/etc/ansible/ansible.cfg
主要参数说明
-
-
#关闭过时参数告警
-
deprecation_warnings=
False
-
#关闭command告警
-
command_warnings=
False
-
#首次连接不检查,配合下面的playbook实现免密码ssh登录
-
host_key_checking=
False
-
#设置并行数量
-
forks=
40
-
#开启日志
-
log_path = /
var/log/ansible.log
-
#ssh超时时间
-
timeout =
30
2.3 hosts主机清单
默认hosts文件/etc/ansible/hosts
,被操作的主机必须在hosts主机清单中。
-
-
cd /etc/ansible
-
vim hosts
-
#分组
-
[
mons]
-
#设置主机别名
-
ceph-node
-1 ansible_ssh_host=
172.16
.93
.1
-
[
client]
-
172.16
.93
.1:
2222
-
#同时也支持域名和主机名,最终解释到IP
-
#支持正则表达式
-
[
kvm_node_all]
-
172.16
.93.[
6:
9]
-
#设置分组主机变量
-
[
kvm_node_all:vars]
-
ansible_ssh_user=root
-
ansible_ssh_pass=Efly1234
-
ansible_ssh_port=
22
-
#自动义变量
-
my_name=zhangsan
-
#主机的继承关系,会继承父的所有变量
-
[
kvm_node_all:children]
-
client
2.4 Ansible管理机与被管理机做秘钥认证(可选)
-
-
# 生成秘钥
-
ssh-keygen
-
#生成后会得到下面2个文件
-
[root@ansible ~]
# tree /root/.ssh/
-
/root/.ssh/
-
├── id_rsa
-
└── id_rsa.pub
-
# 将公钥写入被管理机
-
ssh-
copy-
id
192.168
.199
.52
-
#或
-
ssh-
copy-
id -i /root/.ssh/id_rsa.pub -p
22 root@
192.168
.199
.52
转载:https://blog.csdn.net/RJ0024/article/details/105582589