第一话 开始使用 Salt

目录

写在最前

什么是 SaltStack ?

主要功能是什么?

SaltStack部署的基本架构是什么?

SaltStack的工作机制是什么?

一、安装

1.1 依赖(即运行 salt 所需的环境条件)

1.2 环境

1.3 从SALTSTACK存储库安装

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.4 Run sudo yum update

1.3.5 安装salt-minion,salt-master或其他Salt组件命令

1.3.6 master端安装

1.3.7 minion 端安装

1.4 SaltStack认证

1.5 配置

1.5.1 minion 端配置

1.5.2 master 端配置

1.6 安装完成,第一条命令测试


写在最前:

什么是 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客户端
IP10.20.2.9410.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_642.6.32-888.el6.x86_64

查看selinux的状态(未关闭则先关闭)

# getenforce

DisabledDisabled

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

 

 

1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看REaDME.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值