ansible与saltstack简介

课前回顾

在web上使用mariadb客户端,通过命令 mysql -u wp_zh -p1 -h 10.0.0.51 可以检测web与数据库的是否可以连接

批量管理要选择批量管理工具,ansible saltstack
使用:
	1.批量命令执行
	2.批量安排服务
	3.批量配置同步
	4.批量任务执行
	5.批量代码部署
作用:
	1.提高工作效率
	2.提高工作准确度
	3.减少维护成本
	4.减少重复性工作
优势:
1.远程执行
批量执行远程命令,可以对多台主机进行远程操作
2.配置管理
批量配置软件服务,可以进行自动化方式配置,服务的统一配置管理,和启停
3.事件驱动
通过Ansible的模块,对服务进行不同的事件驱动
比如:
1)修改配置后重启
2)只修改配置文件,不重启
3)修改配置文件后,重新加载
4)远程启停服务管理
4.管理公有云
通过API接口的方式管理公有云,不过这方面做的不如saltstack.
saltstack本身可以通过saltcloud管理各大云厂商的云平台。
5.二次开发
因为语法是Python,所以便于运维进行二次开发。
6.任务编排
可以通过playbook的方式来统一管理服务,并且可以使用一条命令,实现一套架构的部署
7.跨平台,跨系统

ansible不需要下载客户端,不需要启动,但是要做优化

#centos8使用dnf命令安装ansible
[root@m01 ~]# yum provides dnf
dnf-4.0.9.2-1.el7_6.noarch : Package manager

自动化工具对比

同类型软件对比:

​ 1.puppet学习难,安装ruby环境难,没有远程执行功能

​ 2.ansible轻量级,大规模环境下只通过ssh会很慢,串行的,一般不需要安装客户端,但是也可以选择去安装客户端。不需要启动,只支持Python2

​ 3.saltstack,一般选择sall的c/s结构模式,需要安装客户端,通过端对端的方式连接服务器,但是也可以不安装客户端,通过ssh协议连接服务器,salt-master和salt-minion是并行的,大规模批量操作的时候,会比ansible快一些,底层使用的是zero-MQ消息队列,但是比较占资源**,saltstack既有Python2和Python3

tI77GR.md.png

zero-MQ(message queue)

消息队列:相当于一个缓冲

堆栈:(先进后出)

面试回答 ansible和saltstack对比

  1. ansible是基于ssh协议来工作的,但是saltstack也有支持ssh协议的模式
  2. 但是一般来说,选择saltstack就是为了使用c/s结构的模式(速度快)
  3. 因为saltstack底层有一个zmq消息队列
  4. ansible基于ssh,如果ssh服务挂了,ansible也不能工作,但是saltstack可以,saltstack会使用两个端口4505,4506
    saltstack官网

saltstack 安装包下载

tI7LM6.md.png
tI7bxx.md.png

saltstack服务端

cs/s结构中,服务端与客户端的连接不需要sshd进程,甚至可以开启或者关闭ssh服务

saltstack服务端可以管理所有的saltstack客户端

[root@m01 ~]# yum install -y salt-master salt-minion
[root@m01 ~]# rpm -q salt-master salt-minion
salt-master-2015.5.10-2.el7.noarch
salt-minion-2015.5.10-2.el7.noarch

[root@m01 ~]# rpm -ql salt-master
/etc/salt/master
/usr/bin/salt
/usr/bin/salt-cp
/usr/bin/salt-key
/usr/bin/salt-master
/usr/bin/salt-run
/usr/bin/salt-unity
/usr/lib/systemd/system/salt-master.service
[root@m01 ~]# rpm -ql salt-minion
/etc/salt/minion
/usr/bin/salt-call
/usr/bin/salt-minion
/usr/lib/systemd/system/salt-minion.service

#取消注释(指定可以连接谁)(选做)
[root@m01 ~]# vim /etc/salt/master 
interface: 0.0.0.0
#启动
[root@m01 ~]# systemctl start salt-master.service

#取消注释,指定master(指定客户端寻找的ip)
[root@m01 ~]# vim /etc/salt/minion
master: 10.0.0.61
#启动
[root@m01 ~]# systemctl start salt-minion.service

#查看saltstack端口(4505发送,4506接收)
[root@m01 ~]# netstat -lntup  
tcp        0      0 0.0.0.0:4505            0.0.0.0:*               LISTEN      1415/python                 
tcp        0      0 0.0.0.0:4506            0.0.0.0:*               LISTEN      1423/python

[root@m01 ~]# salt-key 
Accepted Keys:		#接受的
Denied Keys:		#拒绝的
Unaccepted Keys:	#没有被允许的key
m01
Rejected Keys:		拒绝的

[root@m01 ~]# salt-key -A	#接受所有客户端密匙
The following keys are going to be accepted:
Unaccepted Keys:
m01
web01
Proceed? [n/Y] y
Key for minion m01 accepted.
Key for minion web01 accepted.
[root@m01 ~]# salt-key -a xx	#可以选择接受指定客户端密匙

[root@m01 ~]# salt-key 
Accepted Keys:
m01
web01
Denied Keys:
Unaccepted Keys:
Rejected Keys:

#检查服务端和客户端是否可以连通
[root@m01 ~]# salt '*' test.ping
web01:
    True
m01:
    True


saltstack客户端

客户端的使用不需要端口

[root@web01 ~]# yum install -y salt-minion

#修改配置文件
[root@web01 ~]# vim /etc/salt/minion 
master: 10.0.0.61

#启动saltstack客户端
[root@web01 ~]# systemctl start salt-minion.service 

#以内saltstack很占服务器资源,所以不用的时候需要关闭
[root@m01 ~]# systemctl stop salt-master.service salt-minion.service 

服务端操控客户端

查看客户端主机名,IP,内存,磁盘

cmd.run 可以执行任何操作命令,cmd实际上就是saltstack的一个模块
.就相当于调用函数,方法(playbook)

[root@m01 ~]# salt 'web01' cmd.run 'free -m' 
web01:
                  total        used        free      shared  buff/cache   available
    Mem:            972         209         247          25         515         592
    Swap:

#查看客户端详细信息,主机名,IP(内置变量)
[root@m01 ~]# salt '*' grains.items
[root@m01 ~]# salt 'web01' grains.items

#查看客户端主机名
[root@m01 ~]# salt 'm01' grains.get 'fqdn'
m01:
    m01
#查看客户端IP
[root@m01 ~]# salt 'm01' grains.get 'fqdn_ip4'
m01:
    - 10.0.0.61
    - 172.16.1.61
[root@m01 ~]# salt 'm01' grains.get 'ip4_interfaces'
m01:
    ----------
    eth0:
        - 10.0.0.61
    eth1:
        - 172.16.1.61
    lo:
        - 127.0.0.1
[root@m01 ~]# salt 'm01' grains.get 'ip4_interfaces:eth0'
m01:
    - 10.0.0.61
[root@m01 ~]# salt 'm01' grains.get 'master'
m01:
    10.0.0.61

#开启或者关闭客户端web01的进程
[root@m01 ~]# salt 'web01' cmd.run 'systemctl start sshd'
[root@m01 ~]# salt 'web01' 'systemctl start sshd'

#使用ansible操作主机组
[root@m01 ~]# salt 'web0_group' cmd.run 'systemctl start sshd'

ansible官网

TP

因为ansible只安装在服务端,不用安装客户端(因为ansible基于ssh协议),这种服务端也叫控制端,客户端叫被控端,受控端

ansible服务之星流程:

​ 1.ansible读取playbook剧本(host),剧本中会记录对哪些主机之星哪些任务

​ 2.首先ansible通过主机清单找到要执行的主机,然后调用具体的模块

​ 3.其次ansible会通过连接插件连接对应的主机并推送对应的任务列表

​ 4.最后被管理的主机将ansible发送过来的任务解析为本地shell命令执行

saltmast和ansible不能同时安装,不然会导致Python环境发生冲突,两个软件都用不了

Ansible的架构

1、连接插件connection plugins用于连接主机 用来连接被管理端
2、核心模块core modules连接主机实现操作, 它依赖于具体的模块来做具体的事情
3、自定义模块custom modules根据自己的需求编写具体的模块(一般开发使用)
4、插件plugins完成模块功能的补充
5、剧本playbook,ansible的配置文件,将多个任务定义在剧本中,由ansible自动执行
6、主机清单inventor定义ansible需要操作主机的范围

最重要的一点是 ansible是模块化的 它所有的操作都依赖于模块

img

ad-hoc与playbook

[ansible任务执行模式]
ad-hoc:
ad-hoc模式使用单个模块,支持批量执行单条命令。'ad-hoc命令是一种可以快速输入的命令',而且不需要保存起来的命令。相当于bash中的一句shell。
playbook:
playbook模式是ansible主要管理方式,也是ansible功能强大的关键所在。playbook通过多个task集合完成一类功能,如web服务的安装部署、数据库服务器的批量备份等。'可以简单地把playbook理解为通过组合多条ad-hoc操作的配置文件。'


[ansible命令执行过程]
1、加载自己的'主配置文件',默认/etc/ansible/ansible.cfg
2、查找对应的'playbook',找到要执行的主机或者组。
3、加载自己对应的'模块文件',如command
4、通过ansible将模块或命令生成对应的'临时py文件',并将该'文件传输'至远程服务器
5、'对应执行用户家目录的.ansible/tmp/XXX/XXX.PY文件'
6、给文件+x执行
7、执行并返回结果
8、删除临时py文件,sleep 0 退出。
原文地址:https://www.cnblogs.com/syy1757528181/p/13069011.html