自动化管理工具 Ansible 安装和运行机制、命令参数

一、ansible 概述运行

目录

一、ansible 概述运行机制

官网地址

Aasible 基本架构

Ansible 任务执行方式

ansible 具有如下特点

二、安装并配置 Ansible 管理两个节点

环境拓扑

配置 ansible 源

1. Yum配置方法一:(无网络使用)

配置本地源

配置 ansible 本地源:

2.yum源配置方法二:(有网使用)

配置阿里网络源

配置 epel 源

3.安装 ansible

4.配置文件及说明

1.配置执行文件说明

5.定义主机清单 (inventory)

1.基于端口,用户,密码定义主机清单

 配置主机清单

执行测试命令

2.基于ssh密钥来访问定义主机清单

配置ssh无密码访问

配置主机清单

执行命令测试

 三、ansible 命令参数

1.ansible 命令语法

2.测试 -m 和 -a选项

 检查 ansible 被管理节点的cpu 负载 (uptime)

 给ansible 被管理节点增加用户

 将df 命令在所有节点执行后,重定向输出到本机的/tmp/command-output.txt文件中

测试 -m、-u、-k 选项

测试 -b

列出将执行该命令的主机 


一、ansible概述和运行机制

Ansible是Red Hat公司使用python研发的开源的自动化运维工具,类似于saltstack和Puppet这样老牌的自动化运维工具。

不同的优点在于不需要在节点中安装任何客户端,使用 SSH来和节点进行通信,所以被管理节点具备 SSH服务以及 python即可,就可实现自动化管理,管理节点只需安装 Ansible 工具,以及python,openssl 即可。

小节:

Ansible e是一个部署一群远程主机的工具,通过SSH协议实现远程节点和管理节点之间的通信。管理员通过ssh登录到一台远程主机上能做的操作,Ansible都可以做到。Ansible是python开发的,故依赖一些python库和组件,如:paramiko,PyYaml和jinja三个关键组件;

官网地址

Ansible is Simple IT Automation

自动化管理工具 Ansible 安装和运行机制、命令参数_第1张图片

Aasible 基本架构

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

自动化管理工具 Ansible 安装和运行机制、命令参数_第2张图片

图中可看到 ansible 由5部分组成 

 Ansible:核心程序,主程序

Modules:包括 核心模块自定义模块,对被管理主机进行管理工作

        Core Modules: ansible 执行任何管理任务,都是由 核心模块完成;Ansible管理主机先调用core Modules中的相关模块,然后指明管理Host Inventory(清单)中的主机,完成管理主机。

       Custom Modules:自定义模块,完成 Ansible核心模块无法完成的功能,此模块支持任何语言编写

Plugins:模块功能补充,通过插件来实现记录日志,发送邮件或其他功能。

Connectior Plugins:连接插件,ansible 基于连接插件,通过ssh 协议连接到各个主机。

Host Inventory(清单): 记录由 ansible 管理的主机信息,包括端口、密码、IP等。

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

Ansible 任务执行方式

ansible执行自动化任务,分为两种执行方式:

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

2. playbook:剧本方式,把对远程主机执行的任何、操作,提前写到剧本文件当中,把多个想要执行的任务放到一个playbook中,多个任务在事务逻辑上最好是有上下联系的,通过多个任务可以完成一个总体的目标,剧本的方式使用于大型自动化部署应用。

Ad-Hoc、Ansible-playbooks,这两种方式没有本质的区别,只是应用的方式不同。

ansible 具有如下特点

部署简单,在管理主机上部署 ansible 环境,被管理端只需要安装 ssh 和 python 2.5以上版本,这个对于类unix系统来说相当与无需配置。

1.部署简单,只需在管理端部署 ansible 环境,被管理端无需做任何操作

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

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

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

5.基于 Python 语言实现,由Paramiko(python的一个可并发连接ssh主机功能库),PyYAML 和Jinja2(模板化)三个关键模块实现。

6.支持playbook剧本,连续任务按先后设置顺序完成剧本文件中的内容

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

8.对云环境中都有很好的支持

二、安装并配置 Ansible 管理两个节点

环境拓扑

主机 IP 角色 安装软件
Ansible 192.168.1.11 Ansible 管理服务器 Ansible
Clent 1 192.168.1.12 Clent
Clent 2 192.168.1.13 Clent

注: 运行 ansible 时,需关闭 selinux,或者让 selinux 放行Ansible的操作

配置 ansible 源

1. Yum配置方法一:(无网络使用)

配置本地源

vim /etc/yum.repos.d/centos7.repo
[centos7]
name=centos7
baseurl=file:///mnt
enabled=1
gpgcheck=0
 mount /dev/sr0 /mnt

配置 ansible 本地源:

vim /etc/yum.repos.d/ansible.repo
[ansible]
name=ansible
baseurl=file:///root/ansible
enabled=1
gpgcheck=0

最后上传软件包,解压

2.yum源配置方法二:(有网使用)

配置阿里网络源

地址:http://mirrors.aliyun.com

yum -y install wget
wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo

配置 epel 源

Ansible软件默认不在centos的光盘yum仓库中,因此我们需要配置 epel 仓库

yum install -y epel-release

注:Centos-7.repo提供了centos7官方发行版提供的软件包,epel源提供除了官方发行版以外的额外的软件包,适用于RHEL、CentOS和Scientific Linux。

3.安装 ansible

对于安装Ansible来说,我们只需要在管理节点上安装即可,被管理节点除了保证有python和开启了sshd服务以外,不需要任何操作。

 yum install -y ansible

4.配置文件及说明

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

1.配置执行文件说明

ansible 主配置文件:/etc/ansible/ansible.cfg

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

主机清单文件:/etc/ansible/hosts

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

清单文件保存着,对管理的主机的信息。

如:定义一组主机 [web_servers] 其中不能包含特殊字符下划线可以,其他特殊字符都不可以使用

除了以上两个重要的配置文件还有三个重要的可执行文件分别是:

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

ansible-playbook 执行 playbook(剧本)中的任务

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

5.定义主机清单 (inventory)

 在前面了解了ansible的两种运行方式后,如果想要进行测试,需要将被管理的主机添加到/etc/ansible/hosts里

1.基于端口,用户,密码定义主机清单

ansible基于ssh连接指定的远程主机,可以写端口,用户,密码

 配置主机清单

 vim /etc/ansible/hosts 

 文件 /etc/ansible/hosts 维护着Ansible中被管理服务器的清单。书写格式可以参   考/etc/ansible/hosts文件的注释说明。在文件最后追加以下内容

[web_server]
192.168.1.12  ansible_ssh_port=22  ansible_ssh_user=root ansible_ssh_pass=123456
192.168.1.13  ansible_ssh_port=22  ansible_ssh_user=root ansible_ssh_pass=123456

中括号里的web_servers是组名,组名下方为该组包括的主机,每行定义一个主机,组名需唯一,每个组里的主机一般运行着同一个服务,而组中的一台主机则可以同时属于几个不同的组。

ansible_ssh_port:指定ssh端口(如果是默认端口22,此参数可以省略)

ansible_ssh_user:指定 ssh 用户

ansible_ssh_pass:指定 ssh 用户登录是认证密码(明文密码不安全)

ansible_sudo_pass:指明 sudo 时候的密码

执行测试命令

ansible -i /etc/ansible/hosts web_server -m ping

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

 -m  #   指定使用的ping模块  默认使用的是

web_server #在主机清单文件中定义的组名

自动化管理工具 Ansible 安装和运行机制、命令参数_第3张图片 错误原因:

第一次ssh登录一台机器都需要在ansible服务器上保存目标主机的fingerprint指纹,也就是我们看到的这个页面

 解决方法:

方法1:

只需简单的配置下ansible 服务即可,通过ansible.cfg进行配置调整,一般情况下,ansible配置文件存放在/etc/ansible/ansible.cfg

注:/etc/ansible/ansible.cfg:ansible的主配置文件

vim /etc/ansible/ansible.cfg

自动化管理工具 Ansible 安装和运行机制、命令参数_第4张图片

 意思是将公钥认证检查关闭,这样就可以正常访问节点了

自动化管理工具 Ansible 安装和运行机制、命令参数_第5张图片

注:这里使用了 -m 参数,采用 ping 模块进行检测目标主机的存活性,返回值是 pong 则是正常

方法2:

 手动连接一下 /etc/anaible/hosts 主机清单中的主机,这样就可以在ansible 服务器保存目标主机的fingerprint指纹。后期可以正常连接了

ssh [email protected]
ansible -i /etc/ansible/hosts web_servers -m ping

如果对/etc/ansible/hosts中的对所有主机执行操作,可执行:

ansible all -m ping

我们可以为 /etc/ansible/hosts中的主机起别名,方便我们识别主机

[web_server]
nginx01  ansible_ssh_host=192.168.1.12  ansible_ssh_port=22  ansible_ssh_user=root ansible_ssh_pass=123456
nginx02  ansible_ssh_host=192.168.1.13  ansible_ssh_port=22  ansible_ssh_user=root ansible_ssh_pass=123456

ansible_ssh_host:指定将要连接的远程主机名或者IP

ansible_connection:与主机的连接类型,如不修改默认使用ssh

再次测试,由刚才的IP地址,变成了现在的主机别名

自动化管理工具 Ansible 安装和运行机制、命令参数_第6张图片

 还要注意一件事情,在Inventory中定义的主机,在Ansible执行时,将会全部变成运行时的变量,变量名为等号前的值,变量值为等号后的值,例如ansible_ssh_host=192.168.1.128,其中ansible_ssh_host就是变量名,192.168.1.128就是变量值

2.基于ssh密钥来访问定义主机清单

配置ssh无密码访问

一般来说,在/etc/ansible/hosts中使用明文密码不安全,所以增加主机无密码访问(基于密钥对验证)。在Ansible服务端生成密钥,并且复制公钥到节点中。

自动化管理工具 Ansible 安装和运行机制、命令参数_第7张图片

  复制公钥到节点中

 for ip in 12 13 ; do ssh-copy-id [email protected].$ip ; done

配置主机清单

vim /etc/ansible/hosts

修改web-server为以下内容

[web_server]
nginx01  ansible_ssh_host=192.168.1.12  ansible_ssh_port=22  ansible_ssh_user=root 
nginx02  ansible_ssh_host=192.168.1.13  ansible_ssh_port=22  ansible_ssh_user=root

如果ssh监听默认端口,主机清单文件也可以按下面的方式写,默认执行使用root用户进行连接远程主机

[web_servers]
nginx01 ansible_ssh_host=192.168.1.12
nginx02 ansible_ssh_host=192.168.1.13

执行命令测试

 ping 模块检查网络连通性

ansible -i /etc/ansible/hosts web_server -m ping

自动化管理工具 Ansible 安装和运行机制、命令参数_第8张图片

ansible web_server -m ping 

不指定配置文件,默认使用/etc/ansible/hosts文件

自动化管理工具 Ansible 安装和运行机制、命令参数_第9张图片

 三、ansible 命令参数

1.ansible 命令语法

ansible --help #查看帮助

Usage:  ansible [options]    #使用方法,ansible+主机+选项 

例如:ansible [组名]  [-i 主机名称]  [-m 模块名称]  [-a 模块参数]

ansible 详细参数:

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

- i  #指定清单文件(hosts)路径,不指定默认路径在/etc/ansible/hosts

 -m #指定使用的module(模块),默认使用 command模块

 - a #指定module 模块参数

- u #ssh连接的用户名,默认用root,ansible.cfg中可以配置

- k #提示输入 ssh 登录密码,当使用密码验证的时候使用

-s,--sudo:远程执行命令时使用 sudo 方式,相当于linux 系统下的 sudo命令

-U  SUDO_USERNAME,sudo到哪个用户,默认为root

注意:上述的-s-U选项在新版中已经失效。新版本选项如下两项:

-s--sudo 被改成 -b--become

-U--sudo-user被改成  --become-user

-K --ask-become-pass:使用 --become 或者 --become-user 时使用的密码认证(即提示输入sudo密码,当不是 NOPASSWD模式时使用)

-C # 用于测试 ,不会真正的执行

-f  FORKS, --forks=FORKS:并行线程数量,当有数量巨大的机器需要配置,可以使用高并发线程,默认是5个。

--list-host:只打印有哪些主机会执行这个命令,不会实际执行

 ansible-doc 详细参数:

ansible-doc -l   列出所有模块列表

ansible-doc  -s 模块名     #查看指定模块的参数 -s,

2.测试 -m 和 -a选项

 检查 ansible 被管理节点的cpu 负载 (uptime)

ansible web_server -m command -a "uptime"

说明:-m 指定ansible 要调用的模块;-a 指定具体命令, 省略-m选项,默认使用command模块

也可以把主机清单组名写到最后,这样方便阅读命令

ansible  -a "uptime" web_server

 给ansible 被管理节点增加用户

ansible -m command -a "useradd user1" web_server

ansible -m command -a"grep user1 /etc/passwd" web_server

 ansible web_server -m shell -a "echo "user1:123456" | chpasswd"

 将df 命令在所有节点执行后,重定向输出到本机的/tmp/command-output.txt文件中

ansible -m command -a "df -hT" web_server > /tmp/command-output.txt

自动化管理工具 Ansible 安装和运行机制、命令参数_第10张图片

测试 -m、-u、-k 选项

 修改/etc/ansible/hosts文件,内容如下

[web_server]
192.168.1.12  
192.168.1.13 

-m 指定ping 模块,以user1用户执行 ping存活检测,如果不指定用户,在远程机器上默认是以root用户执行

ansible 192.168.1.12 -m ping -u user1 -k
SSH password:   #此处写user1密码
192.168.1.12 | SUCCESS => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    }, 
    "changed": false, 
    "ping": "pong"
}

注意:IP需要在/etc/ansible/hosts提前里面配置,如果想在多个主机测试,这里可以改成all或组名,当然,前提是需要在hosts文件配置好。

测试 -b

以user1用户sudo到root执行ping存活检测。这种方式需要在远程主机的/etc/sudoers文件中配置user1用户,如果没有配置NOPASSWD,则需要加上-K选项

远程主机/etc/sudoers文件添加如下:

visudo

 

user1 ALL=(root)NOPASSWD: ALL
ansible 192.168.1.12 -m ping -u user1 -k -b
SSH password:    #此处输入user1 密码
192.168.1.12 | SUCCESS => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    }, 
    "changed": false, 
    "ping": "pong"
}

把上述的user1 ALL=(root)NOPASSWD: ALL换成user1 ALL=(root) ALL,再次执行

发现报错了,这个时候由于远程机器的user1用户不能免密到root用户,所以,执行方式改成如下,加-K(大写)选项

ansible 192.168.1.12 -m ping -u user1 -k -b -K

自动化管理工具 Ansible 安装和运行机制、命令参数_第11张图片

列出将执行该命令的主机 

ansible all -a "ls" --list-hosts

 总结:ansible指定要执行操作的被管理节点或组

1.指定执行器

注意:ip需要在/etc/ansible/hosts提前里面配置

#指定 192.168.1.*/24段的所有机器

ansible 192.168.1.* -m ping

自动化管理工具 Ansible 安装和运行机制、命令参数_第12张图片

 #指定12、 13两台机器

ansible 192.168.1.12:192.168.1.13 -m ping

 2.使用分组过滤

指定[web_server]组

自动化管理工具 Ansible 安装和运行机制、命令参数_第13张图片

 #指定A和B两个组

A:B

#指定在A组但不在B组

A:\!B

 #指定同时在A组和B组

A:\&B

你可能感兴趣的:(ANSIBLE,自动化,运维)