1-ansible

1-ansible基本概念

ansible相关概念

1.ansible是什么?

  • ansible是自动化运维工具

2.ansible能做什么?

  • ansible可以实现批量系统配置
  • ansible可以实现批量程序部署
  • ansible可以实现批量运行命令
  • ansible可以实现运维的自动化,在一台主机上同时管理配置多台主机。

3.ansible简介

  • ansible基于Python开发的
  • ansible是基于模块工作的
    • ansible本身没有批量部署的能力,真正具有部署能力的是ansible所运行的模块。
  • ansible只是提供一种框架,
    • 架构图如下:

    • ①连接插件connect plugins

      • 复制和监控端实现通信
    • ②host inventory

      • 指定被操作的主机,是一个配置文件中定义的监控主机
    • ③各种模块

      • command模块、shell模块、service模块等等
    • ④借助于插件完成记录日志邮件等功能

    • ⑤playbook

      • 编排定义Ansible任务集的配置文件,由Ansible顺序依次执行,通常是JSON格式的YML文件
    • ⑥Roles

      • 用于层次性、结构化地组织playbook。

4.ansible的特点

  • 模块化:调用特定的模块,完成特定任务
  • Paramiko(python对ssh的实现),PyYAML,Jinja2(模板语言)三个关键模块
  • 支持自定义模块
  • 基于Python语言实现
  • 部署简单,基于python和SSH(默认已安装),agentless
  • 安全,基于OpenSSH
  • 支持playbook编排任务
  • 幂等性:一个任务执行1遍和执行n遍效果一样,不因重复执行带来意外情况
  • 无需代理不依赖PKI(无需ssl)
  • 可使用任何编程语言写模块
  • YAML格式,编排任务,支持丰富的数据结构
  • 较强大的多层解决方案

5.ansible的主要组成成分

  • ANSIBLE PLAYBOOKS:
    • 任务剧本(任务集),编排定义Ansible任务集的配置文件,由Ansible顺序依次执行,通常是JSON格式的YML文件
  • INVENTORY:
    • Ansible管理主机的清单/etc/anaible/hosts
  • MODULES:
    • Ansible执行命令的功能模块,多数为内置核心模块,也可自定义
  • PLUGINS:
    • 模块功能的补充,如连接类型插件、循环插件、变量插件、过滤插件等,该功能不常用
  • API:
    • 供第三方程序调用的应用程序编程接口
  • ANSIBLE:
    • 组合INVENTORY、API、MODULES、PLUGINS的绿框,可以理解为是ansible命令工具,其为核心执行工具

6.ansible的优点

  • (1)轻量级,无需在客户端安装agent,更新时,只需在操作机上进行一次更新即可;
  • (2)批量任务执行可以写成脚本,而且不用分发到远程就可以执行;
  • (3)使用python编写,维护更简单,ruby语法过于复杂;
  • (4)支持sudo。

ansible的软件相关

1.ansible的安装

  • rpm包安装: EPEL源
    • yum install ansible
  • 编译安装:
    • yum -y install python-jinja2 PyYAML python-paramiko python-babel python-crypto
    • tar xf ansible-1.5.4.tar.gz
    • cd ansible-1.5.4
    • python setup.py build
    • python setup.py install
    • mkdir /etc/ansible
    • cp -r examples/* /etc/ansible
  • pip安装:pip是安装Python包的管理器,类似yum
    • yum install python-pip python-devel
    • yum install gcc glibc-devel zibl-devel rpm-bulid openssl-devel
    • pip install --upgrade pip
    • pip install ansible --upgrade

2.ansible的相关程序

程序功能
/usr/bin/ansible主程序,临时命令执行工具
/usr/bin/ansible-doc查看配置文档,模块功能查看工具
/usr/bin/ansible-galaxy下载/上传优秀代码或Roles模块的官网平台
/usr/bin/ansible-playbook定制自动化任务,编排剧本工具
/usr/bin/ansible-pull远程执行命令的工具
/usr/bin/ansible-vault文件加密工具
/usr/bin/ansible-console基于Console界面与用户交互的执行工具

3.Ansible系列命令

  • Ansible命令执行来源:

    • USER,普通用户,即SYSTEM ADMINISTRATOR
    • CMDB(配置管理数据库)API调用
    • PUBLIC/PRIVATE CLOUD API调用
    • USER-> Ansible Playbook -> Ansibile
  • 利用ansible实现管理的方式:

    • Ad-Hoc 即ansible命令,主要用于临时命令使用场景
    • Ansible-playbook 主要用于长期规划好的,大型项目的场景,需要有前期 的规划过程
  • Ansible主要操作对象

    • HOSTS主机
    • NETWORKING网络设备
  • 注意事项

    • 执行ansible的主机一般称为主控端,中控,master或堡垒机
    • 主控端Python版本需要2.6或以上
    • 被控端Python版本小于2.4需要安装python-simplejson
    • 被控端如开启SELinux需要安装libselinux-python
    • windows不能做为主控端

4.ansible的配置文件

配置文件描述
/etc/ansible/ansible.cfg主配置文件,配置ansible工作特性
/etc/ansible/hosts主机清单
/etc/ansible/roles/存放角色的目录

5.Ansible 主配置文件

  • 主配置文件:/etc/ansible/ansible.cfg(一般保持默认)

    /etc/ansible/ansible.cfg说明
    [defaults] 模块#some basic default values…
    #inventory =/etc/ansible/hosts#主机列表配置文件
    #library =/usr/share/my_modules/#库文件存放目录
    #module_utils =/usr/share/my_module_utils/-
    #remote_tmp = ~/.ansible/tmp#临时py命令文件存放在远程主机目录
    #local_tmp = ~/.ansible/tmp#本机的临时命令执行目录
    #plugin_filters_cfg = /etc/ansible/plugin_filters.yml-
    #forks = 5#默认并发数
    #poll_interval =15#默认sudo 用户
    #sudo_user =root
    #ask_sudo_pass =True
    #ask_pass =True
    #transport =smart
    #remote_port =22
    #module_lang =C
    #module_set_locale = False
    #host_key_checking =False#检查对应服务器的host_key,建议取消注释
    #log_path= /var/log/ansible.log#日志文件
    #module_name = command#默认模块

    [colors]模块
    #highlight = white强调白色
    #verbose = blue详情蓝色
    #warn = bright purple警告紫色
    #error = red错误红色
    #debug = dark gray
    #deprecate = purple
    #skip = cyan跳过青色
    #unreachable = red
    #ok = green成功绿色
    #changed = yellow变化黄色
    #diff_add = green
    #diff_remove = red
    #diff_lines = cyan
  • 根据命令执行输出的颜色不同可直观的反应命令的执行的状态

    • 绿色:执行成功并且不需要做改变的操作
    • 黄色:执行成功并且对目标主机做变更
    • 红色:执行失败

6.主机清单inventory

  • Inventory 主机清单

    • ansible的主要功用在于批量主机操作,为了便捷地使用其中的部分主机,可以 在inventory file中将其分组命名
  • 默认的inventory file为/etc/ansible/hosts

  • inventory file可以有多个,且也可以通过Dynamic Inventory来动态生成

  • inventory文件遵循INI文件风格,中括号中的字符为组名。可以将同一个主机 同时归并到多个不同的组中;此外,当如若目标主机使用了非默认的SSH端口,还可以在主机名称之后使用冒号加端口号来标明。

  • /etc/ansible/hosts文件格式
    单台主机
    green.example.com > FQDN
    192.168.100.10 > IP地址
    192.168.100.11:2222 > 非标准SSH端口

    [webservers] > 定义了一个组名
    alpha.example.org > 组内的单台主机
    192.168.100.10

    [dbservers]
    192.168.100.10 > 一台主机可以是不同的组,这台主机同时属于[webservers]

    [group:children] > 组嵌套组,group为自定义的组名,children是关键字,固定语法,必须填写。
    dns > group组内包含的其他组名
    db > group组内包含的其他组名

    [webservers]
    www[001:003].hunk.tech > 有规律的名称列表,
    这里表示相当于:
    www001.hunk.tech
    www002.hunk.tech
    www003.hunk.tech

    [databases]
    db-[a:c].example.com > 定义字母范围的简写模式,
    这里表示相当于:
    db-a.example.com
    db-b.example.com
    db-c.example.com

    以下这2条定义了一台主机的连接方式,而不是读取默认的配置设定
    localhost ansible_connection=local
    www.163.com ansible_connection=ssh ansible_ssh_user=hunk

    最后还有一个隐藏的分组,那就是all,代表全部主机,这个是隐式的,不需要写出来的。

  • Inventory 参数说明

    • ansible_ssh_host

      • 将要连接的远程主机名.与你想要设定的主机的别名不同的话,可通过此变量设置.
    • ansible_ssh_port

      • ssh端口号.如果不是默认的端口号,通过此变量设置.这种可以使用 ip:端口 192.168.1.100:2222
    • ansible_ssh_user

      • 默认的 ssh 用户名
    • ansible_ssh_pass

      • ssh 密码(这种方式并不安全,我们强烈建议使用 --ask-pass 或 SSH 密钥)
    • ansible_sudo_pass

      • sudo 密码(这种方式并不安全,我们强烈建议使用 --ask-sudo-pass)
    • ansible_sudo_exe (new in version 1.8)

      • sudo 命令路径(适用于1.8及以上版本)

    *ansible_connection
    + 与主机的连接类型.比如:local, ssh 或者 paramiko. Ansible 1.2 以前默认使用 paramiko.1.2 以后默认使用 ‘smart’,‘smart’ 方式会根据是否支持 ControlPersist, 来判断’ssh’ 方式是否可行.

    • ansible_ssh_private_key_file

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

      • 目标系统的shell类型.默认情况下,命令的执行使用 ‘sh’ 语法,可设置为 ‘csh’ 或 ‘fish’.
    • ansible_python_interpreter

      • 目标主机的 python 路径.适用于的情况: 系统中有多个 Python, 或者命令路径不是"/usr/bin/python",比如\*BSD, 或者 /usr/bin/python 不是 2.X 版本的 Python.
        我们不使用 “/usr/bin/env” 机制,因为这要求远程用户的路径设置正确,且要求 “python” 可执行程序名不可为 python以外的名字(实际有可能名为python26).

      • 与 ansible_python_interpreter 的工作方式相同,可设定如 ruby 或 perl 的路径…

7.ansible命令执行过程

    1. 加载自己的配置文件 默认/etc/ansible/ansible.cfg
    1. 加载自己对应的模块文件,如command
    1. 通过ansible将模块或命令生成对应的临时py文件,并将该文件传输至远程服务器的对应执行用户$HOME/.ansible/tmp/ansible-tmp-数字/XXX.PY文件
    1. 给文件+x执行
    1. 执行并返回结果
    1. 删除临时py文件,退出

ansible实现管理多台主机实验

【1.实验准备】

  • 中控主机:192.168.38.17 安装ansible(yum安装)
  • 中控主机与个被管理主机之间实现基于ssh key验证
  • 所以主机版本:CentOS Linux release 7.6.1810 (Core)

【2.实验规划】

  • 中控主机:192.168.38.17
  • [webserver]
    • 192.168.38.27
    • 192.168.38.37
  • [dbserver]
    • 192.168.38.37
    • 192.168.38.47
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值