01 . SaltStack部署配置及简单应用

时间:2022-07-25
本文章向大家介绍01 . SaltStack部署配置及简单应用,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

SaltStack简介

SaltStack
  • saltstack是一个新的基础平台管理工具,只需要花费数分钟即可运行起来,可以支撑管理上万台服务器的规模,数秒钟即可完成数据传递。
  • saltstack是使用Python语言开发的,同时也支持restAPI方便二次开发以及和它平台集成,同时官方也发布了一个Web管理界面halite。
  • Salt是python编写的,支持用户通过python自定义功能模块,也提供了大量的python API接口,用户可以根据需要进行简单快速的扩展。
优点
  • 首先,他速度快,基于消息队列+线程,跑完多台设备,都是毫秒级别的
  • 其次,非常灵活,源码是python,方便理解和自定义模块(python 语言相对于其他的perl、ruby等还是很好理解的)
  • 命令简单,功能强大
saltstack运行方式
  • Local
  • Master/Minion
  • Salt SSH
saltstack三大功能
  • 远程执行
  • 配置管理
  • 云管理
saltstack数据系统
  • Grains (静态数据)
  • pillar (动态数据)
saltstack配置管理
  • SLS(YAML、Jinja)
  • Highstate
  • States Module

部署配置SaltStack

准备两台机器,这两台机器都关闭 selinux,清空防火墙规则。

List
    CentOS7.3
    	epel-7.repo
    	salt-master
    	salt-minion
    # 依赖包
			python
			zeromq
			pyzmp
			pycrypto
			msgpack-python
			yaml
			jinja2

节点名

IP

软件版本

硬件

网络

说明

Master

192.168.43.132

list 里面都有

2C4G

Nat,内网

测试环境

192.168.43.234

list 里面都有

2C4G

Nat,内网

测试环境

安装saltstack

salt软件包需要epel源的支持,那么下载 EPEL的全称叫 Extra Packages for Enterprise Linux 。EPEL是由 Fedora 社区打造,为 RHEL 及衍生发行版如 CentOS、Scientific Linux 等提供高质量软件包的项目。装上了 EPEL之后,就相当于添加了一个第三方源。

wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
yum clean all #清空缓存
yum makecache #生成yum缓存


# master 安装salt-master
yum install salt-master -y


# slave 安装salt-minion
yum install salt-minion -y
配置Saltstack
# salt-master的配置文件是/etc/salt/master
# salt-minion的配置文件是/etc/salt/minion
# 配置文件中包含了大量可调整的参数,这些参数控制master和minion各个方面

salt-master

[root@master ~]# grep -v ^# /etc/salt/master|grep -v ^$
interface: 0.0.0.0  #绑定到本地的0.0.0.0地址
publish_port: 4505  #管理端口,命令发送
user: root      #运行salt进程的用户
worker_threads: 5  #salt运行线程数,线程越多处理速度越快,不要超过cpu个数
ret_port: 4506  #执行结果返回端口
pidfile: /var/run/salt-master.pid #pid文件位置
log_file: /var/log/salt/master  #日志文件地址
#自动接收minion的key
auto_accept: False

salt-minion

[root@slave ~]# grep -v ^# /etc/salt/minion|grep -v ^$
master: master
master_port: 4506
user: root
id: slave
acceptance_wait_time: 10
log_file: /var/log/salt/minion
启动验证服务
systemctl start salt-minion
systemctl start salt-master

#检查salt状态
systemctl status salt-minion
systemctl status salt-master

# 验证端口
[root@master ~]# ss -atnlp
State      Recv-Q Send-Q Local Address:Port               Peer Address:Port              
LISTEN     0      128       *:22                    *:*                   users:(("sshd",pid=883,fd=3))
LISTEN     0      100       *:4505                  *:*                   users:(("salt-master",pid=1232,fd=13))
LISTEN     0      100       *:4506                  *:*                   users:(("salt-master",pid=1244,fd=21))


# salt-master默认监听两个端口
4505   # publish_port 提供远程命令发送功能
4506   # ret_port     提供认证,文件服务,结果收集等功能
# 确保客户端可以通信服务器的此2个端口,保证防火墙允许端口通过。因此在测试环境直接关闭防火墙
配置master认证minion

master上接受minion密钥

在minion启动后连接master会请求master为其签发证书,等待证书签发完成后,master可以信任minion,并且minion和master之间的通信是加密的。

salt-master执行

[root@master ~]# salt-key -L
Accepted Keys:
Denied Keys:
Unaccepted Keys:
slave  # 此时已出现slave
Rejected Keys:
  
# 此时slave已经出现在unaccepted keys中,说明minion已经和master联系,
# 并且master已经获取了minion的公钥,等待下一步指令。

检查master和minion的密钥匹配

[root@master ~]# salt-key -f slave
Unaccepted Keys:
slave:  d4:97:1a:81:4d:88:d2:9b:0b:73:e3:66:07:7e:20:6c
                                
# 因此可确认密钥匹配,在master上接受密钥
[root@master ~]# salt-key -a slave
The following keys are going to be accepted:
Unaccepted Keys:
slave
Proceed? [n/Y] y
Key for minion slave accepted.


# 确认接收秘钥后,检验minion秘钥是否被接收
[root@master ~]# salt-key -L
Accepted Keys:
slave
Denied Keys:
Unaccepted Keys:
Rejected Keys:
salt-key常用命令
[root@linux-node1 ~]# salt-key -L
Accepted Keys:  #已经接受的key
Denied Keys:    #拒绝的key
Unaccepted Keys:#未加入的key
Rejected Keys:#吊销的key

#常用参数
-L  #查看KEY状态
-A  #允许所有
-D  #删除所有
-a  #认证指定的key
-d  #删除指定的key
-r  #注销掉指定key(该状态为未被认证)

#在master端/etc/salt/master配置
auto_accept: True   #如果对Minion信任,可以配置master自动接受请求
salt-key的使用
# 列出当前所有的key
[root@master ~]# salt-key 
Accepted Keys:
slave
Denied Keys:
Unaccepted Keys:
Rejected Keys:

# 添加指定minion的key
[root@master ~]# salt-key  -a salt -y


# 添加所有minion的key
[root@master ~]# salt-key  -A  -y

# 删除指定的key
[root@master ~]# salt-key -d slave -y

# 删除所有的key
[root@master ~]# salt-key -D -y
日常命令参数

首先知道master和minion都安装了什么文件,然后才知道怎么操作

# master端
[root@master ~]# rpm -ql salt-master
/etc/salt/master			# salt master主配置文件
/usr/bin/salt					# salt master核心操作命令
/usr/bin/salt-cp			# salt 文件传输命令
/usr/bin/salt-key			# salt证书管理
/usr/bin/salt-master	# salt master服务命令
/usr/bin/salt-run			# salt master runner命令
/usr/bin/salt-unity
/usr/lib/systemd/system/salt-master.service
/usr/share/man/man1/salt-cp.1.gz
/usr/share/man/man1/salt-key.1.gz
/usr/share/man/man1/salt-master.1.gz
/usr/share/man/man1/salt-run.1.gz
/usr/share/man/man1/salt-unity.1.gz
/usr/share/man/man7/salt.7.gz


# slave端
[root@slave ~]# rpm -ql salt-minion
/etc/salt/minion				# minion配置文件
/usr/bin/salt-call			# 拉取命令
/usr/bin/salt-minion		# minion服务命令
/usr/lib/systemd/system/salt-minion.service  # minion启动脚本
/usr/share/man/man1/salt-call.1.gz
/usr/share/man/man1/salt-minion.1.gz

第一条SaltStack命令

第一条salt命令
[root@master ~]# salt '*' test.ping
slave:
    True
    
[root@master ~]# salt '*' test.echo 'zhou'
slave:
    zhou
# salt是一个命令
# * 表示目标主机, 在这里代表所有目标主机 
# test.ping是salt远程执行的一个模块下面的方法。

# 这是条很简单的探测minion主机存活命令,也是远程执行命令,我们通过master发送消息给"*"所有的minion,
# 并且告诉他们运行salt内置的命令(也是python模块中的一个函数),返回true表示slave机器监控存活。

[root@master ~]# salt '*' test.fib 50
slave:
    |_
      - 0
      - 1
      - 1
      - 2
      - 3
      - 5
      - 8
      - 13
      - 21
      - 34
    - 5.00679016113e-06
# test.fib生成斐波那契数列

# 菲波那切数列定义是第0项是0,第1项是1,数列从第3项开始,每一项等于前两项之和。

Salt命令组成结构

完整的一个命令
# 在命令行输入的命令都是     执行模块
# 等到命令写入到文件中,             就叫做状态模块

salt --help # 即可查看salt帮助
[root@master 192.168.199.155 ~]$salt --help
Usage: salt [options] '<target>' <function> [arguments]

# salt命令 参数 目标 salt模块的函数 远程执行的参数


# 完整的五部分命令
# summary参数显示salt命令的概要
[root@master ~]# salt --summary '*' cmd.run 'hostname'
slave:
    slave


-------------------------------------------
Summary
-------------------------------------------
# of Minions Targeted: 1
# of Minions Returned: 1
# of Minions Did Not Return: 0
-------------------------------------------


# 列出salt的sys模块
[root@master ~]# salt 'slave' sys.list_modules
slave:
    - acl
    - aliases
    - alternatives
    - archive
    - artifactory
    - blockdev
    - btrfs
    - buildout
    - cloud
    - cmd
远程执行命令模块
[root@master ~]# salt 'slave' sys.list_modules

# cmd是超级模块,所有shell命令都能执行
[root@master ~]# salt 'slave' cmd.run 'ps -ef |grep python'
slave:
    root        882      1  0 14:57 ?        00:00:00 /usr/bin/python -Es /usr/sbin/tuned -l -P
    root       1220      1  0 15:13 ?        00:00:00 /usr/bin/python /usr/bin/salt-minion
    root       1223   1220  0 15:13 ?        00:00:00 /usr/bin/python /usr/bin/salt-minion
    root      13564      1  0 15:31 ?        00:00:00 /usr/bin/python /usr/bin/salt-minion
    root      13565  13564  0 15:31 ?        00:00:00 /bin/sh -c ps -ef |grep python
    root      13567  13565  0 15:31 ?        00:00:00 grep python
远程安装nginx
#在minion上安装nginx
[root@master~]$salt 'slave' pkg.install "nginx"
#卸载minion上的nginx
[root@master~]$salt 'slave' pkg.remove "nginx"
#检查pkg包的版本
[root@master~]$salt 'slave' pkg.version "nginx"
远程管理服务模块
# 管理服务是系统管理员的重要任务,通过salt管理minion服务会很简单,使用service模块

[root@master ~]# salt 'slave' service.start "nginx"
slave:
    True
[root@master ~]# salt 'slave' service.status "nginx"
slave:
    True
[root@master ~]# salt 'slave' service.stop "nginx"
slave:
    True

--out控制salt命令结果输出格式

JSON

[root@master ~]# salt --out=json '*' cmd.run_all 'hostname'
{
    "slave": {
        "pid": 13780, 
        "retcode": 0, 
        "stderr": "", 
        "stdout": "slave"
    }
}

YAML

[root@master ~]# salt --out=yaml '*' cmd.run_all 'hostname'
slave:
  pid: 13786
  retcode: 0
  stderr: ''
  stdout: slave