Ansible学习总结(1)
---恢复内容开始---
1. Ansible概述
ansible是新出现的自动化运维工具,基于Python开发,集合了众多运维工具(puppet、cfengine、chef、func、fabric)的优点,实现了批量系统配置、批量程序部署、批量运行命令等功能。同时,它是基于模块工作的,本身没有批量部署的能力。真正具有批量部署的是ansible所运行的模块,ansible只是提供一种框架。主要包括:
(1)连接插件connection plugins:负责和被操作端实现通信;
(2)host inventory:指定操作的主机,在一个配置文件里面定义主机;
(3)各种模块核心模块、command模块、自定义模块;
(4)借助于插件完成记录日志邮件等功能;
(5)playbook:剧本执行多个任务时,可以让节点一次性运行多个任务
2. Ansible架构
关于Ansible相关的组件说明:
Ansible
:Ansible的核心程序
Host Lnventory
:记录了每一个由Ansible管理的主机信息,信息包括ssh端口,root帐号密码,ip地址等等。可以通过file来加载,可以通过CMDB加载
Playbooks
:YAML格式文件,多个任务定义在一个文件中,使用时可以统一调用,“剧本”用来定义那些主机需要调用那些模块来完成的功能.
Core Modules
:Ansible执行任何管理任务都不是由Ansible自己完成,而是由核心模块完成;Ansible管理主机之前,先调用core Modules中的模块,然后指明管理Host Lnventory中的主机,就可以完成管理主机。
Custom Modules
:自定义模块,完成Ansible核心模块无法完成的功能,此模块支持任何语言编写。
Connection Plugins
:连接插件,Ansible和Host通信使用
3. 安装Ansible服务
3.1 环境说明
1. 操作系统
[root@node-1 ~]# cat /etc/redhat-release
CentOS Linux release 7.4.1708 (Core)
2. 主机信息
主机名 | 角色 | IP地址 |
node-1 | 控制端 | 192.168.122.201 |
node-2 | 被控端 | 192.168.122.202 |
node-3 | 被控端 | 192.168.122.203 |
3. ansible版本
[root@HappyLau ~]# rpm -q ansible
ansible-2.4.2.0-2.el7.noarch
3.2 环境准备
1. ansible控制端生成密钥对(public keys和private key),以实现控制端无密码登陆到其他agent节点
[root@node-1 ~]# ssh-keygen -t rsa -P ''
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa):
Created directory '/root/.ssh'.
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:07pXVe4yF3J67Kbj1eS5qvT1cWmbQyztSkLdKds1u14 root@node-1
The key's randomart image is:
+---[RSA 2048]----+
| |
| .|
| o |
| . ..ooo|
| S .. +B=+|
| o. .o*OX|
| . + o*&E|
| .o +.+=X|
| .. .o*B*o|
+----[SHA256]-----+
2. 将生成的public key拷贝到其他节点
[root@node-1 ~]# ssh-copy-id -i /root/.ssh/id_rsa.pub root@192.168.122.202
[root@node-1 ~]# ssh-copy-id -i /root/.ssh/id_rsa.pub root@192.168.122.203
3. 校验SSH无密码登陆
[root@node-1 ~]# ssh root@192.168.122.202 hostname
node-2
[root@node-1 ~]# ssh root@192.168.122.203 hostname
node-3
3.3 安装ansbile
[root@node-1 ~]# yum install ansible -y
相关命令介绍:
/usr/bin/ansible
Ansibe AD-Hoc 临时命令执行工具,常用于临时命令的执行
/usr/bin/ansible-doc
Ansible 模块功能查看工具
/usr/bin/ansible-galaxy
下载/上传优秀代码或Roles模块的官网平台,基于网络的
/usr/bin/ansible-playbook
Ansible 定制自动化的任务集编排工具
/usr/bin/ansible-pull
: Ansible远程执行命令的工具(使用较少,海量机器时使用,对运维的架构能力要求较高)
/usr/bin/ansible-vault
Ansible 文件加密工具
/usr/bin/ansible-console
Ansible基于Linux Consoble界面可与用户交互的命令执行工具
/usr/share/ansible_plugins
Ansible高级自定义插件目录(需要python基础)
/etc/ansible/ansible.cfg
配置文件
/etc/ansible/hosts
主机清单
ansible的配置,默认ansible安装好之后即可使用,不需要做过多的配置,实际生产环境中根据主机数量而定,适当给予调有,如下是ansible默认配置文件:
[root@node-1 ~]# vim /etc/ansible/ansible.cfg
[defaults]
inventory = /etc/ansible/hosts 读取被管理端的主机列表
library = /usr/share/my_modules/ 模块路径
module_utils = /usr/share/my_module_utils/ 模块工具
remote_tmp = ~/.ansible/tmp 远程执行临时路径
local_tmp = ~/.ansible/tmp 本地执行临时路径
forks = 5 执行时forks进程数
poll_interval = 15 poll执行间隔
sudo_user = root sudo执行用户
ask_sudo_pass = True
ask_pass = True
transport = smart
remote_port = 22
module_lang = C
module_set_locale = False
3.4 定义主机组
通过修改/etc/ansible/hosts文件,定义ansible管理的主机,可以基于如下三种方式定义:
1. 单个主机地址,可以用IP地址和主机名表示,例如:
green.example.com
blue.example.com
192.168.100.1
192.168.100.10
2. 将多个相同功能的主机定义为主机组,例如:
[webservers]
alpha.example.org
beta.example.org
192.168.1.100
192.168.1.110
3. 使用正则表达是定义主机或主机组中的主机,例如:
www[001:006].example.com
[dbservers] db01.intranet.mydomain.net
db02.intranet.mydomain.net
10.25.1.56
10.25.1.57 db-[99:101]-node.example.com
如下定义了一个demo_group主机组,将node-2和node-3两台主机加入到该组内,便于后续直接通过组管理ansible的主机,如下:
[root@node-1 ~]# vim /etc/ansible/hosts
[demo_group]
192.168.122.202
192.168.122.203
测试主机组的功能,可以使用ansible里面的ping模块检查主机是否存活:
[root@node-1 ~]# ansible demo_group -m ping
192.168.122.203 | SUCCESS => {
"changed": false,
"ping": "pong"
}
192.168.122.202 | SUCCESS => {
"changed": false,
"ping": "pong"
}
4. ansible模块使用
1. command模块,用于执行shell命令
[root@node-1 ~]# ansible demo_group -m command -a "ifconfig eth0"
192.168.122.202 | SUCCESS | rc=0 >>
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.122.202 netmask 255.255.255.0 broadcast 192.168.122.255
inet6 fe80::5054:ff:fee2:dbd6 prefixlen 64 scopeid 0x20<link>
ether 52:54:00:e2:db:d6 txqueuelen 1000 (Ethernet)
RX packets 15143 bytes 1576866 (1.5 MiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 1149 bytes 136894 (133.6 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 192.168.122.203 | SUCCESS | rc=0 >>
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.122.203 netmask 255.255.255.0 broadcast 192.168.122.255
inet6 fe80::5054:ff:fe10:8a8e prefixlen 64 scopeid 0x20<link>
ether 52:54:00:10:8a:8e txqueuelen 1000 (Ethernet)
RX packets 15550 bytes 1604586 (1.5 MiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 1581 bytes 174724 (170.6 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
2. copy模块,用于将文件拷贝至远程
[root@node-1 ~]# ansible demo_group -m copy -a "src=/root/get_eth0_ip.sh dest=/root mode=744 owner=root group=root"
192.168.122.203 | SUCCESS => {
"changed": true,
"checksum": "fb3ef7bb8252274b34fca33cc6830d00f84230ff",
"dest": "/root/get_eth0_ip.sh",
"gid": 0,
"group": "root",
"md5sum": "ae7de9e7b1b43e039387d6cd50d339cd",
"mode": "0744",
"owner": "root",
"secontext": "system_u:object_r:admin_home_t:s0",
"size": 54,
"src": "/root/.ansible/tmp/ansible-tmp-1519730959.9-70486339465362/source",
"state": "file",
"uid": 0
}
192.168.122.202 | SUCCESS => {
"changed": true,
"checksum": "fb3ef7bb8252274b34fca33cc6830d00f84230ff",
"dest": "/root/get_eth0_ip.sh",
"gid": 0,
"group": "root",
"md5sum": "ae7de9e7b1b43e039387d6cd50d339cd",
"mode": "0744",
"owner": "root",
"secontext": "system_u:object_r:admin_home_t:s0",
"size": 54,
"src": "/root/.ansible/tmp/ansible-tmp-1519730959.89-208121206365432/source",
"state": "file",
"uid": 0
} 检查:
[root@node-1 ~]# ansible demo_group -m command -a "ls -l /root"
192.168.122.203 | SUCCESS | rc=0 >>
total 8
-rw-------. 1 root root 1571 Feb 25 23:40 anaconda-ks.cfg
-rwxr--r--. 1 root root 54 Feb 27 06:29 get_eth0_ip.sh 192.168.122.202 | SUCCESS | rc=0 >>
total 8
-rw-------. 1 root root 1571 Feb 25 23:40 anaconda-ks.cfg
-rwxr--r--. 1 root root 54 Feb 27 06:29 get_eth0_ip.sh
3. shell模块,用于执行复杂的脚本,将需要实现的功能写入到shell脚本中,使用copy模块将脚本拷贝到远程,使用shell模块来调用,如下以获取eth0的IP地址为例
shell脚本内容:
[root@node-1 ~]# cat /root/get_eth0_ip.sh
#!/bin/bash ifconfig eth0 | awk '/inet / {print $2}' 通过上面的copy模块拷贝至ansible的agent端,然后然后如下执行:
[root@node-1 ~]# ansible demo_group -m shell -a "/root/get_eth0_ip.sh"
192.168.122.203 | SUCCESS | rc=0 >>
192.168.122.203 192.168.122.202 | SUCCESS | rc=0 >>
192.168.122.202
Ansible学习总结(1)的更多相关文章
- ansible 学习与实践
title: ansible 学习与实践 date: 2016-05-06 16:17:28 tags: --- ansible 学习与实践 一 介绍 ansible是新出现的运维工具是基于Pytho ...
- ansible学习笔记一
ansible学习笔记一 参考博客: ansible学习 - 51CTO博客 一.安装 1 .下载epel源 wget -O /etc/yum.repos.d/epel.repo http://mir ...
- Ansible学习实战手记-你想要知道的可能都在这里了
最近接触了ansible工具,查找了一些资料,也做了一些总结.希望能给刚接触的新手带来一些帮助. 此总结有实际例子,大部分也是从实践中用到才逐一总结的. 当然可能肯定一定会存在一些错误和纰漏,还望大家 ...
- Ansible学习记录一:Linux下部署
0.Ansible介绍 Ansible 是一个简单的自动化运维管理工具,可以用来自动化部署应用.配置.编排 task(持续交付.无宕机更新等),采用 paramiko 协议库(fabric 也使用这个 ...
- Ansible 学习笔记
最近因为需要管理很多台机器,而这些机器又需要频繁重新安装,实在受不了Puppet需要在每个客户机上都安装一遍,于是转头开始学些Ansible.根据这段时间的使用,这个确实是神器,唯一的感觉就是相见恨晚 ...
- 自动化运维工具ansible学习+使用ansible批量推送公钥到远程主机
目录: 一.ansible简介 1.1.ansible是什么 1.2.ansible如何工作 1.3.ansible优缺点 1.4.ansible安装方式 1.5.ansible文件简单介绍 1.6. ...
- ansible学习笔记三:playbook和roles
参考博客: Ansible 系列之 Playbooks 剧本 -飞走不可(博客园) linux运维学习之ansible的playbook及roles的使用 - 51CTO博客 nginx 基于uwsg ...
- ansible 学习记录
Ansible 的重新学习记录 这里我的Ansible的宿主机是centos 7.2系统,这里我通过yum 安装Ansible 1.配置epel源 sudo yum -y install epel-r ...
- Ansible学习 Playbooks_1
Playbooks是Ansible中执行较复杂任务的一种的方式,Playbook由1个或多个play组成,语法格式是YAML,下面以一个简单的任务为例,开始我们的Playbook学习: 任务描述: 1 ...
- Ansible学习分享(基本)
背景:Teamleader提到一款好用的自动化配置管理工具,于是前去学习实践,有了下面分享. 纲要 一.Ansible简介 二.Ansible准备 2.1 Ansible安装 2.2 设置SSH公钥验 ...
随机推荐
- 集成 solr6.5.1到 tomcat7(8) 中 (解决java.lang.NoSuchMethodError问题)
♣下载solr安装包 ♣安装solr ♣solr应用部署到tomcat下 ♣配置web.xml ♣在tomcat7启动 ♣改为在tomcat8启动 ♣在自带的Jetty里启动 ♣建立第一个Core 安 ...
- angular aot编译报错 ERROR in ./src/main.ts 解决方法
昨天打包项目时遇到下图这样的错误: 开始以为了某些模块存在但未使用,折腾一番无果,后来升级angular-cli就搞定了,方法很简单: 1.删掉node_modules 2.更改package.jso ...
- ansible基本使用教程
转载请注明出处http://www.cnblogs.com/chenxianpao/p/7360349.html 一. 介绍 1. 简介 ansible是新出现的自动化运维工具,基于Pytho ...
- dll和lib(包括静态链接库和与dll同时生成的lib)
转:http://blog.csdn.net/galaxy_li/article/details/7411956 1:神马是Dll和Lib,神马是静态链接和动态链接 大家都懂的,DLL就是动态链接库, ...
- Tcpdump安装使用
本来想安装wireshark yum install wireshark 命令行下使用,包含抓包的基本功能 yum install wireshark-gnome 提供wireshark(UI)工 ...
- Link/cut Tree
Link/cut Tree 一棵link/cut tree是一种用以表示一个森林,一个有根树集合的数据结构.它提供以下操作: 向森林中加入一棵只有一个点的树. 将一个点及其子树从其所在的树上断开. 将 ...
- 阿里舆情︱舆情热词分析架构简述(Demo学习)
本节来源于阿里云栖社区,同时正在开发一个舆情平台,其中他们发布了一篇他们所做的分析流程,感觉可以作为案例来学习.文章来源:觉民cloud/云栖社区 平台试用链接:https://prophet.dat ...
- ioctl,unlocked_ioctl 处理方法
kernel 2.6.35 及之前的版本中struct file_operations 一共有3个ioctl : ioctl,unlocked_ioctl和compat_ioctl 现在只有unloc ...
- Caused by: java.net.SocketException: Software caused connection abort: socket write error
1.错误描述 [ERROR:]2015-05-06 10:54:18,967 [异常拦截] ClientAbortException: java.net.SocketException: Softwa ...
- Linux以列表格式显示块设备
Linux以列表格式显示块设备 youhaidong@youhaidong-ThinkPad-Edge-E545:~$ lsblk -l NAME MAJ:MIN RM SIZE RO TYPE MO ...