目录
1.3.1 根据您的版本运行以下命令之一以导入SaltStack存储库密钥(注意清理老的 EPEL源):
1.3.2 将以下文件保存到 /etc/yum.repos.d/saltstack.repo 中
1.3.3 Run sudo yum clean expire-cache
1.3.5 安装salt-minion,salt-master或其他Salt组件命令
写在最前:
什么是 SaltStack ?
• Saltstack是基于python开发的一套C/S架构配置管理工具
• 使用SSL证书签方的方式进行认证管理
• 底层使用ZeroMQ消息队列pub/sub方式通信
– 号称世界上最快的消息队列ZeroMQ能快速在成千上万台主机上进行各种操作
– 采用RSA Key方式确认身
主要功能是什么?
• Saltstack最主要的两个功能是:配置管理与远程执行
• Saltstack不只是一个配置管理工具,还是一个云计算与数据中心架构编排的利器
• Saltstack已经支持Docker相关模块
• 在友好地支持各大云平台之后,配合Saltstack的Mine实时发现功能可以实现各种云平台业务的自动扩展
SaltStack部署的基本架构是什么?
• Saltstack基于C/S架构
– 服务器端称作Master(中心控制系统)
– 客户端称作 Minion
• 可以实现传统处理方式,即:客户端发送请求给服务器,服务器收到请求后处理请求,再将结果返回
• 也可以使用消息队列中的发布与订阅(pub/sub)服务模式
第一种:master→minion,这种架构中 master 和所有 minion 都直接连接,minion 接收来自 master 的指令,完成命令执行或配置管理;(目前 HIGO 即采用此种架构)
第二种:master→syndic→minion,这种架构中 master 通过 syndic 对 minion 进行管理,同时该架构可以进行多级扩展;
第三种:无 master 的 minion,这种架构中 minion 不受任何 master 控制,通过本地运行即可完成相关功能;
SaltStack的工作机制是什么?
• Master 和 Minion都以守护进程的方式运行
• Master 监听配置文件里定义的 ret_port (接收 minion 请求),和 publish_port (发布消息)的端口
• 当 Minion 运行时,它会自动连接到配置文件里定义的 Master 地址 ret_port 端口进行连接认证
• 当 Master 和 Minion 可以正常通信后,就可以进行各种各样的配置管理工作了
一、安装
1.1 依赖(即运行 salt 所需的环境条件)
Python:[2.6,3.0)
ZeroMQ:>=2.1.9
pyzmp:>=2.1.9
pycrypto
msgpack-python
yam1
jinja2
1.2 环境
master服务端 | minion客户端 | |
---|---|---|
IP | 10.20.2.94 | 10.20.0.30 |
查看系统版本 # cat /etc/redhat-release | CentOS release 6.5 (Final) | CentOS release 6.5 (Final) |
查看系统内核版本 # uname -r | 2.6.32-431.el6.x86_64 | 2.6.32-888.el6.x86_64 |
查看selinux的状态(未关闭则先关闭) # getenforce | Disabled | Disabled |
1.3 从SALTSTACK存储库安装
在SaltStack存储库中提供了RHEL 5,6和7的2015.5及更高版本的软件包。
注意:2015.8.3版本中的存储库文件夹结构已更改,但可继续使用2015.8.1中记录的先前存储库结构。
使用SaltStack存储库进行安装:
1.3.1 根据您的版本运行以下命令之一以导入SaltStack存储库密钥(注意清理老的 EPEL源):
# Version7:
rpm --import https://repo.saltstack.com/yum/redhat/7/x86_64/latest/SALTSTACK-GPG-KEY.pub
# Version6:
rpm --import https://repo.saltstack.com/yum/redhat/6/x86_64/latest/SALTSTACK-GPG-KEY.pub
# Version5:
wget https://repo.saltstack.com/yum/redhat/5/x86_64/latest/SALTSTACK-EL5-GPG-KEY.pub
rpm --import SALTSTACK-EL5-GPG-KEY.pub
rm -f SALTSTACK-EL5-GPG-KEY.pub
1.3.2 将以下文件保存到 /etc/yum.repos.d/saltstack.repo 中
# Version 7 and 6:
[saltstack-repo]
name=SaltStack repo for RHEL/CentOS $releasever
baseurl=https://repo.saltstack.com/yum/redhat/$releasever/$basearch/latest
enabled=1
gpgcheck=1
gpgkey=https://repo.saltstack.com/yum/redhat/$releasever/$basearch/latest/SALTSTACK-GPG-KEY.pub
Version 5:
[saltstack-repo]
name=SaltStack repo for RHEL/CentOS $releasever
baseurl=https://repo.saltstack.com/yum/redhat/$releasever/$basearch/latest
enabled=1
gpgcheck=1
gpgkey=https://repo.saltstack.com/yum/redhat/$releasever/$basearch/latest/SALTSTACK-EL5-GPG-KEY.pub
1.3.3 Run sudo yum clean expire-cache
1.3.4 Run sudo yum update
1.3.5 安装salt-minion,salt-master或其他Salt组件命令
yum install salt-master
yum install salt-minion
yum install salt-ssh
yum install salt-syndic(暂可忽略)
yum install salt-cloud
注意:从2015.8.0开始,在RHEL系统上安装不再需要EPEL存储库。SaltStack存储库提供所有必需的依赖项。
1.3.6 master端安装
# yum install salt-master
# yum install salt-minion(若已安装 salt-master 可忽略)
# yum install salt-ssh
# yum install salt-cloud
# yum install salt-syndic
安装完成后执行如下命令可以查看 Salt 安装信息:
# salt --versions-report
Salt Version:
Salt: 2019.2.0
Dependency Versions:
cffi: Not Installed
cherrypy: Not Installed
dateutil: Not Installed
docker-py: Not Installed
gitdb: Not Installed
gitpython: Not Installed
ioflo: Not Installed
Jinja2: 2.8.1
libgit2: Not Installed
libnacl: Not Installed
M2Crypto: Not Installed
Mako: Not Installed
msgpack-pure: Not Installed
msgpack-python: 0.4.6
mysql-python: Not Installed
pycparser: Not Installed
pycrypto: 2.6.1
pycryptodome: Not Installed
pygit2: Not Installed
Python: 2.7.13 (default, Feb 20 2019, 09:59:36)
python-gnupg: Not Installed
PyYAML: 3.11
PyZMQ: 14.5.0
RAET: Not Installed
smmap: Not Installed
timelib: Not Installed
Tornado: 4.2.1
ZMQ: 4.0.5
System Versions:
dist: centos 6.10 Final
locale: UTF-8
machine: x86_64
release: 2.6.32-431.el6.x86_64
system: Linux
version: CentOS 6.10 Final
加入到开机自动启动
# chkconfig salt-master on
# chkconfig --list salt-master
1.3.7 minion 端安装
需要epel的yum源,将以下文件保存到 /etc/yum.repos.d/saltstack.repo 中(配置测试公司自己的源)
[saltstack-repo]
name=SaltStack repo for Red Hat Enterprise Linux $releasever
file=/etc/yum.repos.d/saltstack.repo
gpgcheck=0
key_url=http://saltstack.pkg.lehe.com/redhat/$releasever/$basearch/latest/SALTSTACK-GPG-KEY.pub
enabled=1
baseurl=http://saltstack.pkg.lehe.com/redhat/$releasever/$basearch/latest
安装 salt-minion并启动
# yum -y install salt-minion
# /etc/init.d/salt-minion restart # Version6 启动
# systemctl restart salt-minion.service # Version7 启动
加入到开机自动启动
# chkconfig salt-master on
# chkconfig --list salt-minion
1.4 SaltStack认证
- minion 在第一次启动时,会在 /etc/salt/pki/minion/ 下自动生成 minion.pem(private key) 和 minion.pub(public key),然后将 minion.pub 发送给 master 。
- master 在第一次启动时,会在 /etc/salt/pki/master 下自动生成 master.pem 。在接收到 minion的public key 后,通过 salt-key 命令 accept minion public key ,这样在 master的/etc/salt/pki/master/minions下的将会存放以 minion id 命名的 public key,客户端会保存一份 master 的 public key ,在 /etc/salt/pki/minion_master.pub。
- 通过两个步骤的验证,master 就能对 minion 发送指令了。
1.5 配置
1.5.1 minion 端配置
# cd /etc/salt
# cp minion minion.bak
# vim minion
# 指定服务端地址
# master: salt
master: 10.20.2.94
# /etc/init.d/salt-minion restart
1.5.2 master 端配置
# cd /etc/salt
# cp master master.bak
# 编辑项目配置文件(可选,后续跟进需求进一步配置)
# vim master
state_top: top.sls #定义top入口文件,告诉state用来映射什么sls模块,然后安装到相应的软件或部署相应的文件到minions上面。
file_roots: #相当于是项目的目录路径,之后批量管理客户的时候的配置文件就定义在这些目录里面
base:
- /etc/salt/states
dev:
- /etc/salt/states/dev
prod:
- /etc/salt/states/prod
创建项目目录和文件(同上,可选,后续跟进需求进一步配置)
# mkdir /etc/salt/states/prod -p
# mkdir /etc/salt/states/init -p
重启:
// master 端
# /etc/init.d/salt-master restart # Version6 启动
# systemctl restart salt-master.service # Version7 启动
salt-key参数:
-a:同意单个主机
-A:同意所有主机
-L:列出已经同意的主机
-d:删除单个主机
-D:删除所有主机
# 显示所有minion认证信息
# salt-key
Accepted Keys:
Denied Keys:
Unaccepted Keys:
syq-snakenx-02.lehe.com
Rejected Keys:
# 接受 syq-snakenx-02.lehe.com 的认证信息;可跟参数 -y
# salt-key -a syq-snakenx-02.lehe.com
The following keys are going to be accepted:
Unaccepted Keys:
syq-snakenx-02.lehe.com
Proceed? [n/Y] Y
Key for minion syq-snakenx-02.lehe.com accepted.
# salt-key
Accepted Keys:
syq-snakenx-02.lehe.com
Denied Keys:
Unaccepted Keys:
Rejected Keys:
# 扩展
# salt-key -A #接受所有Unaccepted状态的minion认证信息
# salt-key -d salt-test-minion #拒绝认证salt-test-minion
# salt-key -D #拒绝所有
1.6 安装完成,第一条命令测试
检查当前所有主机状态:
# 测试所有主机
# salt '*' test.ping
syq-snakenx-02.lehe.com:
True
# 测试指定主机
# salt 'syq-snakenx-02.lehe.com' test.ping
syq-snakenx-02.lehe.com:
True
# 远程执行命令
# salt 'syq-snakenx-02.lehe.com' cmd.run 'df -h'
syq-snakenx-02.lehe.com:
Filesystem Size Used Avail Use% Mounted on
/dev/sda2 1.1T 358G 687G 35% /
tmpfs 32G 16K 32G 1% /dev/shm
/dev/sda1 190M 30M 151M 17% /boot
# 显示更详细信息的函数
# salt 'syq-snakenx-02.lehe.com' cmd.run_all 'df -h'
syq-snakenx-02.lehe.com:
----------
pid:
58453
retcode:
0
stderr:
stdout:
Filesystem Size Used Avail Use% Mounted on
/dev/sda2 1.1T 358G 687G 35% /
tmpfs 32G 16K 32G 1% /dev/shm
/dev/sda1 190M 30M 151M 17% /boot
命令格式为:
# salt "目标主机" 模块.方法 "参数"
test模块实际还包含很多其它有用的函数
// test 函数
# salt 'syq-snakenx-02.lehe.com' sys.list_functions test
syq-snakenx-02.lehe.com:
- test.arg
- test.arg_repr
- test.arg_type
- test.assertion
- test.attr_call
- test.collatz
- test.conf_test
- test.cross_test
- test.echo
- test.exception
- test.false
- test.fib
- test.get_opts
- test.kwarg
- test.module_report
- test.not_loaded
- test.opts_pkg
- test.outputter
- test.ping
- test.provider
- test.providers
- test.rand_sleep
- test.rand_str
- test.retcode
- test.sleep
- test.stack
- test.true
- test.try_
- test.tty
- test.version
- test.versions
- test.versions_information
- test.versions_report
我们可以测试一下列表中的其它函数,比如 rest.echo,想了解函数的用法可以执行如下命令,执行结果会给出该模块的用处和实例用法:
# salt 'syq-snakenx-02.lehe.com' sys.doc test.echo
test.echo:
Return a string - used for testing the connection
CLI Example:
salt '*' test.echo 'foo bar baz quo qux'
我们可以根据帮助给出的例子写一条命令:
# salt 'syq-snakenx-02.lehe.com' test.echo "hello ,I am syq-snakenx-02"
syq-snakenx-02.lehe.com:
hello ,I am syq-snakenx-02