saltstack安装

saltstack基于python开发的C/S架构配置管理工具

底层使用ZeroMQ消息队列pub/sub方式通信

使用SSL证书签发的方式进行认证管理,传输采用AES加密

在saltstack架构中服务器端叫Master,客户端叫Minion。  

在Master和Minion端都是以守护进程的模式运行,监听配置文件里面定义的ret_port(接受minion请求)和publish_port(发布消息)的端口。

 当Minion运行时会自动连接到配置文件里面定义的Master地址ret_port端口进行连接认证

altstack四大功能,分别是:

  • 远程执行 (批量执行命令)在master上执行命令时,会在所有的minion上执行。
  • 配置管理/状态管理 (描述想到达到的状态,saltstack就会去执行)
  • 云管理(cloud) 用于管理云主机
  • 事件驱动 被动执行的,当达到某个值会自动触发

saltstack可以通过远程执行实现批量管理,并且通过描述状态来达到某些功能的目的。

saltstack四大运行方式:

  • local本地运行 (masterless模式)
  • master/minion传统方式 这是saltstack的主要模式
  • syndic 分布式
  • salt ssh (agentless模式)
Slatstack组件介绍
1)salt master 用于将命令和配置发送到在受管系统上运行的Salt minion
2)Salt Minions 从Salt master接收命令和配置
3)Execution Modules 从命令行针对一个或多个受管系统执行的临时命令。应用场景,例如:1. 实时监控,状态和库存,2. 一次性命令和脚本,3. 部署关键更新
4)Formulas (States) 系统配置的声明性或命令式表示 Grains
5)Grains是有关底层受管系统的静态信息,包括操作系统,内存和许多其他系统属性。
6)Pillar 用户定义的变量。这些安全变量被定义并存储在Salt Master中,然后使用目标“分配”给一个或多个Minion。


 

据了解,saltstack已经被vmvare公司收购,因此是可以去vmvare相关网站下载和配置

安装链接为: Downloads - Salt install guide (saltproject.io)

https://docs.saltproject.io/salt/install-guide/en/latest/topics/downloads.html

 

这个页面是有好多系统的安装介绍,有macos,centos,redhat,suse,debian,ubuntu,windows,pythonos等操作系统和环境,我选择的是CentOS

一、安装准备

  1. 1 检查安装环境Centos7

salt:

  • /bin/bash
  • /bin/sh
  • /usr/bin/env
  • config(salt) = 3005.1-2.el7
  • dmidecode
  • libc.so.6
  • libdl.so.2
  • libpthread.so.0
  • libz.so.1
  • openssl
  • pciutils
  • rpmlib
  • rtld
  • systemd-units
  • which

salt-minon/salt-master/salt-api:

  • /bin/bash
  • /bin/sh
  • config(salt-master) = 3005.1-2.el7
  • rpmlib
  • salt = 3005.1-2.el7

--- Classic

salt:

  • /bin/sh
  • /usr/bin/env
  • /usr/bin/python3
  • config(salt) = 3005.1-1.el7
  • pciutils
  • python(abi) = 3.6
  • python36-PyYAML
  • python36-contextvars
  • python36-distro
  • python36-jinja2
  • python36-jmespath
  • python36-m2crypto >= 0.31.0
  • python36-markupsafe
  • python36-msgpack >= 0.6
  • python36-psutil
  • python36-pycurl
  • python36-requests
  • python36-rpm
  • python36-six
  • python36-zmq >= 18.0.1
  • rpmlib
  • systemd-units
  • which
  • yum-utils

 

  1. 2.  安排端口

     salt-master需要开放两个端口4505,4506,其中4505端口用于消息通信,4506端口用于接受minon的请求

二、 安装软件

  1.    导入GPG以及salt.repo库文件

sudo rpm --import https://repo.saltproject.io/salt/py3/redhat/7/x86_64/SALT-PROJECT-GPG-PUBKEY-2023.pub
curl -fsSL https://repo.saltproject.io/salt/py3/redhat/7/x86_64/latest.repo | sudo tee /etc/yum.repos.d/salt.repo

2. 清理库过时库缓存

sudo yum clean expire-cache 

3. 安装 salt-minion, salt-master等软件

sudo yum install salt-master  #管理端
sudo yum install salt-minion  #客户端
sudo yum install salt-ssh   #ssh模式
sudo yum install salt-syndic #分布模式
sudo yum install salt-cloud #云模式
sudo yum install salt-api   #api模式

4. 允许相关服务

sudo systemctl enable salt-master && sudo systemctl start salt-master
sudo systemctl enable salt-minion && sudo systemctl start salt-minion
sudo systemctl enable salt-syndic && sudo systemctl start salt-syndic
sudo systemctl enable salt-api && sudo systemctl start salt-api

 

三、 salt-master配置

网络配置,默认情况下,salt监听主机所有ip地址,可以自己定义,配置文件路径  /etc/salt/master.d/network.conf

 
[root@host106 master.d]# cat network.conf 
# The network interface to bind to
interface: 192.168.0.106

# The Request/Reply port
ret_port: 4506

# The port minions bind to for commands, aka the publish port
publish_port: 4505

 

process 管理,默认的是3个,最多5个process,如果系统很忙,那么一个process对应200个客户端,worker_threads 的值最大不能超过内核数的1.5倍

/etc/salt/master.d/thread_options.conf
worker_threads: 5

 

 

四、客户端salt-minon配置

客户端默认使用主机名salt作为master的名称,在此需要改成自己的master主机ip地址

cat /etc/salt/minion.d/master.conf
master: 192.168.0.106

客户端ID 默认使用的主机名称,除非显示的指定配置文件 

/etc/salt/minion.d/id.conf#
 id: myhost-minion
 
五、管理salt-key
salt命令相关主要参数
//语法:salt [options] '<target>' <function> [arguments]

//常用的options
    --version       //查看saltstack的版本号
    --versions-report   //查看saltstack以及依赖包的版本号
    -h      //查看帮助信息
    -c CONFIG_DIR   //指定配置文件目录(默认为/etc/salt/)
    -t TIMEOUT      //指定超时时间(默认是5s)
    --async     //异步执行
    -v      //verbose模式,详细显示执行过程
    --username=USERNAME     //指定外部认证用户名
    --password=PASSWORD     //指定外部认证密码
    --log-file=LOG_FILE     //指定日志记录文件
    
//常用target参数
    -E      //正则匹配
    -L      //列表匹配 
    -S      //CIDR匹配网段
    -G      //grains匹配
    --grain-pcre    //grains加正则匹配
    -N      //组匹配
    -R      //范围匹配
    -C      //综合匹配(指定多个匹配)
    -I      //pillar值匹配

 

使用正则匹配测试

[root@host106 ~]# salt -E 'host*' test.ping
host105:
    True

[root@host106 ~]# salt -L "host105,db.bjr.com.cn" test.ping
db.bjr.com.cn:
    True
host105:
    True
[root@host106 ~]# 

 

修改minion id的值,需要修改minion节点的配置文件/etc/salt/minon,找到#id 开头的这一行,修改冒号后面的值,修改后重启minon节点

root@ubuntu:/etc/salt# vi minion
# clusters.
id: host104  #我修改后的值

root@ubuntu:/etc/salt# service salt-minion restart

在主节点执行salt-key可以看到新的key已经出现

[root@host106 salt]# salt-key 
Accepted Keys:
db.bjr.com.cn
host105
Denied Keys:
Unaccepted Keys:
host104   #更改后的id
Rejected Keys:

 

最后执行命令salt-key -ya host104即可完成id名称的更改

[root@host106 salt]# salt-key  -ya host104
The following keys are going to be accepted:
Unaccepted Keys:
host104
Key for minion host104 accepted.

也可以删除不用的id,具体命令如下:

[root@host106 salt]# salt-key -yd db.bjr.com.cn
The following keys are going to be deleted:
Accepted Keys:
db.bjr.com.cn
Key for minion db.bjr.com.cn deleted.

 

网段匹配测试

[root@host106 salt]# salt -S '192.168.0.0/24' test.ping
host104:
    True
host105:
    True

 

特定操作系统测试,根据被控主机的grains信息进行匹配过滤,格式为:<grain value>:<grain expression>

[root@host106 salt]# salt -G 'os:ubuntu' test.ping
host104:
    True

 

grains 是minion 端获取客户端本地相关信息,在每次 minion 启动的时候获取一次,可以理解为静态信息,像 ip,主机名,CPU等等信息都会获取。

 

一些关于 grains 的命令:

salt  'host105'  grains.ls    # 获取host105中都有哪些 grains 信息

salt  'host105'  grains.items    # host105主机中所有的grains 详细信息

salt  'host105'  grains.item  os    # 查看某一条 grains 信息,也可以使用  grains.get  os 

 

实际中我们比较常用的是自定义客户端的 grains 信息,比如定义角色,方法很简单,只要在 minion 端的配置文件中关于 grains 的地方注释去掉即可

grains:

  role: nginx

  env: test

配置完重启minion ,再在 master 上 使用 salt  'host2' grains.get  role  就可以得到 nginx 的返回。

还有一种比较常用的自定义 grains 信息是使用文件方式,在/etc/salt/下新建 grains 文件,文件使用 yaml 格式,比如上面的配置写到文件中如下:

role: nginx

env: test

 

使用 grains 的地方非常多,比如你指定目标的时候可以使用 grains :

salt  -G  'role:nginx'  cmd.run  'uptime'    #  在grains 角色为 nginx 的所有主机上执行命令 uptime

 

 

 
 
使用命令salt-key可以列出有哪些key在用,哪些被拒绝,哪些等待接收
[root@host106 master.d]# salt-key
Accepted Keys:
db.bjr.com.cn
host105
Denied Keys:
Unaccepted Keys:
Rejected Keys:

 

salt-key -ya host105 # 接收主机host105的key请求,并主动确认yes

salt-key --yA  #接收所有主机的key请求,并主动确认yes

 salt-key -d host105 #删除主机host105的key
salt-key -D #删除所有客户端主机的key
salt-key -L  #列出所有minon ID文件
 
salt-master可以配置自动接收key,一般不建议这样配置,但如果知道内网安全,那么也是可以配置的,修改/etc/salt/master文件的如下参数:

#auto_accept: False

把注释去掉,False改成True,之后重启salt-master即可

 

六、 确认安装结果

首先需要看一下salt-master运行状态

[root@host106 salt]# systemctl status salt-master -l
● salt-master.service - The Salt Master Server
   Loaded: loaded (/usr/lib/systemd/system/salt-master.service; enabled; vendor preset: disabled)
   Active: active (running) since 四 2023-06-01 16:21:37 CST; 20s ago
     Docs: man:salt-master(1)
           file:///usr/share/doc/salt/html/contents.html
           https://docs.saltproject.io/en/latest/contents.html
 Main PID: 13462 (/opt/saltstack/)
    Tasks: 31
   Memory: 229.1M
   CGroup: /system.slice/salt-master.service
           ├─13462 /opt/saltstack/salt/bin/python3.10 /usr/bin/salt-master MainProces
           ├─13528 /opt/saltstack/salt/bin/python3.10 /usr/bin/salt-master PubServerChannel._publish_daemo
           ├─13529 /opt/saltstack/salt/bin/python3.10 /usr/bin/salt-master EventPublishe
           ├─13532 /opt/saltstack/salt/bin/python3.10 /usr/bin/salt-master Maintenanc
           ├─13533 /opt/saltstack/salt/bin/python3.10 /usr/bin/salt-master ReqServer ReqServer_ProcessManage
           ├─13542 /opt/saltstack/salt/bin/python3.10 /usr/bin/salt-master ReqServer MWorkerQueu
           ├─13543 /opt/saltstack/salt/bin/python3.10 /usr/bin/salt-master ReqServer MWorker-
           ├─13551 /opt/saltstack/salt/bin/python3.10 /usr/bin/salt-master ReqServer MWorker-
           ├─13552 /opt/saltstack/salt/bin/python3.10 /usr/bin/salt-master ReqServer MWorker-
           ├─13563 /opt/saltstack/salt/bin/python3.10 /usr/bin/salt-master ReqServer MWorker-
           ├─13564 /opt/saltstack/salt/bin/python3.10 /usr/bin/salt-master ReqServer MWorker-
           └─13565 /opt/saltstack/salt/bin/python3.10 /usr/bin/salt-master FileServerUpdat

6月 01 16:21:35 host106 systemd[1]: Starting The Salt Master Server...
6月 01 16:21:37 host106 systemd[1]: Started The Salt Master Server.

 

2) 检查集群状态和版本

[root@host106 salt]# salt '*' test.version
db.bjr.com.cn:
2017.7.4
host105:
3006.1

 

七、卸载salt-master等

如果使用的是apt、rpm管理软件包,使用卸载参数即可 ,例如yum remove <package name> 或者 sudo apt remove <package name>.

pip的可以用pip uninstall xxx命令

 

 

 

 

 

 
posted @ 2023-06-01 15:49  netma  阅读(124)  评论(0)    收藏  举报