当前位置:职场发展 > Saltstack自动化操作记录(1)

Saltstack自动化操作记录(1)

  • 发布:2023-09-29 07:39

稍微复杂一点的Puppet用于早期的运维工作。下面介绍一下比较简单实用的Saltstack自动化运维的使用。

关于Saltstack你了解多少?
Saltstack是一种全新的基础设施管理方法。它是服务器基础设施的集中管理平台。它可以在几分钟内运行。它足够快,服务器之间可能需要几秒钟的时间。通信和扩展性好,轻松批量管理数万台服务器,大幅降低人工和运维成本;具有配置管理、远程执行、监控等功能,一般可以理解为简化版的puppet和增强版的func; 通过部署SaltStack环境,可以根据不同的业务特点,在数千台服务器上批量执行命令、配置集中管理、分发文件、收集服务器数据、操作系统基础和软件包管理,SaltStack是一个强大的工具提高运维人员工作效率,规范业务配置和操作。 SaltStack基于Python语言实现,结合轻量级消息队列(ZeroMQ)(SaltStack的通信模式分为2种模式:ZeroMQ和REAT,由于目前REAT不太稳定,所以通常选择ZeroMQ模式)使用Python第三方模块(Pyzmq、PyCrypto、Pyjinjia2、python-msgpack、PyYAML等)进行构建。

Saltstack运行模式
本地:本地,一台机器玩,不推荐
Master/Minion:通过服务器/代理管理,非常高效(批量管理1000台机器,25秒完成)
Salt SSH:通过SSH管理,效率比较低(批量管理1000台机器,83秒完成)

Saltstack三大功能
远程执行(执行远程命令)
配置管理(状态管理)
云管理

Saltstack特点
1)部署简单方便;
2)支持大多数UNIX/Linux和Windows环境;
3)主从集中管理;
4)配置简单,功能强大,可扩展;
5)Master和Minion基于证书认证,安全可靠;
6) 支持API和自定义模块,可以通过Python轻松扩展。

Master和Minion认证
1)minion第一次启动时,会在/etc/salt/pki/minion/下自动生成minion.pem(路径在/etc/salt/minion中设置) )(私钥)和www.sychzs.cn(公钥),然后将www.sychzs.cn发送给master。
2)master收到minion的公钥后,通过salt-key命令接受minion的公钥。这样,以minion id命名的public将被存储在master的/etc/salt/pki/master/minions下。 key,然后master就可以向minion发送指令。

Master与Minion之间的连接
1)SaltStack master启动后默认监听4505和4506两个端口。 4505(publish_port)是Saltstack的消息发布系统,4506(ret_port)是Saltstack客户端和服务器之间通信的端口。如果使用lsof查看4505端口,你会发现4505端口上的所有minion继续保持在ESTABLISHED状态。

2)minion和master之间的通信模式如下

SaltStack基础环境安装配置记录
英文文档参考:https://www.sychzs.cn/en/latest/
centos6.8系统机器两台,包括:
192.168。 1.101 linux-node1 成为主人 master
192.168.1.102 linux-node2 成为被控端小黄人

1)两台机器的主机名必须固定一致,并且能够互相ping通

 修复master和minion机器名称,然后在master机器上绑定hosts:
[root@linux-node1 ~]# cat /etc/hosts
127.0.0.1 本地主机五涛 localhost4 localhost4.localdomain4
::1 本地主机 本地主机.本地域 本地主机6 本地主机6.本地域6
192.168.1.101 linux-node1
192.168.1.102 linux-node2

2)以下是源码安装方法

a) Master端安装(为了测试效果,服务器端也安装了minion)
[root@linux-node1 ~]# wget http://www.sychzs.cn /pub/epel /6/x86_64/epel-release-6-8.noarch.rpm
[root@linux-node1 ~]# rpm -ivh epel-release-6-8.noarch.rpm --force
[root @linux-node1 ~]# yum -y 安装 salt-master
[root@linux-node1 ~]# yum -y 安装 salt-minion
[root@linux-node1 ~]# chkconfig salt-master on
[root@linux-node1 ~]# chkconfig salt-minion on

b) Minion端安装
[root@linux-node2 ~]# wget http://www.sychzs.cn/pub/epel/6/x86_64/epel-release-6-8.noarch .rpm
[root@linux-node2 ~]# rpm -ivh epel-release-6-8.noarch.rpm --force
[root@linux-node2 ~]# yum -y install salt-minion
[root@linux-node2 ~]# chkconfig salt-minion on

?注意,所以可以直接清除文件并复制以下内容。 ip,冒号后面必须有一个空格
auto_accept: True //此项配置为True时,表示自动认证,无需手动运行salt-key命令进行证书信任
file_roots:                       //指定saltstack文件的根目录位置
base:                                                                                                                                                                                                      // //前面必须留四个空格
[root@linux -node1 ~]# service salt- master start
启动 salt-master 守护进程: [ OK ]
[root@linux-node1 salt-2014.7.0]# netstat -ntlp
… .
tcp 0 0 192.168.1.101:4505 0.0 .0.0:* 监听 12715/python
tcp 0 0 127.0.0.1:25 0.0.0.0:* 监听 1356/master tcp 0 0 192.168.1.101 :4506 0.0.0.0:* 听 12727/python
......
[root@linux-node1 ~]# ps aux | grep python
root 8428 0.0 0.2 111704 8956? SS Jan05 26:14 /data/paas/env/bin/python /data/paas/env/bin/supervisord -c /data/paas/open_paas/bin/supervisord.conf
root 12713 0.0 0.5 281772 22060 ? S 17:39 0:00 /usr/local/bin/python /usr/bin/salt-master -d
root 12714 0.7 0.9 319760 35700 ? S 17:39 0:00 /usr/local/bin/python /usr/bin/salt-master -d
root 12715 0.0 0.5 367796 22136 ? Sl 17:39 0:00 /usr/local/bin/python /usr/bin/salt-master -d
root 12716 0.0 0.5 367796 21912 ? Sl 17:39 0:00 /usr/local/bin/python /usr/bin/salt-master -d
root 12717 0.0 0.5 281772 21728 ? S 17:39 0:00 /usr/local/bin/python /usr/bin/salt-master -d
root 12722 2.4 1.0 413304 40952 ? Sl 17:39 0:01 /usr/local/bin/python /usr/bin/salt-master-d
root 12723 2.4 1.0 413308 40956 ? Sl 17:39 0:01 /usr/local/bin/python /usr/bin/salt-master -d
root 12724 2.4 1.0 413300 40968 ? Sl 17:39 0:01 /usr/local/bin/python /usr/bin/salt-master -d
root 12725 2.4 1.0 413324 40972 ? Sl 17:39 0:01 /usr/local/bin/python /usr/bin/salt-master -d
root 12726 2.3 1.0 413304 40972 ? Sl 17:39 0:01 /usr/local/bin/python /usr/bin/salt-master -d
root 12727 0.0 0.5 670916 22380 ? Sl 17:39 0:00 /usr/local/bin/python /usr/bin/salt-master -d
root 13124 0.0 0.0 103312 880 pts/3 R+ 17:40 0:00 grep python

?任务信息并执行。
在master端的iptables中添加以下两条规则:
[root@linux-node1 ~]# iptables -A INPUT -p tcp -m state --state NEW -m tcp --dport 4505 - j 接受
[root@linux-node1 ~]# iptables -A INPUT -p tcp -m state --state NEW -m tcp --dport 4506 -j 接受
[root@linux-node1 ~]# iptables save
[root@linux-node1 ~]# /etc/init.d/iptables save
[root@linux-node1 ~]# /etc/init.d/iptables restart

b) Minion端配置(如果master端也想控制自己,可以配置自己的monkey)
[root@linux-node2 ~]# vim /etc/salt/minion //修改以下几行
master: 192.168.1.101 //指定master的ip地址,冒号后面必须有一个空格
id: minion-192-1 68-1-102 //修改受控monion主机识别id。建议使用主机名或IP来设置。冒号后面必须有一个空格
[root@linux-node2 ~]# service salt-minion start
启动 salt-minion 守护进程 : [ OK ]
[root@linux-node2 ~]# ps辅助| grep python
root 16610 13.0 0.5 431116 23432 ? Sl 05:15 0:01 /usr/local/bin/python /usr/bin /salt-minion -d
root 16633 0.0 0.0 103312 884 pts/0 S+ 05:16 0:00 grep python

4)SaltStack使用说明(在主控机上操作)

sat 键命令说明:

[root@linux-node1 ~]# salt-key --help
--version 显示版本号并退出
--versions-report 显示程序所有依赖包的版本号并退出
-h, --help 帮助信息
-c CONFIG_DIR, --config-dir=CONFIG_DIR 指定配置目录,默认:/etc/salt/
-q, --quiet 安静模式,不向控制台输出信息-y, --yes 对所有有关是否继续的问题回答 yes,默认: false
日志选项:设置日志选项将覆盖配置文件中的日志配置。
--log-file=LOG_FILE 指定日志文件路径,默认:/var/log/salt/key。
--log-file-level=LOG_LEVEL_LOGFILE 日志文件级别,可以设置以下值之一 'all', 'garbage', 'trace', 'debug', 'info', 'warning', 'error' ,“安静”。默认值:“警告”。
--key-logfile=KEY_LOGFILE 将所有输出发送到指定文件,默认:'/var/log/salt/key'
--out=OUTPUT, --output=OUTPUT 将 salt-key 命令的输出信息发送到指定的输出器。可以设置为以下参数值 'no_return', 'virt_query'.'grains', 'yaml', 'overstatestage' , 'json', 'pprint', 'nested', 'raw', 'highstate', '安静','钥匙','txt',
--out-indent=OUTPUT_INDENT, --output-indent=OUTPUT_INDENT 设置输出行缩进的空格数。负数取消输出缩进。仅对所使用的输出器有效。
--out-file=OUTPUT_FILE, --output-file=OUTPUT_FILE 将显示输出到指定文件
--no-color, --no-color 关闭字体颜色
--force-color, --force-colour 强制启用输出颜色渲染-l ARG, --list=ARG 打印公钥。您可以设置以下三个值“pre”、“un”和“unaccepted”来显示不允许/未签名的密钥。 “acc”或“accepted”将显示允许/签名的密钥。 “rej”或“rejected”将显示被拒绝的密钥。 “all”将显示所有键。
-L, --list-all 将显示所有公钥,相当于月份:“--list all”
-a ACCEPT, --accept=ACCEPT 允许指定的公钥(使用 --include-all 选项指定除挂起密钥之外的所有拒绝状态下的公钥)
-A, --accept-all 接受所有待处理的公钥
-r REJECT, --reject=REJECT 拒绝指定的公钥(使用--include-all选项指定除待处理密钥之外的所有处于接受状态的公钥)
-R, --reject-all 拒绝所有待处理的公钥
--include-all 与接受/拒绝选项一起使用,以指定所有处于非挂起状态的公钥。
-p PRINT, --print=PRINT 打印指定的公钥
-P, --print-all 打印所有公钥
-d DELETE, --delete=DELETE 根据名称删除公钥
-D, --delete-all 删除所有键
-f FINGER, --finger=FINGER 打印指定按键的指纹信息
-F, --finger-all 打印所有按键的指纹信息
主要常用选项:
--gen-keys=GEN_KEYS 将 salt 的名称设置为生成的密钥配置。
--gen-keys-dir=GEN_KEYS_DIR 设置放置生成的密钥对的目录。默认为当前目录。默认=.--keysize=KEYSIZE 设置生成密钥的位数。它仅在与 --gen-keys 选项一起使用时有效。该值必须大于2048,否则会增加到2048。默认为2048default=2048

a) 查看当前salt key信息
[root@linux-node1 ~]# salt-key -L //或者直接salt-key
Accepted Keys:
minion-192 -168-1-102
不接受的密钥:
拒绝的密钥:

b) 测试受控主机的连通性
[root@linux-node1 ~]# salt '*' www.sychzs.cn
minion-192-168-1-102:
真的

c) 远程命令执行(cmd模块),格式:salt '客户端配置的id' module.method '命令参数'(其中'*'代表所有客户端)
[root @linux -node1 ~]# salt '*' www.sychzs.cn 'uptime'
minion-192-168-1-102:
21:51:44 最多 61 天,16:44,2 个用户,平均负载:0.79、0.55、0.47

[root@linux-node1 ~]#盐'minion-192-168-1-102'www.sychzs.cn'uptime'
minion-192-168-1-102:
22 :11:50 up 61 天, 17:05, 2 位用户, 平均负载: 0.44, 0.59, 0.63

[root@linux-node1 ~]#盐'minion-192-168-1-102'www.sychzs.cn'w'
minion-192-168-1-102:
22 :14:20 up 61 天,17:07,2 个用户,平均负载:0.46, 0.52, 0.59
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
root pts/0 124.165.97.64 04:50 57: 20 0.32s 0.32s -bash
root pts/3 124.165.97.64 Mon20 8:46 0.20s 0.20s -bash
[root@linux-node1 ~]# salt 'minion-192-1 68- 1-102' www.sychzs.cn 'who'
minion-192-168-1-102:
root pts/0 Feb 7 04:50 (124.165.97.64 )
root pts/3 Feb 6 20 :41 (124.165.97.64)

[root@linux-node1 ~]# salt '*' www.sychzs.cn 'df -h'
minion-192-168-1-102:
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/VolGroup00-LogVol00
8.1G 6.8G 901M 89% /
tmpfs 1.9G 0 1.9G 0% /dev/shm
/dev/vda1 190M 67M 113M 38% /boot
[root@linux-node1 ~]# salt '*' www.sychzs.cn 'touch /root/test'
minion-192-168-1-102:
[root@linux-node1 ~]# salt '*' www.sychzs.cn 'echo "monion-server" >> /root/test'
minion-192-168-1-102:
到monion机器上查看是否有/root/test文件创建及其内容
[root@linux-node2 ~]# ll /root/test
-rw-r--r--. 1 root root 0 Feb 7 21:51 /root/test
[root@linux-node2 ~]# cat /root/test
monion-server

远程批量传输文件(salt-cp命令)
下面表示将master主控端的/mnt/aa文件传输到所有minion被控端的/opt下
[root@linux-node1 ~]# salt-cp '*' /mnt/aa /opt/
{'minion-192-168-1-102': {'/opt/aa': True}}

注意上面命令只用于文件的传输,目录的传输需要用到cp模块,模块用法详见Saltstack自动化操作记录(2)-模块使用

---------------------------------------------------------顺便说一下-------------------------------------------------------
minion端的认证

当/etc/salt/master文件里没有配置auto_accept:True时,需要通过salt-key命令来进行证书认证操作,其中:
salt-key -L:显示已经或未认证的被控端id,Acceptd Keys为已认证清单,Unaccepted Keys为未认证清单
salt-key -D:删除所有认证主机id证书
salt-key -d id:删除单个id证书
salt-key -A:接受所有id证书请求
salt-key -a id:接受单个id证书请求

minion启动的时候会创建KEY
[root@linux-node2 ~]# ll /etc/salt/pki/minion/
total 12
-rw-r--r--. 1 root root 800 Feb 7 05:16 minion_www.sychzs.cn
-r--------. 1 root root 3247 Feb 7 05:16 minion.pem
-rw-r--r--. 1 root root 800 Feb 7 05:16 www.sychzs.cn

master启动的时候会创建KEY
[root@linux-node1 ~]# ll /etc/salt/pki/master/
total 28
-r--------. 1 root root 3243 Feb 7 17:39 master.pem
-rw-r--r--. 1 root root 800 Feb 7 17:39 www.sychzs.cn
drwxr-xr-x. 2 root root 4096 Feb 8 12:02 minions
drwxr-xr-x. 2 root root 4096 Feb 7 17:39 minions_autosign
drwxr-xr-x. 2 root root 4096 Feb 7 17:39 minions_denied
drwxr-xr-x. 2 root root 4096 Feb 7 17:39 minions_pre
drwxr-xr-x. 2 root root 4096 Feb 7 17:39 minions_rejected

先检查一下所有的key信息,发现没有等待统一的key(Unaccepted Keys下面没有信息)
[root@linux-node1 master]# salt-key
Accepted Keys:
minion-192-168-1-102
Unaccepted Keys:
Rejected Keys:

模拟等待同意的Key:把minions目录下的文件传输到minions_pre目录下
[root@linux-node1 ~]# ll /etc/salt/pki/master/minions
total 4
-rw-r--r--. 1 root root 800 Feb 8 12:02 minion-192-168-1-102
[root@linux-node1 ~]# cp /etc/salt/pki/master/minions/* /etc/salt/pki/master/minions_pre/
[root@linux-node1 ~]# ll /etc/salt/pki/master/minions_pre/
total 4
-rw-r--r--. 1 root root 800 Feb 8 12:07 minion-192-168-1-102

再次查看key,发现有了等待同意的key
[root@linux-node1 ~]# salt-key
Accepted Keys:
minion-192-168-1-102
Unaccepted Keys:
minion-192-168-1-102
Rejected Keys:

执行同意操作:-A选项表示全部同意
[root@linux-node1 ~]# salt-key -A
The following keys are going to be accepted:
Unaccepted Keys:
minion-192-168-1-102
Proceed? [n/Y] y
[root@linux-node1 ~]# salt-key //发现key已经被同意了
Accepted Keys:
minion-192-168-1-102
Unaccepted Keys:

如果不用上面的-A选项,可以使用-a选项,自定义匹配,也可以使用*通配符。上面命令也可以是:
[root@linux-node1 ~]# salt-key -a minion-*
The following keys are going to be accepted:
Unaccepted Keys:
minion-192-168-1-102
Proceed? [n/Y] y

通过认证的主机位置会发生改变,原本在minion_pre下面(yum install -y tree )
[root@linux-node1 ~]# tree /etc/salt/pki/master/
/etc/salt/pki/master/
├── master.pem
├── www.sychzs.cn
├── minions
│   └── minion-192-168-1-102
├── minions_autosign
├── minions_denied
├── minions_pre
└── minions_rejected

5 directories, 3 files

其实上面的master下面minion中的文件是minion端的公钥,同时在master认证通过的时候,master也偷偷的把他的公钥放到了minion端一份。用事实说话,在minion端上查看。
[root@linux-node2 ~]# ll /etc/salt/pki/minion/
总用量 12
-rw-r--r-- 1 root root 451 12月 28 23:11 minion_www.sychzs.cn
-r-------- 1 root root 1675 12月 28 23:03 minion.pem
-rw-r--r-- 1 root root 451 12月 28 23:03 www.sychzs.cn
----------------------------------------------------------------------------------------------------------------------------------------

相关文章

热门推荐