Ansible

Ansible

ansible简介

ansible是2013年推出的一款it自动化和Devopsruanjian,基于python研发,糅合许多运维工具的优点,实现了批量操作系统配置,批量程序部署,批量运行命令等功能

ansible可以实现

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

为什么选择ansible

  • 活跃度
  • 学习成本
  • 使用成本
  • 编码语言
  • 性能
  • 使用是否广泛

ansible优点

  • 只需要ssh和python即可使用
  • 无客户端
  • ansible功能强大,模块丰富
  • 上手容易,门槛低
  • 基于python开发,做二次开发更容易
  • 使用公司比较多,社区活跃

ansible特性

  • 模块化设计,调用特定的模块完成特定的任务

  • 基于python语言实现

    paramiko

    PyYAML(半结构化语言)

    jinja2

  • 其模块支持JSON等标准输出格式,可以采用任何编程语言重写

  • 部署简单

  • 主从模式工作

  • 支持自定义模块

  • 支持playbook

  • 易于使用

  • 支持多层部署

  • 支持异构it环境

ansible工作流程

主机的集合执行命令的集合

在这里插入图片描述
在这里插入图片描述

抓取全量机器&分组列表,使用host-pattern过滤机器列表(主机的集合)

根据参数确定执行模块和配置:(命令的集合)

ansiible的部署

  • 对管理主机

    要求python2.7或者3.6以上

  • ansible使用以下模块,都要安装

    paramiko

    PyYAML

    Jinja2

    httplib2

    six

软件依赖关系(被管理主机)

  • ansible默认通过ssh协议管理机器
  • 被管理主机要开启ssh服务,允许ansible主机登录
  • 在托管节点上也需要安装python2.7或3.6以上的版本
  • 如果托管节点上开启了selinux,需要安装libselinux-python

在线安装

yum -y install https://dl.fedoraproject.org/pub/epel/epel-release-latest-8.noarch.rpm

yum -y install ansible

验证

ansible --version

ansible的使用

  • 主机的定义与分组

    安装ansible之后可以做一些简单的任务

  • ansible配置文件查找顺序

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

    其次检测当前目录下的./ansible.cfg文件

    再次检测当前用户家目录下的 ~/ansible.cfg文件

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

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

  • ansible.cfg配置文件

    –inventofy 定义托管主机地址配置文件路径名

    –inventory 指定的配置文件,写入远程主机的地址

    格式

    – #表示注释

    【组名称】

    ​ 主机名称或者IP地址,其他参数

  • ansible.cfg配置文件(2)

    –ssh 主机 key 验证配置参数 14

    –host_key_checking = false 61

    如果为 false,不需要输入 yes

    如果为true,需要输入 yes

  • 分组定义、范围定义样例

    [web]

    web1

    web2

    [db]

    db[1:2]

    [other]

    cache

ansible的命令基础
  • ansible 主机集合 -m 模块名称 -a 模块参数

    —— 主机集合 主机名或分组名,多个使用 “逗号” 分割

    —— -m 模块名,默认 command 模块

    —— -a or --args 模块参数

  • 其他参数

    —— -i inventory 文件路径,或可执行脚本

    —— -k 使用交互式登录密码

    —— -e 定义变量

    —— -v 显示详细信息

  • 列出要执行的主机

    ansible 组名  --list-hosts
    
    ansible 单个主机  --list-hosts
    
    ansible all --list -hosts  列出所有主机
    
  • 批量检测主机

    ansible all -m ping -k
    
ansible设置免密登录

部署证书文件

  • ansible 是通过ssh在远程执行命令的

  • ssh 远程执行命令必须通过认证才行

  • 密码写入配置文件安全性很差

  • 使用key方式认证

  • 给所有主机部署公钥

    没有密钥命令执行会出错

    ansible web -a ‘uptime’

创建一对密钥,给所有主机部署密钥

cd /root/.ssh
ssh-keygen -t rsa -b 2048 -N '' -f key  #创建ansible的密钥,密码为空,重命名为key
ssh-copy-id -i key.pub  root@web   #把公钥传到web1,web2等等
...  有几个被控主机,传几次
#部署完成之后测试,是否部署成功
ansible all -m ping   
#测试时,第一遍应该会出现ssh服务不通,因为我们修改了ssh密钥的默认名字,
#有两种方式可以解决,一种是书写inventory文件时加入相应的变量,在下面有介绍到
#还有一种修改本机ssh服务的默认密钥名
#在家目录下的.ssh目录下创建一个名为config的文档
#vim config
#Host *
#        IdentityFile ~/.ssh/key
#        StrictHostKeyChecking no

在这里插入图片描述

inventory扩展参数

  • inventory参数说明

    ansible_ssh_port

    —— ssh端口:如果不是默认的端口号,通过此变量设置

    ansible_ssh_user

    ——默认的ssh用户名

    ansible_ssh_pass

    ——ssh密码(这种方式并不安全,我们建议使用 --ask-pass 或者ssh密钥)

    ansible_ssh_private_key_file

    ——ssh使用的私钥文件,适用于有多个密钥,而你不想使用ssh代理的情况

    1. vars 变量定义,用于组名后面

      例如:

      [all:vars]

      ansible_ssh_private_key_file="/root/.ssh/key"
      #注明密钥位置,密钥可以使用非默认名称

      [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-paZyoEKR-1629803981228)(C:\Users\22380\AppData\Roaming\Typora\typora-user-images\image-20210816001235107.png)]在这里插入图片描述 2. children 子组定义,用于引用其他组名称 例如

      [app:children]

      web

      db

ansible的基本配置

书写配置文件(通过配置文件加载顺序,可以设置无数个配置文件)

cd /ssh
vim ansible.cfg 
[defaults]
inventory      =  inventory
remote_user = root
ask_pass = false


vim inventory
[app]
A
B

[app2]
C
D

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-dxGwwion-1629803981231)(C:\Users\22380\AppData\Roaming\Typora\typora-user-images\image-20210817104439037.png)]

ansible配置文件中的参数描述
inventory指定清单文件的路径
remote_user要在受管主机上登录的用户的名称,如果未指定,则使用当前的用户名称
ask_pass是否提示输入ssh密码,如果使用ssh公钥身份验证,改为false
become连接后是否在受管主机上切换用户(通常切换为root),这里可以通过play指定
become_method如何切换用户(通常为sudo,也是默认方式,也可选择su - )
become_user要在受管主机上切换的用户(通常是root,也是默认值)
become_ask_pass是否腰围become_method提示输入密码,默认为false,但是在上面选择切换用户的方式为 su - 时,必须选择为 true

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-KzjNBtGK-1629803981233)(C:\Users\22380\AppData\Roaming\Typora\typora-user-images\image-20210817113624295.png)]

动态主机

vim ansible.cfg 
[defaults]
inventory      =  a.py #(可以是脚本(但是格式只能是json))
host_key_checking = false

vim a.py
#! /usr/bin/python
import json
hostlist = {}
hostlist["aa"] = ["A", "B"]
hostlist["bb"] = ["C", "D"]
print json.dumps(hostlist)
ansible的模块
模块名作用
ping测试连通性(在ansible中ping是进行ssh测试)
command远程命令执行 格式 ansible all -m command -a ‘执行指令’;(默认模块)
shell用法与command模块执行方法一致
script在本地写好脚本,使用script模块批量执行
yum软件包管理
service管理服务状态
copy复制文件到远程之间 (修改配置)
lineinfile修改配置文件,(修改某一行)
replace修改配置文件,只匹配要修改的地方
setup用于获取主机信息
  • command模块注意事项
    
    - 该模块通过-a跟上要执行的命令可以直接执行,若命令里有如下字符则执行不成功
    
      ” <",">"," | " ,"&"
    
    - command模块不能解析系统变量
    
    - 该模块不启动shell直接在ssh进程中执行,所有使用到shell的命令执行都会失败
    
    - 书写格式
    

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-sEMiIoAT-1629803981234)(C:\Users\22380\AppData\Roaming\Typora\typora-user-images\image-20210817114506476.png)]

shell模块

  • - shell模块用法基本与command一致,但是可以执行任意命令(交互式命令除外)
    
      启用远程的shell
    
      双引号本地shell解析
    
      单引号远程shell解析
    
      \\\两次解析
    
    - 变量解析
      ansible执行命令是二次解析
      第一次在本机执行,第二次在执行机器解析
      需要第二次解析的变量要转义
    

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-jmsyK8ou-1629803981236)(C:\Users\22380\AppData\Roaming\Typora\typora-user-images\image-20210817120356976.png)]

yum模块

  • 使用yum包管理器来管理软件包
  • name:要进行操作的软件包名字
  • state:动作
  • install 在模块的使用方法 installed
  • remove ===removed

例:

ansible A -m yun -a 'name=mysql ,state=installed '   #在A 主机上安装mysql

service模块

  • name:必选项,服务名称
  • enabled: 是否开机启动 yes|no
  • sleep: 执行restarted,会在stop和start之间沉睡几秒钟
  • state:对当前服务执行启动,停止,重启,重新加载等操作

例:

ansible A -m service -a 'name=mysql state=started'

copy模块

  • 复制本地文件到远程主机
  • src:复制本地文件到远程主机,绝对路径和相对路径都可,路径为目录时会递归复制,若路径以‘/’结尾,只复制目录里的内容,若不已‘ / ’ 结尾,则复制包含目录在内的整个内容,类似于rsync
  • dest:必选项,远程主机的绝对路径,如果源文件是一个目录,则该路径必须是目录
  • backup:覆盖前先备份原文件,备份文件包含时间信息,有两个选项 yes|no
  • force:若目标主机包含该文件,但内容不同,如果设置为yes,则强制覆盖,设为no,则只有当目标主机的目标位置不存在该文件时才复制,默认为yes
ansible   A -m copy -a 'src=/etc/resolv.conf     dest=/etc/resolv.conf'
#复制文件
ansible  A -m copy -a 'src=/etc/yum.repos.d/ dest=/etc/yum.repos.d/'

lineinfile 模块

  • 类似于sed的一种行编辑替换模块
  • path: 目标文件文件
  • regexp: 正则表达式,要修改的行
  • line 最终修改的结果
  • 一旦匹配,整行替换
#修改my.cnf 中bin-log的格式
ansible A -m lineinfile -a 'path="/etc/my.cnf" regexp="^binlog-format" line="binlog-fromat = row" '

replace模块

  • 匹配要修改的地方
#还原my.cnf 中bin-log的格式
ansible A -m replace -a 'path="/etc/my.cnf" regexp=" row$ " replace=" mixed" '

setup模块

  • 主要用于获取主机信息,playbooks里经常会用的另一个参数gather_facts与该模块相关,setup模块下经常用的是filter参数
  • filter:过滤
ansible A -m setup   #查看主机的详细信息
ansible A -m setup | grep hostname  #查看主机名
ansible A -m setup -a 'filter=ansible_hostname'

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-x4wDX4RX-1629803981237)(C:\Users\22380\AppData\Roaming\Typora\typora-user-images\image-20210818221434154.png)][外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-qBFr36Gc-1629803981238)(C:\Users\22380\AppData\Roaming\Typora\typora-user-images\image-20210818221710586.png)][外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-OSO1vsc9-1629803981239)(C:\Users\22380\AppData\Roaming\Typora\typora-user-images\image-
20210818221658683.png)]ansible-doc

  • 模块手册,相当于shell的man
  • ansible -l 列出所有模块
  • ansible-doc modulename 查看帮助

ansible-doc | grep user #与用户相关的模块

ansible 的七种工具

第一种武器

ansible命令,用于执行临时性的工作,必须掌握

第二种武器

ansible-doc是ansible模块的文档说明,针对每个模块都有详细的说明及应用案例介绍,功能和Linux系统man命令类似,必须掌握

第三种武器

ansible-console是ansible为用户提供的交互式工具,用户可以在ansible-console虚拟出来的终端上像shell一样使用ansible内置的各种命令,这为习惯使用shell交互方式的用户提供了良好的使用体验

第四种武器

ansible-galaxy从GitHub上下载管理roles的一款工具,与python的pip类似

第五种武器

ansible-playbook是日常应用中使用效率最高的命令,工作机制:通过读取先编写好的playbook文件实现批量管理,可以理解为按一定条件组成的ansible任务集,必须掌握

第六种武器

ansible-vault主要用于配置文件加密,如编写的playbook文件中包含敏感信息,不想其他人随意查看,可用它加密/解密这个文件

第七种武器

  • ansible-pull(2000台以上使用这个模式)
  • ansible有两种工作模式pull/push,默认使用push模式工作,pull和push工作模式刚好相反
  • 设用场景:有大批量机器需要配置,即便使用高并发线程依旧要花费很多时间
  • 通常在配置大批量机器的场景下使用,灵活性稍有欠缺,但效率几乎可以无限提升,对运维人员的技术水平和前瞻性规划有较高要求
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值