Ansible安装及配置


ansible分为以下几个部份:
Ansible:核心引擎
Modules:包括 Ansible 自带的核心模块(core modules)及自定义模块 (custom modules);
核心模块:ansible模块资源分发到远程节点使其执行特定任务或匹配一个特定的状态。
自定义模块:如果核心模块不足以完成某种功能,可以添加自定义模块。
Plugins:完成模块功能的补充,包括连接插件、邮件插件等
Playbooks:网上很多翻译为剧本,个人觉得理解为编排更为合理;定义ansible任务的配置文件,可以将多个任务定义在一个剧本中,由ansible自动执行,剧本执行支持多个任务,可以由控制主机运行多个任务,同时对多台远程主机进行管理。
Inventory:定义 Ansible 管理主机的清单
ansible功能特性
应用代码自动化部署。
系统管理配置自动化。
支持持续交付自动化。
支持云计算、大数据平台(如AWS、OpenStack、VMWare等)环境。
轻量级,无需在客户端安装agent,更新时只需在控制机上进行一次更新即可。
批量任务执行可以写成脚本,不用分发到远程就可以执行。
使用Python编写,维护更简单,Ruby语法过于复杂。
支持非root用户管理操作,支持sudo。
可以按组分发、按机器名分发
python版本要在2.6以上
OS:(3台都一样)
[root@ansible-1 ~]# cat /etc/centos-release
CentOS release 6.8 (Final)
关闭selinux和防火墙:(3台都一样)
[root@ansible-1 ~]# vim /etc/selinux/config
SELINUX=disabled
[root@ansible-1 ~]# service iptables stop
安装Ansible:
一台控制主机:192.168.0.223
三台管理主机:
192.168.0.224
192.168.0.225
准备安装:
修改yum源、挂载光盘等......
控制主机端配置:
安装ansible前需要安装依赖包
[root@ansible-1 ~]# yum -y install epel-release
安装ansible:
[root@ansible-1 ~]# yum -y install ansible
配置机组:
[root@ansible-1 ~]# vim /etc/hosts #在最后插入以下内容
192.168.0.223 ansible-1 #服务端的主机名和IP
192.168.0.224 ansible-2 #客户端的主机名和IP
192.168.0.225 ansible-3 #客户端的主机名和IP
服务端ssh配置:
[root@ansible-1 ~]# /etc/ssh/sshd_config
Protocol 2
PasswordAuthentication no #去掉密码登录
PubkeyAuthentication yes #使用key登录
AuthorizedKeysFile .ssh/authorized_keys #这里的名字要记好,下面要用到
服务端生成自己的秘钥:(当前是哪个用户生成的就是这个用户的秘钥)
[root@ansible-1 ~]# ssh-keygen -t rsa
//按4次回车,每一次都不输入任何东西,如果在生成公钥的过程中有一次输入了密码什么的免秘钥配置就会失败。
查看自己的公钥和私钥:
[root@ansible-1 ~]# cd ~/.ssh
[root@ansible-1 .ssh]# ls
id_rsa id_rsa.pub
//id_rsa(私钥) id_rsa.pub(公钥)
[root@ansible-1 .ssh]# chmod 700 id_rsa
#重命名公钥,保持和/etc/ssh/sshd_config里的一致
[root@ansible-1 .ssh]# mv id_rsa.pub authorized_keys
[root@ansible-1 .ssh]# chmod 600 authorized_keys //!!!这一步是必须的
把自己的公钥copy到其他服务器上去:
############ 在发送之前客户端也要生成秘钥 ###############
[root@ansible-1 .ssh]# scp authorized_keys root@192.168.0.224:~/.ssh
[root@ansible-1 .ssh]# scp authorized_keys root@192.168.0.225:~/.ssh
第一次登录会提示输入密码:
[root@ansible-1 .ssh]# ssh ansible-2
The authenticity of host 'ansible-2 (192.168.0.224)' can't be established.
RSA key fingerprint is 61:2b:96:30:20:43:68:24:d8:ed:18:03:66:f5:c0:4a.
Are you sure you want to continue connecting (yes/no)? yes ###这里、这里、这里
Warning: Permanently added 'ansible-2' (RSA) to the list of known hosts.
Last login: Wed Nov 15 18:01:58 2017 from 192.168.0.49
第二次登录:
[root@ansible-1 .ssh]# ssh ansible-2
Last login: Wed Nov 15 22:56:11 2017 from ansible-1
修改ansible的hosts文件:
[root@ansible-1 .ssh]# cd
[root@ansible-1 ~]# vim /etc/ansible/ansible.cfg
inventory = /etc/ansible/hosts #指定默认hosts配置的位置
## ask_sudo_pass = True #不进行host_key检查,省去目标key发生变化时输入(yes/no)的步骤
## ask_pass = True # 每次执行ansible命令是否询问ssh密码
host_key_checking = False # 每次执行ansible命令时是否询问sudo密码
[root@ansible-1 ~]# vim /etc/ansible/hosts
[xycm]
192.168.0.224
192.168.0.225
注:将要管理的主机写进去,可以填写IP或主机名
[root@ansible-1 ~]# ansible all -m ping
192.168.0.224 | SUCCESS => {
"changed": false,
"ping": "pong"
}
192.168.0.225 | SUCCESS => {
"changed": false,
"ping": "pong"
}
常用模块介绍(module_name)
官方模块介绍地址:http://docs.ansible.com/ansible/latest/modules_by_category.html
1)command模块:远程主机上运行命令
command模块为ansible默认模块,不指定-m参数时,使用的就是command模块;
comand模块比较简单,常见的命令都可以使用,但其命令的执行不是通过shell执行的,所以,像这些 "<", ">", "|", and "&"操作都不可以,当然,也就不支持管道;
缺点:不支持管道,就没法批量执行命令
示例:
[root@ansible-1 ~]# ansible xycm -m command -a "ls /"
192.168.0.224 | SUCCESS | rc=0 >>
bin
boot
cgroup
dev
etc
home
lib
.......... 略一部分 ...........
192.168.0.225 | SUCCESS | rc=0 >>
bin
boot
cgroup
dev
etc
home
lib
.......... 略一部分 ...........
给远程主机添加用户,并设置密码:
[root@ansible-1 ~]# ansible xycm -a "useradd ansible-2"
192.168.0.224 | SUCCESS | rc=0 >>
192.168.0.225 | SUCCESS | rc=0 >>
设置密码:
[root@ansible-1 ~]# ansible xycm -a "echo weixiao | passwd --stdin ansible-2"
192.168.0.224 | SUCCESS | rc=0 >>
weixiao | passwd --stdin ansible-2
192.168.0.225 | SUCCESS | rc=0 >>
weixiao | passwd --stdin ansible-2
shell模块:
使用shell模块,在远程命令通过/bin/sh来执行;所以,我们在终端输入的各种命令方式,都可以使用;
但是我们自己定义在.bashrc/.bash_profile中的环境变量shell模块由于没有加载,所以无法识别;如果需要使用自定义的环境变量,就需要在最开始,执行加载自定义脚本的语句;
对shell模块的使用可以分成两块:
1) 如果待执行的语句少,可以直接写在一句话中:
[root@ansible-1 ~]# ansible xycm -a ". .bash_profile;ps -ef|grep crond" -m shell
2) 使用scripts模块可以在本地写一个脚本,在远程服务器上执行:
示例:
[root@ansible-1 /]# vim 123.sh
#!/bin/bash
echo "ni ye bu de yi wo hui xiao xiao de liqu"
[root@ansible-1 /]# ansible xycm -m script -a "/123.sh"
192.168.0.225 | SUCCESS => {
"changed": true,
"rc": 0,
"stderr": "Shared connection to 192.168.0.225 closed.\r\n",
"stdout": "ni ye bu de yi wo hui xiao xiao de liqu\r\n",
"stdout_lines": [
"ni ye bu de yi wo hui xiao xiao de liqu"
]
}
192.168.0.224 | SUCCESS => {
"changed": true,
"rc": 0,
"stderr": "Shared connection to 192.168.0.224 closed.\r\n",
"stdout": "ni ye bu de yi wo hui xiao xiao de liqu\r\n",
"stdout_lines": [
"ni ye bu de yi wo hui xiao xiao de liqu"
]
}
3) copy模块:把当前主机文件复制到远程主机位置,可以指定mode(权限)、own(所属主)、group(所属组)
[root@ansible-1 /]# ansible all -m copy -a "src=/123.sh dest=/ mode=644 owner=root group=root"
4)fetch模块:和copy相反,从远程主机拷贝文件到本地主机
[root@ansible-1 /]# ansible xycm -m fetch -a "src=/opop-1 dest=/mnt/kkkk/"
192.168.0.224 | SUCCESS => {
"changed": true,
"checksum": "da39a3ee5e6b4b0d3255bfef95601890afd80709",
"dest": "/mnt/kkkk/192.168.0.224/opop-1",
"md5sum": "d41d8cd98f00b204e9800998ecf8427e",
"remote_checksum": "da39a3ee5e6b4b0d3255bfef95601890afd80709",
"remote_md5sum": null
}
192.168.0.225 | SUCCESS => {
"changed": false,
"file": "/opop-1",
"msg": "the remote file does not exist, not transferring, ignored"
}
注:当dest=/kkkk/,abc.txt会保存在/kkkk/目录下
当dest=/kkkk,会拷贝abc.txt文件,并命名为kkkk
5)cron模块:在远程主机制定crontab周期性计划任务
minute= hour= day= month= weekday= job= name=(必须填写) state=
分 时 日 月 周 执行的命令 用户名
例如:
ansible all -m cron -a "minute=*/10 job='/sbin/ntpdate 10.10.10.10 &> /dev/null' name=Synctime"
在被管理的主机上使用crontab -l查看
[root@WebServer ~]# crontab -l
#Ansible: Synctime
*/10 * * * * /sbin/ntpdate 10.10.10.10 &> /dev/null
在管理(ansible)的主机上,可以删除制定的计划任务
[root@wlm ~] ansible all -m cron -a "state=absent name=Synctime"
### absent = 缺席 ###
Ansible安装及配置的更多相关文章
- 服务器批量管理软件ansible安装以及配置
1.yum安装(管理主机以及被管理主机都需要安装) yum install epel-release yum install ansible 2.配置管理主机 vim /etc/ansible/hos ...
- Ansible 安装与配置(一)
公司大概有200多云主机需要进行管理,但是如果通过手工管理费时还累最终结果也容易出错,所以考虑通过自动化的方式来管理云主机,目前开源的自动化工具,大家用的比较多的有Ansible和Saltstack这 ...
- 15.Ansible安装与配置简单版
Ansible是一个简单高效的自动化运维管理工具,用Python开发,能大批量管理N多台机器,可以并发的在多台机器上部署应用.安装软件.执行命令.配置和编排任务. 一.Ansible工作机制 从图中可 ...
- 1.Ansible安装以及配置
本节内容以Centos7为系统环境进行讲解: 1.安装epel源,方便直接yum安装: wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun ...
- ansible安装和配置
一.安装ansible准备 //安装准备 .两台机器 172.7.15.106 172.7.15.111 .设置hostname以及hosts 172.7.15.106 web9.lulu.com 1 ...
- ansible安装、配置ssh、hosts、测试连接
.安装ansible 1.1.源码安装 源码安装参照 https://www.cnblogs.com/guxiong/p/7218717.html [root@kube-node3 ~]# .tar. ...
- Ansible安装 入门教程
learn一门新技术咯: ansible是新出现的自动化运维工具,基于Python开发,集合了众多运维工具(puppet.cfengine.chef.func.fabric)的优点,实现了批量系统配置 ...
- Ansible安装部署及常用模块详解
Ansible命令使用 Ansible语法使用ansible <pattern_goes_here> -m <module_name> -a <arguments> ...
- Ansible安装配置Nginx
一.思路 现在一台机器上编译安装好nginx.打包,然后在用ansible去下发 cd /etc/ansible 进入ansible配置文件目录 mkdir roles/{common,install ...
随机推荐
- 解决Linux服务器tomact-8.0启动慢的问题
环境信息: CentOS release 6.8 tomcat-8.0 JDK1.8 一.启动tomcat #sh /root/tomcat-8.0/bin/startup.sh #tailf /ro ...
- SQL Server中的数据类型
参考 SQL Server 2012编程入门经典(第4版) SQL Server 自带的数据类型 整型: 货币 近似小数 日期/时间 特殊数字 字符 Unicode 二进制 其他
- javaSE总结
1 java的历史 1991-至今 詹姆斯-高斯林 SUN公司 ORACLE 2009年 2 java的版本 javaSE java的标准桌面级开发 javaEE 企业级web开发 javaM ...
- 【转】解决CentOS 64位系统vsftpd 530 login incorrect的问题
转自:http://www.centos.bz/2011/12/centos-64-install-vsftpd-530-login-incorredct/ 今天在centos 6 64位测试安装vs ...
- .Net Core(完) 创建Docker镜像
使用Docker可以在操作系统上分出多个独立的区域(容器/Container),各个容器之间基本隔离,且可以有自己单独的系统配置.软件等,各个容器之间的软件基本不会互相干扰.Docker上配置好的容器 ...
- 工程设计文档服务EngineerCMS
工程设计单位或个人的设计文件分类有其特点,利用engineercms的分类目录可以很好地管理资料.多单位,多人,多工程都可以适应. 其他engineercms是一个通用的文档管理,文档协作,在线预览d ...
- 安卓APP应用在各大应用市场上架方法整理
想要把APP上架到应用市场都要先注册开发者账号才可以.这里的方法包括注册帐号和后期上架及一些需要注意的问题.注意:首次提交应用绝对不能随便删除,否则后面再提交会显示应用APP冲突,会要求走应用认领流程 ...
- tkinter中Radiobutton单选框控件(七)
Radiobutton控件 由于本次内容中好多知识都是之前重复解释过的,本次就不做解释了.不太清楚的内容请参考tkinter1-6节中的内容 import tkinter wuya = tkinter ...
- 洗礼灵魂,修炼python(31)--面向对象编程(1)—面向对象,对象,类的了解
面向对象 1.什么是面向对象 (图片来自网络) 哈哈,当然不是图中的意思. 1).面向对象(Object Oriented,OO)是软件开发方法.利用各大搜索引擎得到的解释都太官方,完全看不懂啥意思对 ...
- python第二十一天---昨天没写完作业
作业 2, 模拟计算器开发:实现加减乘除及拓号优先级解析用户输入 1 - 2 * ( (60-30 +(-40/5) * (9-2*5/3 + 7 /3*99/4*2998 +10 * 568/14 ...