Ansible总结

强颜欢笑 提交于 2020-03-20 22:16:03

3 月,跳不动了?>>>

一、工作原理图

Ansible :     ansible核心

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

Plugins :      完成模块功能的补充,包括连接插件、邮件插件等

Playbooks :   剧本;定义 Ansible 多任务配置文件,由Ansible 自动执行

Inventory :    定义 Ansible 管理主机的清单  [ˈɪnvəntri] 清单

1、部署简单,只需在主控端部署Ansible环境,被控端无需做任何操作;

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

3、主从集中化管理;

4、配置简单、功能强大、扩展性强;

5、支持API及自定义模块,可通过Python轻松扩展;

6、通过Playbooks来定制强大的配置、状态管理

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

 

二、ansible命令参数

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

ansible详细参数:

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

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

inventory  [ˈɪnvəntri]  库存

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

 -m NAME,-module-name=NAME    #   指定使用的 module 名称,默认使用 command模块

 -a,MODULE_ARGS   #指定 module 模块的参数

 -k,-ask-pass           #提示输入 ssh 的密码,而不是使用基于 ssh 的密钥认证

 -sudo          # 指定使用 sudo 获得 root 权限

 -K,-ask-sudo-pass             #提示输入 sudo 密码,与 -sudo 一起使用

 -u USERNAME,-user=USERNAME          # 指定移动端的执行用户

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

ansible-doc详细参数:

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

ansible-doc -s 模块名    #查看指定模块的参数  -s, --snippet   # [ˈsnɪpɪt]   片断

三、

定义主机清单

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

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

格式:ansible_ssh_port:指定ssh端口   ansible_ssh_user:指定 ssh 用户 ansible_ssh_pass:指定 ssh 用户登录是认证密码(明文密码不安全)  ansible_sudo_pass:指明 sudo 时候的密码

例: [root@63 ~]# vim  /etc/ansible/hosts   #文件 /etc/ansible/hosts 维护着Ansible中服务器的清单。在文件最后追加以下内容

[web-servers]                 #主机组名

192.168.1.64  ansible_ssh_port=22  ansible_ssh_user=root  ansible_ssh_pass=123456

简单测试下主机的连通性

[root@63 ~]#  ansible -i /etc/ansible/hosts web-servers -m ping  

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

 -m    #   指定使用的ping模块

第一次执行远程ping命令需要连接远程主机的指纹密钥

在Ansible服务端生成密钥,并且复制公钥到节点中。

[root@63 ~]#ssh-keygen

[root@63 ~]# ssh-copy-id root@192.168.1.64

四、

ansible常见模块高级使用方法

1  ansible常用模块

1、3个远程命令模块的区别

(1)、command模块为ansible默认模块,不指定-m参数时,使用的就是command模块; comand模块比较简单,常见的命令都可以使用,但其命令的执行不是通过shell执行的,所以,像这些 "<", ">", "|", and "&"操作都不可以,当然,也就不支持管道; 缺点:不支持管道,没法批量执行命令;

(2)、shell模块:使用shell模块,在远程命令通过/bin/sh来执行;所以,我们在终端输入的各种命令方式,都可以使用。

例1:运行free -m 命令

[root@63 ~]# ansible -i /etc/ansible/hosts  web-servers -m shell -a "free -m"

注:但是我们自己定义在~/.bashrc或~/.bash_profile中的环境变量shell模块由于没有加载,所以无法识别;如果需要使用自定义的环境变量,就需要在最开始,执行加载自定义脚本的语句;

对shell模块的使用可以分成两块: 
1) 如果待执行的语句少,可以直接写在一句话中:

[root@63 ~]# ansible -i /etc/ansible/hosts  web-servers -m shell -a "source  ~/.bash_profile && df -h | grep sda3"

2) 如果在远程待执行的语句比较多,可写成一个脚本,通过copy模块传到远端,然后再执行;但这样就又涉及到两次ansible调用;对于这种需求,ansible已经为我们考虑到了,script模块就是干这事的;

3、scripts模块

使用scripts模块可以在本地写一个脚本,在远程服务器上执行:

[root@63 ~]# vim  /etc/ansible/net.sh

#!/bin/bash

date

hostname

[root@xuegod63 ~]# ansible -i /etc/ansible/hosts  web-servers -m script -a "/etc/ansible/net.sh"

4、copy模块:实现主控端向目标主机拷贝文件,类似scp功能

例1:把ansible主机上的/etc/hosts文件复制到主机组中机器的/tmp目录下

[root@63 ~]# ansible -i /etc/ansible/hosts web-servers -m copy -a "src=/etc/hosts dest=/tmp/ owner=root group=root mode=0755"

在64上查看

[root@64 ~]# ll /tmp/hosts

-rwxr-xr-x 1 root root 240 8月  24 16:09 /tmp/hosts

5、file模块设置文件属性。

例如:

[root@63 ~]# ansible -i /etc/ansible/hosts web-servers -m file -a "path=/tmp/hosts mode=0777"

验证:

[root@63 ~]# ll /tmp/hosts

-rwxrwxrwx 1 root root 112 Aug 31 04:38 /tmp/hosts

6、stat模块获取远程文件信息

[root@63 ~]# ansible -i /etc/ansible/hosts web-servers -m stat -a "path=/tmp/hosts"

7、get_url模块实现远程主机下载指定url到本地,支持sha256sum文件校验。

例如:下载epel-release-latest-7.noarch.rpm到主机清单中的/tmp/目录下

[root@63 ~]# ansible -i /etc/ansible/hosts web-servers -m get_url -a "url=https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm  dest=/tmp/ mode=0440 force=yes"

 #ansible-doc -s get_url  #在弹出的信息中找到force

如果force=yes,当下载文件时,如果所下的内容和原目录下的文件内容不一样,则替换原文件,如果一样,就不下载了。

如果为“否”,则仅在目标不存在时才下载文件。 一般来说,只有小型本地文件才应该为“是”。 在0.6之前,该模块表现为默认为“是”。

8、yum模块linux平台软件包管理。

yum模块可以提供的status状态: latest ,present,installed  #这3个代表安装;removed, absent #后面2个是卸载

例子:安装php软件

[root@63 ~]# ansible -i /etc/ansible/hosts web-servers -m yum -a "name=httpd  state=latest"

9、cron模块远程主机crontab配置。

例如:增加每30分钟执行ls /tmp

[root@63 ~]# ansible -i /etc/ansible/hosts web-servers -m cron -a "name='list dir' minute='*/30' job='ls /tmp'"

10、service模块远程主机系统服务管理。

service模块常用参数:

(1)、name参数:此参数用于指定需要操作的服务名称,比如 nginx,httpd。

(2)、state参数:此参数用于指定服务的状态,比如,我们想要启动远程主机中的httpd,则可以将 state 的值设置为 started;如果想要停止远程主机中的服务,则可以将 state 的值设置为 stopped。此参数的可用值有 started、stopped、restarted(重启)、reloaded。

(3)、enabled参数:此参数用于指定是否将服务设置为开机 启动项,设置为 yes 表示将对应服务设置为开机启动,设置为 no 表示不会开机启动。

注:想使用service模块启动服务,被启动的服务,必须可以使用service 命令启动或关闭

例如:远程启动apache服务

[root@63 ~]# ansible -i /etc/ansible/hosts web-servers -m service -a "name=httpd state=restarted"

11、sysctl模块远程主机sysctl配置。

例:开启路由转发功能

[root@63 ~]# ansible -i /etc/ansible/hosts web-servers -m sysctl -a "name=net.ipv4.ip_forward value=1 reload=yes"

验证:

[root@63 ~]# cat /proc/sys/net/ipv4/ip_forward

1

12、user模块远程主机用户管理

例如:

[root@63 ~]# ansible -i /etc/ansible/hosts web-servers -m user -a "name=z6 state=present"

# present  [ˈpreznt]  当前

验证:

[root@63 ~]# id z6

uid=1001(z6) gid=1001(z6) group=1001(z6)

五、使用Playbook批量部署

1、Playbook是一个不同于使用ansible命令行执行方式的模式,功能更强大更灵活。

playbooks使用步骤:

(1)、在playbooks 中定义任务:

- name: task description     #任务描述信息

 module_name: module_args    #需要使用的模块名字:  模块参数

(2)、ansible-playbook 执行 命令:

[root@63 ~]# ansible-playbook site.yml

playbook是由一个或多个"play"组成的列表。play的主要功能在于将事先归为一组的主机装扮成事先通过ansible中的task定义好的角色。

github上提供了大量的实例供大家参考  https://github.com/ansible/ansible-examples

(3)、Playbook常用文件夹作用: 

files:存放需要同步到异地服务器的源码文件及配置文件; 

handlers:当服务的配置文件发生变化时需要进行的操作,比如:重启服务,重新加载配置文件; ['hændləz] 处理程序

handlers概述:

Handlers 也是一些 task 的列表,通过名字来引用,它们和一般的 task 并没有什么区别。

Handlers 是由通知者进行notify, 如果没有被 notify,handlers 不会执行。

不管有多少个通知者进行了notify,等到 play 中的所有 task 执行完成之后,handlers 也只会被执行一次。

Handlers 最佳的应用场景是用来重启服务,或者触发系统重启操作.除此以外很少用到了

notify: 这个action可用于在每个play的最后被触发,这样可以避免多次有改变发生时,每次都执行指定的操作,取而代之,仅在所有的变化发生完成后一次性地执行指定操作。

meta:角色定义,可留空;     ['metə

tasks:需要进行的执行的任务;   #任务

templates:用于执行lamp安装的模板文件,一般为脚本;     ['templɪts]  模板

vars:本次安装定义的变量

 

详细yml语法: http://www.ansible.com.cn/docs/YAMLSyntax.html

 

注:所有yml的配置文件中,空格必须严格对齐

 

注:

1、默认情况下,首次登陆一台服务器,系统会提示是否要记住对端的指纹,用ansible也会这样,这样会导致需要手工输入yes或no,ansible 才可以往下执行。如需避免这种情况,需要在 /etc/ansible/ansible.cfg 文件中设置 host_key_checking = False

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!