saltstack安装
saltstack基于python开发的C/S架构配置管理工具
底层使用ZeroMQ消息队列pub/sub方式通信
使用SSL证书签发的方式进行认证管理,传输采用AES加密
在saltstack架构中服务器端叫Master,客户端叫Minion。
在Master和Minion端都是以守护进程的模式运行,监听配置文件里面定义的ret_port(接受minion请求)和publish_port(发布消息)的端口。
altstack四大功能,分别是:
- 远程执行 (批量执行命令)在master上执行命令时,会在所有的minion上执行。
- 配置管理/状态管理 (描述想到达到的状态,saltstack就会去执行)
- 云管理(cloud) 用于管理云主机
- 事件驱动 被动执行的,当达到某个值会自动触发
saltstack可以通过远程执行实现批量管理,并且通过描述状态来达到某些功能的目的。
saltstack四大运行方式:
- local本地运行 (masterless模式)
- master/minion传统方式 这是saltstack的主要模式
- syndic 分布式
- salt ssh (agentless模式)
据了解,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 检查安装环境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
- 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 默认使用的主机名称,除非显示的指定配置文件
//语法: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
[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
#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命令
浙公网安备 33010602011771号