ansible使用笔记(一)ansible安装及常用配置说明

目录
一、ansible介绍
二、ansible安装及常用配置说明

一、ansible介绍
ansible是2013年推出的一款IT自动化和DevOps软件,2015年被RedHat收购。是基于Python研发,糅合很多老运维工具的优点,实现了批量操作系统配置,批量程序部署,批量运行命令等功能

ansible可以实现

  • 自动化部署APP
  • 自动化管理配置项
  • 自动化持续交付
  • 自动化(AWS)云服务管理

ansible优点

  • 主从工作模式 只需要SSH和Python即可使用,无客户端
  • ansible功能强大,支持自定义模块 模块丰富 支持playbook
  • 上手容易,门槛低
  • 基于Python开发,做二次开发更容易
  • 使用公司比较多,社区活跃

ansible特性

  • 模块化设计,调用特定的模块完成特定任务
  • 基于Python语言实现
  • paramiko
  • PyYAML(半结构化语言)
  • Jinja2
  • 其模块支持JSON等标准输出格式,可以采用任何编程语言重写

管理主机

  • Ansible可以在安装了Python 2(2.7版)或Python 3(3.5版及更高版本)的任何计算机上运行。这包括Red Hat,Debian,CentOS,macOS,任何BSD等。控制节点不支持Windows
  • ansible 使用以下模块,都需要安装
    paramiko
    PyYAML(半结构化语言)
    Jinja2
    httplib2
    six

对于被托管的主机

  • ansible默认通过SSH协议管理机器
  • 被管理主机要开启SSH服务,允许ansible主机登录
    在托管节点上也需要安装Python 2(2.7版)或Python 3(3.5版及更高版本)
    如果托管节点上开启中了SElinux,需要安装libselinux-Python

部署证书文件
ansible 是通过SSH在远程执行命令的,SSH远程执行命令必须通过认证才行,密码写入配置文件安生性很差,一般会使用key方式认证,给所有主机公钥
没有秘钥命令执行会出错

二、ansible安装及常用配置说明
环境准备
6台主机,1台管理主机,5台托管主机,以实现批量程序部署,批量运行命令等功能,具体要求如下表

ansible常用配置参数说明

  • ansible配置文件查找顺序

  • 首先检测 ANSIBLE_CONFIG变量定义的配置文件

  • 其次检查当前目录下 ./ansible.cfg文件

  • 再次检查当前用记家目录下 ~/ansible.cfg 文件

  • 最后检查/etc/ansible/ansible.cfg文件

  • /etc/ansible/ansible.cfg是ansible默认配置文件路径

  • /etc/ansible/hosts 是ansible默认host文件路径

ansible.cfg配置文件
inventory 定义托管主机地址配置host文件路径名 指定的配置文件,写入远程主机的地址
host_key_checking = False ssh主机key验证配置参数
-如果为False,不需要输入yes
-如果为Ture,等待输入yes
ansible_ssh_prot
ssh端口号:如果不是默认的端口号,通过此变量设置
ansible_ssh_user
默认的ssh用户名
ansible_ssh_pass
ssh密码(这种方式并不安全,强烈建议使用SSH密钥)
ansible_ssh_private_key_file
ssh使用的私钥文件,适用于有多个密钥,而你不想使用SSH代理的情况

ansible 托管主机地址配置host文件
格式
# 表示注释
[组名称]
主机名称或IP地址, 其它参数

  • vars变量定义,用于组名后面
    例如
    [all:vars] //指定所有组key的存放位置
    ansible_ssh_private_key_file="/root/keyfile/id_dsa"
  • children子组定义,用于引用其它组名称
    例如
    [app:children] //其中web、db分别为不同分组
    web
    db
[root@ansible myansible]# cat myhost 
[app1]
web1
db1
[app2]
web2
db2
[app:children]
app1
app2
[other]
cache
[all:vars]
ansible_ssh_private_key_file="/root/keyfile/id_dsa"
  • ansiblew命令基础
    列出要执行主机
    ansible all --list-hosts
  • 批量检测主机
    ansible all -m ping -k
  • ansible主机集合 -m 模块名称 -a 模块参数
    主机集合 主机名或分组名,多个使用"逗号"分隔
    -m 模块名称,默认command模块
    -a or --args模块参数
    其它参数
    -i inventory文件路径,或可执行脚本
    -k 使用交互式登陆密码
    -e 定义变量
    -v 显示详细信息

1 )管理主机 安装EPEL源 EPEL源包含上面ansible所需要的所有模块

[root@ansible ~]# wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
[root@ansible ~]# yum clean all
[root@ansible ~]# yum repolist

2)安装ansible

[root@ansible ~]# yum -y install ansible              
[root@ansible ~]# ansible --version  //查看ansible版本
ansible 2.9.13

3)生成秘钥 配置免秘登陆托管主机

[root@ansible ~]# vim /etc/ansible/hosts
[web]
web1
web2
[db]
db[1:2]
[other]
cache

[root@ansible ~]# ssh-keygen  //一路回车生成秘钥
[root@ansible .ssh]# ansible all -m ping  //测试 失败
web1 | UNREACHABLE! => {
    "changed": false, 
    "msg": "Failed to connect to the host via ssh: Permission denied (publickey,gssapi-keyex,gssapi-with-mic,password).", 
    "unreachable": true
}
db1 | UNREACHABLE! => {
    "changed": false, 
    "msg": "Failed to connect to the host via ssh: Permission denied (publickey,gssapi-keyex,gssapi-with-mic,password).", 
    "unreachable": true
}
......

[root@ansible .ssh]# for i in {40..45};do ssh-copy-id root@192.168.4.1$i; done   //使用for循环给托管主机传送秘钥 免秘登陆
[root@ansible .ssh]# ansible all -m ping  //成功
db2 | SUCCESS => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    }, 
    "changed": false, 
    "ping": "pong"
}
db1 | SUCCESS => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    }, 
    "changed": false, 
    "ping": "pong"
}
......

4 )指定秘钥存放位置

[root@ansible ~]# mkdir keyfile/
[root@ansible ~]# mv .ssh/id_dsa keyfile/  //改变key的存放位置
[root@ansible ~]# ansible all -m ping    //失败
web1 | UNREACHABLE! => {
    "changed": false, 
    "msg": "Failed to connect to the host via ssh: Permission denied (publickey,gssapi-keyex,gssapi-with-mic,password).", 
    "unreachable": true
}
......

[root@ansible ~]# cat /etc/ansible/hosts
[web]
web1
web2
[db]
db[1:2]
[other]
cache
[all:vars]
ansible_ssh_private_key_file="/root/keyfile/id_dsa"   //指定key的存放位置
[root@ansible ~]# ansible all -m ping   //成功
db2 | SUCCESS => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    }, 
    "changed": false, 
    "ping": "pong"
}
......

[root@ansible ~]# mkdir myansible
[root@ansible ~]# cd myansible/
[root@ansible myansible]# vim myhost
[app1]
web1
db1
[app2]
web2
db2
[app:children]
app1
app2
[other]
cache
[all:vars]
ansible_ssh_private_key_file="/root/keyfile/id_dsa"

[root@ansible myansible]# vim ansible.cfg
[defaults]
inventory = myhost
host_key_checking = False

[root@ansible myansible]# ls
ansible.cfg  myhost

[root@ansible myansible]# ansible app1 -m ping
web1 | SUCCESS => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    }, 
    "changed": false, 
    "ping": "pong"
}
db1 | SUCCESS => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    }, 
    "changed": false, 
    "ping": "pong"
}

[root@ansible myansible]# ansible app -m ping
db1 | SUCCESS => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    }, 
    "changed": false, 
    "ping": "pong"
}
......

5 ) 测试ansible.cfg文件

[root@ansible myansible]# ansible app --list-hosts   //首先检查本目录 下ansible.cfg文件 成功
  hosts (4):
    web1
    db1
    web2
    db2
[root@ansible myansible]# cd ..
[root@ansible ~]# ansible app --list-hosts    //本目录下无ansible.cfg文件  默认的/etc/ansible/hosts 也没有定义app 组 报错
[WARNING]: Could not match supplied host pattern, ignoring: app
[WARNING]: No hosts matched, nothing to do
  hosts (0):
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,254评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,875评论 3 387
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,682评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,896评论 1 285
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,015评论 6 385
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,152评论 1 291
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,208评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,962评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,388评论 1 304
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,700评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,867评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,551评论 4 335
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,186评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,901评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,142评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,689评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,757评论 2 351