ansible的部署和命令模块和playbooks剧本

系列文章目录

`

文章目录

  • 系列文章目录
  • 一、Ansible
    • 1、Ansible简介
    • 2、Ansible特点及优势
    • 3、Ansible核心程序
    • 4、Ansible工作原理及流程
    • 5.部署Ansible自动化运维工具
    • 6、Ansible常用模块
  • 二、playbooks剧本
    • 1.playbooks
    • 2、playbooks组成部分
    • 3、playbooks启动及检测
  • 总结

一、Ansible

1、Ansible简介

Ansible是基于模块工作的,只是提供了一种运行框架,本身没有完成任务的能力,真正操作的是Anisble的模块。每个模块都是独立的、实现了批量系统配置、批量程序部署、批量运行命令等功能。

2、Ansible特点及优势

优势:
①轻便性:无需在被控制服务器上安装客户端,Ansible基于ssh协议
②幂等性:大部分模块有幂等性,即如果输入systemctl stop firewalld当发现要停止的服务已经停止就不会做任何操作了,多次停止不会改变结果。systemtl restart是非幂等的。
③判断性:大部分模块在执行时都会判断目标节点是否要执行任务,所有重复执行某个任务大部分时间不会产生副作用
④简介性:一个窗口即可管理所有需要控制的机器,无需开启多个窗口
特点:
①部署简单,只需要主控端部署Ansible环境,被控端无需做任何操作;
②默认使用SSH协议设备进行管理;
③主从集中化管理;
④配置简单、功能强大、扩展性强;
⑤支持API及自定义模块,可以通过Python轻松扩展
⑥通过playbooks来定制强大的配置、状态管理
⑦对云平台和大数据都有很好的支持

3、Ansible核心程序

①HostInventory:记录由Ansible管理的主机信息,端口,ip,密码等
②playbooks:'剧本’YAML格式文件,多任务定义在一个文件中,定义主机需要调用那些模块完成功能
③core modeules:核心模块主要操作通过调用核心模块来完成管理任务
④customodules:自定义模块,完成核心模块无法完成的模块,支持多种语言编写
⑤connectiontugins:连接插件,ansible和主机通信使用(ssh协议)

4、Ansible工作原理及流程

①加载自己的配置文件,默认/etc/ansible/ansible.cfg
②查找对应的主机的配置文件,找到要执行的主机或组/etc/ansible/hosts文件
③加载自己对应的模块文件,如command、yum、ping、
④通过ansible将模块命令生成对应的临时py文件(类似python脚本),并将该文件传输至被管理端
⑤传输到在被控制端的对应用户的家目录下.ansible/tmp/xxx/xxx.py
⑥被控制端给传输过来的py文件加执行权限
⑦执行并返回结果,执行完成后删除py文件并sleep 0退出

5.部署Ansible自动化运维工具

yum install  -y epel-release 
#安装epel-release
yum install -y  ansible
#安装ansible
#配置文件位置:/etc/ansible/ansible
#hosts文件位置:/etc/ansible/hosts
vim /etc/ansible/hosts
#编辑hosts文件添加被管理的机器,内容如下
[webservers]
192.168.169.20
192.168.169.30
#[webservers]为一个组,组内2个服务器,添加完毕保存退出
[dbservers]
192.168.169.40
ssh-keygen
#生成公钥,输入命令输入4个回车即可
cd ~/.ssh
ssh-copy-id -i   192.168.169.20
ssh-copy-id -i   192.168.169.30
#进入生成的公钥路径将公钥传输给备管理的服务器,传输需要输入每台备管理服务的root密码
ansible ansible-doc  -l 
#安装完毕,此命令可以查看有哪些ansible模块,按q退出
ansible  webservers  -m command  -a 'pwd'
#安装完成尝试管理webservers组输入pwd命令
ansible  all   -a 'ls'
#安装完成尝试管理所有hosts中主机输入ls命令,不指定模块默认为command模块
ansible  192.168.169.20  -m -a 'ls'
#安装完成尝试管理192.168.169.20服务器输入pwd命令

ansible的部署和命令模块和playbooks剧本_第1张图片

/常用的参数:

chdir:在远程主机上运行命令前提前进入目录
creates:判断指定文件是否存在,如果存在,不执行后面的操作
removes:判断指定文件是否存在,如果存在,执行后面的操作
ansible all -m command -a "chdir=/home ls ./"
ansible webservers -a "creates=/opt/aaa.txt cat /opt/aaa.txt"
ansible webservers -a "creates=/opt/123.txt cat /opt/aaa.txt"
ansible webservers -a "removes=/opt/aaa.txt cat /opt/aaa.txt"
ansible webservers -a "removes=/opt/123.txt cat /opt/aaa.txt"

ansible的部署和命令模块和playbooks剧本_第2张图片

6、Ansible常用模块

(1) ansible命令行模块
命令格式:ansible <组名>/ip -m <模块> -a<参数列表>
ansible-doc -s 模块
-s列出指定模块的描述信息和操作动作
(2) command模块
#此模块不能使用管道符和重定向,指定模块默认为commend模块
举例:ansible webservers -m command -a ‘date’
ansible的部署和命令模块和playbooks剧本_第3张图片
#调用command模块在192.168.169.20服务器上执行ls命令,若不指定则默认为command模块

(3) shell 模块
//在远程主机执行命令,相当于调用远程主机的shell进程,然后在该shell下打开一个子shell运行命令(支持管道符号等功能)

ansible-doc -s shell #查看shell模块的详细信息 ansible dbservers -m shell -a
‘echo 123456 | passwd --stdin test’ ansible dbservers -m shell -a
'echo $(ifconfig ens33 | awk “NR2 {print $2}") | cut -d " " -f2’
ansible dbservers -m shell -a 'echo $(ifconfig ens33 | awk "NR
2
{print $2}”)

(4) cron 模块
//在远程主机定义任务计划。其中有两种状态(state):present表示添加(可以省略),absent表示移除。

ansible-doc -s cron #按 q 退出
minute/hour/day/month/weekday:分/时/日/月/周
job:任务计划要执行的命令
name:任务计划的名称
ansible webservers -m cron -a 'minute="*/1" job="/bin/echo helloworld" name="test crontab"'
ansible webservers -a 'crontab -l'
ansible webservers -m cron -a 'name="test crontab" state=absent'    #移除计划任务,假如该计划任务没有取名字,name=None即可

(5) user 模块
//用户管理的模块

ansible-doc -s user
//常用的参数:
name:用户名,必选参数
state=present|absent:创建账号或者删除账号,present表示创建,absent表示删除
system=yes|no:是否为系统账号
uid:用户uid
group:用户基本组
shell:默认使用的shell
move_home=yes|no:如果设置的家目录已经存在,是否将已经存在的家目录进行移动
password:用户的密码,建议使用加密后的字符串
comment:用户的注释信息
remove=yes|no:当state=absent时,是否删除用户的家目录
ansible dbservers -m user -a 'name="wj"'    #创建用户wj
ansible dbservers -m command -a 'tail /etc/passwd'
ansible dbservers -m user -a 'name="wj" state=absent'   #删除用户wj

ansible的部署和命令模块和playbooks剧本_第4张图片
(6) group 模块
//用户组管理的模块

ansible-doc -s group 
ansible dbservers -m group -a 'name=mysql gid=3306 system=yes'  #创建mysql组
ansible dbservers -a 'tail /etc/group'
ansible dbservers -m user -a 'name=wj uid=321 system=yes group=mysql' #将wj用户添加到mysql组中
ansible dbservers -a 'tail /etc/passwd'
ansible dbservers -a 'id wj'

ansible的部署和命令模块和playbooks剧本_第5张图片

(7)copy 模块
//用于复制指定主机文件到远程主机的

ansible-doc -s copy  

//常用的参数:
dest:指出复制文件的目标及位置,使用绝对路径,如果是源目录,指目标也要是目录,如果目标文件已经存在会覆盖原有的内容
src:指出源文件的路径,可以使用相对路径或绝对路径,支持直接指定目录,如果源是目录则目标也要是目录
mode:指出复制时,目标文件的权限
owner:指出复制时,目标文件的属主
group:指出复制时,目标文件的属组
content:指出复制到目标主机上的内容,不能与src一起使用

ansible dbservers -m copy -a 'src=/etc/fstab dest=/opt/fstab.bak owner=root mode=640'
ansible dbservers -a 'ls -l /opt'
ansible dbservers -a 'cat /opt/fstab.bak'
ansible dbservers -m copy -a 'content="helloworld" dest=/opt/hello.txt' #将helloworld写入/opt/hello.txt文件中
ansible dbservers -a 'cat /opt/hello.txt'

(8)file 模块
//设置文件属性

ansible-doc -s file 
ansible dbservers -m file -a 'owner=test1 group=mysql mode=644 path=/opt/test8.txt'    #修改文件的属主属组权限等
ansible dbservers -m file -a 'path=/etc/file8 src=/opt/file8.txt state=link'
 #设置/etc/file8为/opt/file8.txt的链接文件
ansible dbservers -m file -a "path=/opt/file8.txt state=touch"    #创建一个文件
ansible dbservers -m file -a "path=/opt/file8.txt state=absent"   #删除一个文件

(9)hostname 模块
//用于管理远程主机上的主机名

ansible dbservers -m hostname -a 'name=wj'

ansible的部署和命令模块和playbooks剧本_第6张图片
在这里插入图片描述

(10)ping 模块
//检测远程主机的连通性

ansible all -m ping

ansible的部署和命令模块和playbooks剧本_第7张图片

(11)yum 模块
//在远程主机上安装与卸载软件包

ansible-doc -s yum
ansible dbservers -m yum -a 'name=httpd'   #安装服务
ansible dbservers -m yum -a 'name=httpd state=absent'  #卸载服务

(12)service/systemd 模块
//用于管理远程主机上的管理服务的运行状态
ansible-doc -s service
//常用的参数:

name:被管理的服务名称
state=started|stopped|restarted:动作包含启动关闭或者重启
enabled=yes|no:表示是否设置该服务开机自启
runlevel:如果设定了enabled开机自启去,则要定义在哪些运行目标下自启动
ansible dbservers -a 'systemctl status httpd'  #查看web服务器httpd运行状态
ansible dbservers -m service -a 'enabled=true name=httpd state=started' 

ansible的部署和命令模块和playbooks剧本_第8张图片
在这里插入图片描述

(13)script 模块
//实现远程批量运行本地的 shell 脚本

ansible-doc -s script
vim test.sh
#!/bin/bash
echo "hello ansible from script" > /opt/script.txt 
chmod +x test.sh
ansible dbservers -m script -a 'test.sh'
ansible dbservers -a 'cat /opt/script.txt

(14)setup 模块
//facts 组件是用来收集被管理节点信息的,使用 setup 模块可以获取这些信息

ansible-doc -s setup
ansible webservers -m setup #获取mysql组主机的facts信息
ansible dbservers -m setup -a 'filter=*ipv4' #使用filter可以筛选指定的facts信息

https流程
1.客户端向服务器发起HTTPS请求,连接到服务器的443端口。
2.服务器端有一个密钥对,即公钥和私钥,是用来进行非对称加密使用的,服务器端保存着私钥,不能将其泄露,公钥可以发送给任何人。
3.服务器将自己的公钥发送给客户端。
4.客户端收到服务器端的公钥之后,会对公钥进行检查,验证其合法性,如果发现发现公钥有问题,那么HTTPS传输就无法继续。严格的说,这里应该是验证服务器发送的数字证书的合法性,关于客户端如何验证数字证书的合法性,下文会进行说明。如果公钥合格,那么客户端会生成一个随机值,这个随机值就是用于进行对称加密的密钥,我们将该密钥称之为client key,即客户端密钥,这样在概念上和服务器端的密钥容易进行区分。然后用服务器的公钥对客户端密钥进行非对称加密,这样客户端密钥就变成密文了,至此,HTTPS中的第一次HTTP请求结束。
5.客户端会发起HTTPS中的第二个HTTP请求,将加密之后的客户端密钥发送给服务器。
6.服务器接收到客户端发来的密文之后,会用自己的私钥对其进行非对称解密,解密之后的明文就是客户端密钥,然后用客户端密钥对数据进行对称加密,这样数据就变成了密文。
7.然后服务器将加密后的密文发送给客户端。
8.客户端收到服务器发送来的密文,用客户端密钥对其进行对称解密,得到服务器发送的数据。这样HTTPS中的第二个HTTP请求结束,整个HTTPS传输完成。

二、playbooks剧本

1.playbooks

1、playbooks简述
playbooks是ansible用于配置,部署,和管理被控节点的剧本。通过playbooks的详细描述,执行其中的tasks,可以让远端主机达到预期的状态。playbooks是由一个或多个”play”组成的列表。 当对一台机器做环境初始化的时候往往需要不止做一件事情,这时使用playbooks会更加适合。通过playbooks你可以一次在多台机器执行多个指令。通过这种预先设计的配置保持了机器的配置统一,并很简单的执行日常任务。
ansible通过不同的模块实现相应的管理,管理的方式通过定义的清单文件(hosts)所管理的主机包括认证的方式连接的端口等。所有的功能都是通过调用不同的模块(modules)来完成不同的功能的。不管是执行单条命令还是play-book都是基于清单文件。
2、playbooks剧本格式
playbooks由YMAL语言编写,YMAL格式是类似于JSON的文件格式,一个文件中有多个play,一个play中只能有一个tasks,一个tasks中可以有多个name任务。
注意事项:
①大小写明个
②通过缩进表示层级关系
③不支持制表符tab键缩进,只能使用空格缩进
④缩进的空格数目不重要,只要相同层级左右对齐,通常开头缩进2个空格
⑤#号注释
⑥符号字符后缩进1个空格,如冒号:逗号,横杠-后面空一个格
⑦如果包含特殊字符用单引号和双引号引起来会作为字符串处理,单引号不识别变量,双引号识别变量。

2、playbooks组成部分

ansible的部署和命令模块和playbooks剧本_第9张图片

3、playbooks启动及检测

ansible-playbook  文件名.yaml 
ansible-playbook     文件.yaml   --start-at-task='任务名/标签'    #从某个task开始执行或只执行某个标签的name
#启动此文件
补充参数:-k(-ask-pass):用来交互式输入ssh密码
​		 -K(-ask-become-pass):用来交互式输入sudo密码
​		 -U:指定用户
ansible-playbook    文件.yaml  --list-task      #检查yml文件
ansible-playbook    文件.yaml  --list-hosts    #检测主机 
ansible-playbook     文件.yaml  --syntax-check #检测语法

总结

你可能感兴趣的:(ansible,java,python)