Ansible安装和基本使用,你学会了吗?

    作者:匿名更新于: 2022-11-30 11:23:48

      由于Ansible不是一个服务,所以更改完配置后无无需进行重启操作(也没提供重启的操作方法),改完配置立即生效。

      一、Ansible安装

      Ansible的安装方法主要有以下三种:

      1、yum使用EPEL源安装

      复制

      1.  $ mv /etc/yum.repos.d/epel.repo /etc/yum.repos.d/epel.repo.backup

      2.  $ mv /etc/yum.repos.d/epel-testing.repo /etc/yum.repos.d/epel-testing.repo.backup

      3.  $ wget -O /etc/yum.repos.d/epel.repo https://mirrors.aliyun.com/repo/epel-7.repo

      4.  $ yum clean all && yum makecache

      5.  # 可以使用以下三种方式查看ansible包的信息

      6.  $ yum info ansible

      7.  $ yum list ansible

      8.  $ yum list | grep ansible

      9.  ansible.noarch 2.9.27-1.el7 epel

      10.  ansible-collection-microsoft-sql.noarch 1.1.0-1.el8 AppStream

      11.  ansible-collection-redhat-rhel_mgmt.noarch 1.0.0-2.el8 AppStream

      12.  ansible-doc.noarch 2.9.27-1.el7 epel

      13.  ansible-freeipa.noarch 0.3.8-1.el8 AppStream

      14.  ansible-freeipa-tests.noarch 0.3.8-1.el8 AppStream

      15.  ansible-inventory-grapher.noarch 2.4.4-1.el7 epel

      16.  ansible-lint.noarch 3.5.1-1.el7 epel

      17.  ansible-openstack-modules.noarch 0-20140902git79d751a.el7 epel

      18.  ansible-pcp.noarch 2.2.1-1.el8 AppStream

      19.  ansible-python3.noarch 2.9.27-1.el7 epel

      20.  ansible-review.noarch 0.13.4-1.el7 epel

      21.  ansible-test.noarch 2.9.27-1.el7 epel

      22.  centos-release-ansible-29.noarch 1-2.el8 extras

      23.  kubernetes-ansible.noarch 0.6.0-0.1.gitd65ebd5.el7 epel

      24.  python2-ansible-runner.noarch 1.0.1-1.el7 epel

      25.  python2-ansible-tower-cli.noarch 3.3.9-1.el7 epel

      26.  vim-ansible.noarch 3.2-1.el7

      27.  # 安装ansible

      28.  $ yum -y install ansible

      29.  $ ansible --version

      2、编译安装

      复制

      1.  $ yum -y install python-jinja2 PyYAML python-paramiko python-babel python-crypto

      2.  # 需要提前安装Python环境(略)

      3.  $ wget https://releases.ansible.com/ansible/ansible-2.9.27.tar.gz

      4.  $ tar xf ansible-2.9.27.tar.gz

      5.  $ cd ansible-2.9.27

      6.  $ ls -al

      7.  total 160

      8.  drwxr-xr-x 2 root root 4096 May 25 05:18 bin

      9.  drwxr-xr-x 2 root root 4096 May 25 05:18 changelogs

      10.  drwxr-xr-x 3 root root 4096 May 25 05:18 contrib

      11.  -rw-r--r-- 1 root root 35148 May 25 05:18 COPYING

      12.  drwxr-xr-x 6 root root 4096 May 25 05:18 docs

      13.  drwxr-xr-x 3 root root 4096 May 25 05:18 examples

      14.  drwxr-xr-x 3 root root 4096 May 25 05:18 hacking

      15.  drwxr-xr-x 3 root root 4096 May 25 05:18 lib

      16.  drwxr-xr-x 2 root root 4096 May 25 05:18 licenses

      17.  -rw-r--r-- 1 root root 13840 May 25 05:18 Makefile

      18.  -rw-r--r-- 1 root root 1731 May 25 05:18 MANIFEST.in

      19.  drwxr-xr-x 10 root root 4096 May 25 05:18 packaging

      20.  -rw-r--r-- 1 root root 7724 May 25 05:18 PKG-INFO

      21.  -rw-r--r-- 1 root root 5175 May 25 05:18 README.rst

      22.  -rw-r--r-- 1 root root 351 May 25 05:18 requirements.txt

      23.  -rw-r--r-- 1 root root 12949 May 25 05:18 setup.py

      24.  -rw-r--r-- 1 root root 28352 May 25 05:18 SYMLINK_CACHE.json

      25.  drwxr-xr-x 7 root root 4096 May 25 05:18 test

      26.  $ python setup.py build

      27.  $ python setup.py install

      28.  $ mkdir /etc/ansible

      29.  $ cp -r examples/* /etc/ansible

      3、Git 源码安装

      复制

      1.  $ git clone https://github.com/ansible/ansible.git

      2.  $ cd ansible

      3.  $ git checkout stable-2.9

      4.  Updating files: 100% (19674/19674), done.

      5.  Branch 'stable-2.9' set up to track remote branch 'stable-2.9' from 'origin'.

      6.  Switched to a new branch 'stable-2.9'

      7.  $ source ./hacking/env-setup

      4、pip安装

      复制

      1.  $ yum install python-pip python-devel

      2.  $ yum install gcc glibc-devel zibl-devel rpm-bulid openss1-devel

      3.  $ pip install -U pip

      4.  $ pip install ansible --upgrade

      二、Ansible相关文件说明

      1、配置文件

    •   /etc/ansible/ansible.cfg :主配置文件,配置ansible工作特性;
    •   /etc/ansible/hosts :主机清单文件,管理的目标主机地址清单;
    •   /etc/ansible/roles/ :存放角色的目录。

      2、主配置文件介绍

      复制

      1.  [defaults]

      2.  #inventory = /etc/ansible/hosts # 主机列表配置文件

      3.  #library =/usr/share/my_modules/ # 库文件存放目录

      4.  #remote_tmp = $HOME/.ansible/tmp # 临时py命令文件存放在远程主机目录

      5.  #local_tmp = $HOME/.ansible/tmp # 本机的临时命令执行目录

      6.  #forks = 5 # 默认并发数

      7.  #sudo_user = root # 默认sudo用户

      8.  #ask_sudo_pass = True # 每次执行ansible命令是否询间ssh密码

      9.  #ask_pass = True # 是否询问密码

      10.  #remote_port = 22 # 默认的远程登录端口

      11.  host_key_checking = False # 检查对应服务器的host_key,建议取消注释

      12.  log_path=/var/log/ansible.log # 日志文件,建议启用

      13.  #module_name = command # 默认模块,可以修改为shell模块

      以上只是一小部分关于default的相关配置,还有其他更多的配置这里暂时不一一列举。因为ansible的大部分参数都可以保持默认,无需更改。但是当你的被管理机器数量增加以后,建议将forks数量适当的调整。

      温馨提示:由于Ansible不是一个服务,所以更改完配置后无无需进行重启操作(也没提供重启的操作方法),改完配置立即生效。

      3、Inventory主机清单文件

      主机清单文件,用大白话讲其实就是被整合在一个文件中的一组或者多组被管控的节点。默认情况下,该清单文件为:/etc/ansible/hosts,通常我们可能会根据项目需求,起一个见名知意的其他名称,或者也会直接在每一套我们需要组织的项目根目录下存放一个hosts的清单文件。

      Inventory主机清单文件可以有多个,在使用plyabook时可以手动通过-i 参数指定你需要使用的清单文件名称。

      Inventory文件遵循了ini配置文件的风格,一个section就表示一组隶属于同一个分组的被管理机器。目标被管理节点默认均被视为使用SSH的22端口,但是当部分节点使用非22端口号时,也可以在清单文件中进行指定。

      被管理节点可以是以IP的形式写在清单文件中,也可以使用域名的形式。

      复制

      1.  [sites]

      2.  172.16.0.10

      3.  172.16.0.11

      4.  [appsrvs]

      5.  192.168.66.[1:30]

      6.  [nginx]

      7.  nginx1.ayunw.cn

      8.  nginx2.ayunw.cn

      9.  [apache]

      10.  apache1.ayunw.cn:2333

      11.  apache2.ayunw.cn

      12.  [nginxsrvs]

      13.  nginx[10:20].ayunw.cn

      14.  [dbservers]

      15.  redis1.ayunw.cn

      16.  redis2.ayunw.cn

      17.  [dbsrvs]

      18.  mysql-[a:z].ayunw.cn

      三、实战演练

      1、环境介绍

      我这里包括ansible主控机和另外两个被管理机器。

      复制

      1.  [root@ansible-server ~]# cat /etc/ansible/hosts

      2.  [webservers]

      3.  192.168.66.[151:153]

      4.  [dbservers]

      5.  192.168.66.151

      6.  [appservers]

      7.  192.168.66.[152:153]

      2、Ansible相关命令工具

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

      以上命令,最常用的两个:ansible和ansible-playbook,这两个命令就是ansible用来实现批量管里的关键。

    •   ansible命令通常用于一次性或者临时的任务,一般一条命令即可实现任务。通常我们称这种方式为:ad-hoc;
    •   ansible-playbook主要是应用于针对大型项目的部署,需要通过多个yaml格式的文件(以yaml或者yml结尾)组合使用,所以一般需要进行提前规划目录,整合yaml文件。

      接下来介绍几个比较常用的命令。

      (1)ansible-doc

      该命令主要用于显示针对某个模块的使用方法的帮助信息。如果忘记了模块或者模块的用法,可以通过该命令快速查看。

      复制

      1.  ansible-doc [options][module...]

      2.  # 列出可用模块

      3.  -l,--list

      4.  # 显示指定模块的playbook片段

      5.  -s,--snippet

      6.  如:

      7.  # 列出所有模块

      8.  ansible-doc -l

      9.  # 查看指定模块帮助用法

      10.  ansible-doc copy

      11.  # 查看指定模块帮助用法[简化版的帮助]

      12.  ansible-doc -s copy

      注意: 在使用ansible批量管理操作之前,需要先对所有主机做一个免密认证,以确保每个被管理节点都能在ansible管理节点上通过ssh协议免密登录到被管理节点。

      免密的三种实现方式:

    •   基于ssh-keygen + shell + sshpass`方法实现
    •   基于expect实现;
    •   基于ansible-playbook实现。

      ad-hoc 方式常用参数说明:

    •   --version
    •   -m module
    •   -V
    •   --list-hosts
    •   -k,--ask-pass
    •   -C,--check
    •   -T,--timeout=TIMEOUT
    •   -u,--user=REMOTE_USER :执行远程执行的用户
    •   -b,--become
    •   --become-user=USERNAME :指定sudo的runas用户,默认为root
    •   -K,--ask-become-pass

      通配符

      复制

      1.  ansible "*"-m ping

      2.  ansible 192.168.1.* -m ping

      3.  ansible "srvs" -m ping

      4.  [root@ansible-server ~]# ansible "*" --list-hosts

      5.  hosts (3):

      6.  192.168.66.151

      7.  192.168.66.152

      8.  192.168.66.153

      逻辑或

      复制

      1.  ansible "websrvs:appsrvs" -m ping

      2.  ansible "192.168.66.151:192.168.66.152" -m ping

      逻辑与

      复制

      1.  # 在websrvs组并且在dbsrvs组中的主机

      2.  ansible "webservers:&dbservers" -m ping

      3.  192.168.66.151 | SUCCESS => {

      4.  "ansible_facts": {

      5.  "discovered_interpreter_python": "/usr/bin/python"

      6.  },

      7.  "changed": false,

      8.  "ping": "pong"

      9.  }

      逻辑非

      复制

      1.  # 在websrvs组,但不在dbsrvs组中的主机

      2.  # 注意:此处为单引号

      3.  ansible 'webservers:!dbservers' -m ping

      正则

      复制

      1.  ansible "webservers:&dbservers" -m ping

      2.  ansible "~(web|db)servers" -m ping

      (2)ansible执行命令过程

    •   加载自己的配置文件默认/etc/ansible/ansible.cfg,如果指定了你自定义的清单文件,则从自己的清单文件中查找被管理主机.
    •   加载自己对应的模块文件,如:command。
    •   通过ansible将模块或命令生成对应的临时py文件,并将该文件传输至远程服务器的对应执行用户$HOME/.ansible/tmp/ansible-tmp-数字/XXX.PY文件。
    •   给文件+x执行。
    •   执行并返回结果。
    •   删除临时py文件,退出。

      可以通过加参数 -v 或者 -vvv列出详细的执行过程(可以多加几个v参数)。

      复制

      1.  [root@ansible-server ~]# ansible "~(web|db)servers" -vvv -m ping > ansible.log

      2.  [root@ansible-server ~]# grep "chmod" ansible.log

      (3)ansible执行后颜色描述

      默认情况下是以下三种颜色:

    •   绿色:表示成功。
    •   黄色:修改了远程文件后并执行成功。
    •   红色:表示执行失败。

      但是在ansible配置文件中可以定义颜色,如下:

      复制

      1.  [root@ansible-server ~]# vim /etc/ansible/ansible.cfg

      2.  [colors]

      3.  #highlight = white

      4.  #verbose = blue

      5.  #warn = bright purple

      6.  #error = red

      7.  #debug = dark gray

      8.  #deprecate = purple

      9.  #skip = cyan

      10.  #unreachable = red

      11.  #ok = green

      12.  #changed = yellow

      13.  #diff_add = green

      14.  #diff_remove = red

      15.  #diff_lines = cyan

      (4)Ansible-playbook示例

      复制

      1.  [root@ansible-server ~]# cat echo-demo.yml

      2.  ---

      3.  - hosts: all

      4.  remote_user: root

      5.  tasks:

      6.  - name: echo demo

      7.  command: echo "第一个 ansible-playbook 示例"

      8.  [root@ansible-server ~]# ansible-playbook echo-demo.yml

      (5)ansible-vault

      该工具用于对yaml文件进行加解密,格式如下:

      复制

      1.  ansible-vault [create|decrypt|edit|encrypt|rekey|view]

          2.

      3.  如:

      4.  ansible-vault encrypt echo-demo.yml # 加密

      5.  ansible-vault view echo-demo.yml # 查看

      6.  ansible-vault decrypt echo-demo.yml # 解密

      7.  ansible-vault edit echo-demo.yml # 编辑加密文件

      8.  ansible-vault create echo-demo.yml # 创建新文件

      ansible是一个简单高效且很强大的工具,它的功能远不止于此。而那些不常用的命令工具,本文也暂不介绍。

      来源: 运维开发故事

      >>>>>>点击进入系统运维专题

     

    标签: Ansible工具
系统运维 更多推荐

课课家教育

未登录