• Ansible 简介安装


    1、概念介绍

    Ansible 是一款为类 Unix 系统开发的自由开源的配置和自动化工具。由 Red Hat 公司使用 python 研发,类似于 saltstack 和 Puppet,但是有一个不同和优点是我们不需要在节点中安装任何客户端。它使用 SSH 来和节点进行通信。Ansible 基于 Python paramiko 开发,分布式,无需客户端,轻量级,配置语法使用 YMAL 及 Jinja2 模板语言,更强的远程命令执行操作。

    Ansible 特点

    部署简单,只在管理端部署 Ansible 环境(ssh 和 python 2.5 以上版本),被管理端无需做操作

    默认使用 SSH 协议对设备进行管理

    易读的语法,基于 yaml 语法编写 playbook

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

    基于 Python 语言实现,由 Paramiko(python 的一个可并发连接 ssh 主机功能库), PyYAML 和 Jinja2(模板化)三个关键模块实现。支持 API(供第三方程序调用的应用程序编程接口)及自定义模块,可通过 Python 轻松扩展

    支持playbook 剧本,连续任务按先后设置顺序完成。通过Playbooks定制强大的配置、状态管理

    幂等性,一个任务执行一遍和执行 n 遍效果一样,不会因为重复执行带来意外情况。意味着在同一台服务器上多次执行同一个 playbook 是安全的

    对云计算平台、大数据都有很好的支持;

    Ansible 基本架构

    ansible 系统由管理节点和被管理节点组成,Ansible 在管理节点将 Ansible 模块通过 SSH 协议推送到被管理端执行,执行完之后自动删除,可以使用 SVN、GIT 等来管理自定义模块及编排。

    由上面的图可以看到 Ansible 的组成由 5 个部分组成:

    Ansible: ansible 的核心程序

    Modules:包括 Ansible 自带的核心模块及自定义模块。

    • Core Modules:Ansible 执行任何管理任务都不是由 Ansible 自己完成,而是由核心 模块完成;Ansible 管理主机之前,先调用 core Modules 中的模块,然后指明管理Host Inventory 中的主机,就可以完成管理主机。
    • Custom Modules:自定义模块,完成 Ansible 核心模块无法完成的功能,此模块支持任何语言编写。

    Plugins:模块功能补充,通过插件来实现记录日志,发送邮件或其他功能。 Connection Plugins:连接插件, ansible 基于连接插件连接到各个主机上,默认是使用 ssh。

    Playbooks:剧本,YAML 格式文件。多个任务定义在一个文件中,定义主机需要调用哪些模块来完成的功能定义,即实现自动化部署文件。

    Inventory: 记录由 Ansible 管理的主机信息,包括端口、密码、ip 等。

    Ansible 任务执行方式

    ad-hoc

    即 ansible 命令,命令行界面,单条命令的批量执行,称之为 ad-hoc。 这种方式,主要用来进行功能测试,或者是简单的应用部署。

    playbook

    Playbook 方式(剧本方式),从字面意思就可以知道,我们的剧本方式是提前设置好内容,进行剧本的演示。Playbook 方式适用于大型自动化部署应用。

    即把多个想要执行的任务放到一个 playbook 中,当然多个任务在事物逻辑上最好是有上下联系的。通过多个任务可以完成一个总体的目标,这就是 playbook。

    2、安装配置

    主机

    IP

    角色

    安装软件

    node_04

    192.168.137.104

    Ansible 服务端

    Ansible

    node_05

    192.168.137.105

    node_06

    192.168.137.106

    安装 Ansible
    1. # 配置阿里网络源
    2. wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
    3. # 配置 epel 源:Ansible 软件默认不在 yum 仓库中,因此我们需要配置 epel 仓库
    4. yum install -y epel-release
    5. # 安装 absible
    6. yum install -y ansible
    配置文件说明

    通过 rpm -ql ansible 可以看到很多文件,主要是配置文件和可执行文件,以及所依赖的 python 库文件。

    /etc/ansible/ansible.cfg

    Ansible 主配置文件,这个文件主要定义了 roles_path 路径,主机清单路径,连接清单中的主机方式等配置,这些大部的默认配置已经足够我们平时使用,如需要特别配置可以自行去修改。

    /etc/ansible/hosts

    主机清单文件,这个配置文件就是默认主机清单配置文件,可通过 ansible.cfg 重新定义

    ansible 主执行程序,一般用于命令行下执行

    ansible-playbook 执行 playbook 中的任务

    ansible-doc 获取各模块的帮助信息

    1. # 配置主机清单,文件 /etc/ansible/hosts 维护着 Ansible 中服务器的清单。在文件最后追加以下内容
    2. vim /etc/ansible/hosts
    3. ----------------------------------------------------------------------
    4. [web_servers]
    5. 192.168.137.105 ansible_ssh_port=22 ansible_ssh_user=root ansible_ssh_pass=123456
    6. ----------------------------------------------------------------------
    7. # 测试主机连通性
    8. ansible -i /etc/ansible/hosts web-servers -m ping

    注意:模块组只能使用字母、数字、下划线,且字母不能开头

    SSH 秘钥访问

    一般来说,使用明文密码不安全,所以增加主机无密码访问。在 Ansible 服务端生成密钥,并且复制公钥到节点中。

    1. [root@node_04 ~] ssh-keygen
    2. ssh-copy-id root@192.168.1.12
    3. ssh-copy-id root@192.168.1.13
    4. # 修改 web_servers 为以下内容
    5. vim /etc/ansible/hosts
    6. [web_servers]
    7. 192.168.137.105
    8. 192.168.137.106
    9. # ping 模块检查网络连通性,command 模块执行 shell 命令
    10. # command:作为 ansible 的默认模块,可以运行远程权限范围内的所有 shell 命令
    11. ansible -i /etc/ansible/hosts web-servers -m ping

    注意 ansible web_servers -m ping如果不指定配置文件,默认使用/etc/ansible/hosts 文件

    3、Ansible 命令

    语法格式:ansible [-i 主机文件] [-f 批次] [组名] [-m 模块名称] [-a 模块参数]

    选项

    说明

    -v,–verbose

    详细模式,如果命令执行成功,输出详细的结果 (-vv –vvv -vvvv)

    -i PATH, -inventory=PATH

    指定 host 文件的路径,默认是在 /etc/ansible/hosts

    f NUM,-forks=NUM

    NUM 是指定一个整数,默认是 5 ,指定 fork 开启 同步进程的个数。

    -m NAME,-module-name=NAME

    指定使用的 module 名称,默认使用 command 模块

    -a,MODULE_ARGS

    指定 module 模块的参数

    -s,--sudo (旧) -b, --become(新)

    远程执行命令时使用 sudo 方式,相当于 Linux 系统下的 sudo 命令。

    -U SUDO_USERNAME(旧) --become-user(新)

    sudo 到哪个用户,默认为 root

    -K,-ask-sudo-pass

    提示输入 sudo 密码,与 -sudo 一起使用

    -u USERNAME,-user=USERNAME

    指定移动端的执行用户

    -k,-ask-pass

    提示输入 ssh 的密码,而不是使用基于 ssh 的密钥认证

    -C,-check

    测试此命令执行会改变什么内容,不会真正的去执行

    ansible 基于 ssh 连接 -i (inventory)参数后指定的远程主机时,也可以写端口,用户,密码。

    检查节点运行时间
    1. # 检查 Ansible 节点的运行时间
    2. ansible web_servers -m command -a uptime

    给节点增加新用户
    1. # 给节点增加用户
    2. ansible web_servers -m command -a "useradd user1"

    ansible web_servers -m command -a "id user1"

    1. # 给新增的节点用户设置密码
    2. ansible web_servers -m shell -a "echo 'user1:123456' | chpasswd "
    将输出重定向本机
    1. # 将 df 命令在所有节点执行后,重定向输出到本机的/tmp/command-output.txt 文件中
    2. ansible -m command -a "df -Th" 'web-servers' > /tmp/command-output.txt
    3. cat /tmp/command-output.txt

  • 相关阅读:
    Android frameworks学习
    如何真正理解Spring的核心思想 ?
    数据资产为王,如何解析企业数字化转型与数据资产管理的关系?
    kubernetes-Service详解
    vue如何动态加载显示本地图片资源
    mysql主从复制
    4、数据结构
    SaaSBase:什么是Asana?
    Git GitHub GitLab
    Elasticsearch基础条件查询
  • 原文地址:https://blog.csdn.net/Yuanshigou9/article/details/136268776