第29章-使用自动化运维工具Ansible集中化管理服务器-v4

本文由用户“zzj0720107134”分享发布 更新时间:2020-03-19 17:52:29 举报文档

以下为《第29章-使用自动化运维工具Ansible集中化管理服务器-v4》的无排版文字预览,完整格式请下载

下载前请仔细阅读文字预览以及下方图片预览。图片预览是什么样的,下载的文档就是什么样的。

/

/

扫码获取更多课程资料,开通直播上课权限(点击下方课程直播即可免费观看)

/ /

学神IT教育微信公众号 学神IT官方 QQ群

关注学神公众号有机会获得4本官方书籍(共4本书籍,厚度约6.5厘米 1200页)

//

第二十九章 使用自动化运维工具Ansible集中化管理服务器

本节所讲内容:

29.1 ansible概述和运行机制

29.2 实战-安装并配置Ansible管理两个节点

29.3 ansible常见模块高级使用方法

29.4 实战-使用Playbook批量部署多台LAMP环境

29.1 ansible概述和运行机制

29.1.1 ansible概述

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

/

官方网站:https://doc.001pp.com/

/

IT业界励志事件:

2015年10月,红帽(Red Hat)宣布收购软件*** Ansible,消息称此次收购耗资逾 1亿美元,也有消息称接近 1.5亿美元。

Ansible 成立于 2013年,总部设在北卡罗来纳州达勒姆,联合创始人 a?d Ziouani 和高级副总裁 Todd Barr 都是红帽的老员工。Ansible 旗下的开源软件 Ansible 十分流行。***还提供 Tower 软件和咨询服务,这个款软件能使开发者轻松地建立和管理规模化应用程序的 IT 基础架构。

所以,希望大家可以进一***,把技术提升好了,做一个好产品

ansiblle具有如下特点:

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

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

3、主从集中化管理;

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

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

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

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

29.1.2 Ansible?工作机制

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

/

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

?Ansible?:?????ansible核心

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

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

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

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

29.2 实战-安装并配置Ansible管理两个节点

29.2.1 安装ansible服务

实验环境:

/

ansible 服务端? xuegod63 192.168.1.63

ansible节点1:xuegod63 192.168.1.63

ansible节点2:xuegod63 192.168.1.63

在xuegod63上安装ansible

1、设置EPEL仓库

Ansible仓库默认不在yum仓库中,因此我们需要使用下面的命令启用epel仓库。

[root@xuegod63 ~]# yum install epel-release -y

?2、 使用yum安装Ansible

[root@xuegod63?~]#yum?install ansible -y

安装完成后,检查ansible版本:

[root@xuegod63 ~]# ansible --version

29.2.2 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] 片断

例:[root@xuegod63 ~]# ansible-doc -s service

29.2.3 定义主机清单

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

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

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

例: [root@xuegod63 ~]# 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@xuegod63 ~]# ansible -i /etc/ansible/hosts web-servers -m ping

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

?-m?? #???指定使用的ping模块

报错:

192.168.1.63 | FAILED! => {

"msg": "Using a SSH password instead of a key is not possible because Host Key checking is enabled and sshpass does not support this. Please add this host's fingerprint to your known_hosts file to manage this host."

}

解决:[root@xuegod63 ~]# ssh root@192.168.1.63 #手动连接一下/etc/ansible/hosts主机清单中的主机,这样就可以在ansible服务器上保存目标主机的fingerprint指纹。后期可以正常连接了

[root@xuegod63 ~]# ansible -i hosts web-servers -m ping #测试成功

192.168.1.64 | SUCCESS => { #表示成测试。通信成功。

"changed": false, #因为ping命令不会改变被管理的服务器的状态。所以是false正常

"ping": "pong"

}

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

一般来说,使用明文密码不安全,所以增加主机无密码访问。

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

root@xuegod63?~]#ssh-keygen #一路回车

使用ssh-copy-id命令来复制Ansible公钥到节点:xuegod63和xuegod63

[root@xuegod63 ~]# ssh-copy-id root@192.168.1.63

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

[root@xuegod63 ~]# ssh 192.168.1.64

[root@xuegod64 ~]# exit

[root@xuegod63 ~]# vim /etc/ansible/hosts #在文件的最后添加以下内容

删除之前在最后添加的两行主机清单:

[web-servers]

192.168.1.64 ansible_ssh_port=22 ansible_ssh_user=root ansible_ssh_pass=123456

增加:

[web-servers]

192.168.1.63

192.168.1.64

29.2.3 在Ansible服务端运行命令

ping模块检查网络连通性

command模块执行shell命令,command:作为ansible的默认模块,可以运行远程权限范围内的所有shell命令

例1:使用ping检查‘web-servers’或者ansible节点的连通性。

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

或:

[root@xuegod63 ~]# ansible 'web-servers' -m ping #不指定,默认使用/etc/ansible/hosts文件

192.168.1.63 | SUCCESS => {

"changed": false,

"ping": "pong"

}

192.168.1.64 | SUCCESS => {

"changed": false,

"ping": "pong"

}

例2:检查Ansible节点的运行时间(uptime)

[root@xuegod63 ~]# ansible -m command -a "uptime" 'web-servers' #也可以把主机清单组名写到最后,这样方便阅读命令

192.168.1.63 | SUCCESS | rc=0 >>

12:45:23 up 32 min, 5 users, load average: 0.17, 0.11, 0.27

192.168.1.64 | SUCCESS | rc=0 >>

12:45:23 up 26 min, 2 users, load average: 0.03, 0.03, 0.10

例3:检查节点的内核版本

[root@xuegod63 ~]# ansible -m command -a "uname -r" 'web-servers'

例4:给节点增加用户

[root@xuegod63 ~]# ansible -m command -a "useradd mk123" 'web-servers'

192.168.1.64 | SUCCESS | rc=0 >>

192.168.1.63 | SUCCESS | rc=0 >>

[root@xuegod63 ~]# ansible -m command -a "grep mk123 /etc/passwd" 'web-servers'

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

[root@xuegod63 ~]# ansible -m command -a "df -Th" 'web-servers' > /tmp/command-output.txt

[root@xuegod63 ~]# cat /tmp/command-output.txt

29.3 ansible常见模块高级使用方法

29.3.1 ansible常用模块

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

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

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

例1:运行free -m 命令

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

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

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

[root@xuegod63 ~]# 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@xuegod63 ~]# 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"

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

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

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

/

在xuegod64上查看

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

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

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

例如:

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

验证:

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

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

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

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

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

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

[root@xuegod63 ~]# 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"

注:url=https://xxx 的等号=前后不能有空格

扩展:查看force=yes的作用

[root@xuegod63 ~]# ansible-doc -s get_url #在弹出的信息中找到force

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

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

查看下载的文件:

[root@xuegod63 ~]# ll /tmp/epel-release-latest-7.noarch.rpm

-r--r----- 1 root root 15080 8月 24 16:20 /tmp/epel-release-latest-7.noarch.rpm

测试:下载文件时,当文件不一样时,会替换原来的文件

[root@xuegod64 ~]# cp /etc/passwd /tmp/epel-release-latest-7.noarch.rpm

[root@xuegod63 ~]# ansible -i /etc/ansible/hosts web-serv 内容过长,仅展示头部和尾部部分文字预览,全文请查看图片预览。 nown_hosts

[root@xuegod63 roles]# ansible-playbook -i /etc/ansible/hosts ./site.yml #发现需要输入yes,来保存对端的指纹

解决:

[root@xuegod63 roles]# vim /etc/ansible/ansible.cfg

改:62 #host_key_checking = False #就是把前面的#号去了

为:host_key_checking = False

[root@xuegod63 roles]# rm -rf /root/.ssh/known_hosts

[root@xuegod63 roles]# ansible-playbook -i /etc/ansible/hosts ./site.yml #发现不需要输入yes,可以自动安装了

总结:

29.1 ansible概述和运行机制

29.2 实战-安装并配置Ansible管理两个节点

29.3 ansible常见模块高级使用方法

29.4 实战-使用Playbook批量部署多台LAMP环境

[文章尾部最后500字内容到此结束,中间部分内容请查看底下的图片预览]请点击下方选择您需要的文档下载。

  1. 预防火灾和煤气中毒致全县学生家长的一封信 (1)
  2. 第29章-使用自动化运维工具Ansible集中化管理服务器-v4
  3. 单位节能工作计划
  4. 实验报告(FMP)交换机配置2
  5. 录播教室使用记录登记表
  6. 节能降耗方案 - 副本
  7. 学校电教设备使用管理制度
  8. IBM服务器ServerGuide_8.4_安装指南
  9. 叉车使用和安全管理规定11-17
  10. 用气用电用火温馨提示
  11. 推普周国旗下讲话
  12. 公司工作人员管理规定
  13. 试用期工作报告示例
  14. 多媒体工作计划
  15. AIX系统的日常监控维护
  16. 办公室节能管理工作制度

以上为《第29章-使用自动化运维工具Ansible集中化管理服务器-v4》的无排版文字预览,完整格式请下载

下载前请仔细阅读上面文字预览以及下方图片预览。图片预览是什么样的,下载的文档就是什么样的。

图片预览