Saltstack自动化操作记录(1)-环境部署【转】
早期运维工作中用过稍微复杂的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运行模式
Local:本地,一台机器玩,不建议
Master/Minion:通过server/agent的方式进行管理,效率很高(批量管理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/(该路径在/etc/salt/minion里面设置)下自动生成minion.pem(private
key)和 minion.pub(public key),然后将 minion.pub发送给master。
2)master在接收到minion的public
key后,通过salt-key命令accept minion public
key,这样在master的/etc/salt/pki/master/minions下的将会存放以minion id命名的 public
key,然后master就能对minion发送指令了。
Master与Minion的连接
1)SaltStack
master启动后默认监听4505和4506两个端口。4505(publish_port)为saltstack的消息发布系统,4506(ret_port)为saltstack客户端与服务端通信的端口。如果使用lsof
查看4505端口,会发现所有的minion在4505端口持续保持在ESTABLISHED状态。
2)minion与master之间的通信模式如下
SaltStack基础环境安装与配置记录
英文文档参考:https://docs.saltstack.com/en/latest/
两台centos6.8系统的机器,其中:
192.168.1.101 linux-node1 做主控端 master
192.168.1.102 linux-node2 做被控端 minion
1)两台机器的主机名要固定统一,要能相互ping通
1
2
3
4
5
6
|
固定好master和minion机器名,然后在master机器上做hosts绑定: [root@linux-node1 ~] # cat /etc/hosts 127.0.0.1 localhost wutao localhost4 localhost4.localdomain4 ::1 localhost localhost.localdomain localhost6 localhost6.localdomain6 192.168.1.101 linux-node1 192.168.1.102 linux-node2 |
2)下面采用源码安装的方式
a) master端安装 (为了测试效果,服务端也安装minion)
[root@linux-node1 ~]# wget http://ftp.linux.ncsu.edu/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 install salt-master
[root@linux-node1 ~]# yum -y install salt-minion
[root@linux-node1 ~]# chkconfig salt-master on
[root@linux-node1 ~]# chkconfig salt-minion on
b) minion端安装
[root@linux-node2 ~]# wget http://ftp.linux.ncsu.edu/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
3)SaltStack配置
a)master端的配置
[root@linux-node1 ~]# vim /etc/salt/master //修改下面几行 (由于这个文件内容默认全部注释的,所以可以直接情清空该文件,然后复制下面内容。但是记住配置的格式不能错!!)
interface: 192.168.1.101 //绑定主控端master的ip,冒号后必须空一格
auto_accept: True //当该项配置成True时表示自动认证,就不需要手动运行salt-key命令进行证书信任
file_roots: //指定saltstack文件根目录位置
base: //前面必须留两个空格
- /srv/salt //前面必须留四个空格
[root@linux-node1 ~]# service salt-master start
Starting salt-master daemon: [ OK ]
[root@linux-node1 salt-2014.7.0]# netstat -ntlp
.......
tcp 0 0 192.168.1.101:4505 0.0.0.0:* LISTEN 12715/python
tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN 1356/master
tcp 0 0 192.168.1.101:4506 0.0.0.0:* LISTEN 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上添加TCP 4505、TCP 4506的规则,而在被控端monion上就无需配置防火墙
原因是被控端直接与主控端的zeromq建立长连接,接收广播到的任务信息并执行。
即master端的iptables里添加下面两台规则:
[root@linux-node1 ~]# iptables -A INPUT -p tcp -m state --state NEW -m tcp --dport 4505 -j ACCEPT
[root@linux-node1 ~]# iptables -A INPUT -p tcp -m state --state NEW -m tcp --dport 4506 -j ACCEPT
[root@linux-node1 ~]# iptables save
[root@linux-node1 ~]# /etc/init.d/iptables save
[root@linux-node1 ~]# /etc/init.d/iptables restart
b)minion端的配置(如果master端也想管控自己,可以配置自己的monion)
[root@linux-node2 ~]# vim /etc/salt/minion //修改下面几行
master: 192.168.1.101 //指定主控端master的ip地址,冒号后必须空一格
id: minion-192-168-1-102 //修改被控端monion主机识别id,建议使用主机名或ip来设置,冒号后必须空一格
[root@linux-node2 ~]# service salt-minion start
Starting salt-minion daemon: [ OK ]
[root@linux-node2 ~]# ps aux | 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使用说明(在master机器上操作)
sat-key命令说明:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
|
[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 Logging Options: 设置loggin选项会覆盖掉配置文件中对日志的配置. --log- file =LOG_FILE 指定日志文件路径,默认: /var/log/salt/key . --log- file -level=LOG_LEVEL_LOGFILE 日志文件等级,可设置下面中的一个值 'all' , 'garbage' , 'trace' , 'debug' , 'info' , 'warning' , 'error' , 'quiet' .默认: 'warning' . --key-logfile=KEY_LOGFILE 将所有的输出发送到指定的文件,默认: '/var/log/salt/key' --out=OUTPUT, --output=OUTPUT 把salt-key命令的输出信息发送给指定的outputer. 可设置为下面参数值 'no_return' , 'virt_query' . 'grains' , 'yaml' , 'overstatestage' , 'json' , 'pprint' , 'nested' , 'raw' , 'highstate' , 'quiet' , 'key' , 'txt' , --out-indent=OUTPUT_INDENT, --output-indent=OUTPUT_INDENT 设置输出行缩进的空格数. 负数取消输出缩进编排.仅对使用的outputer有效. --out- file =OUTPUT_FILE, --output- file =OUTPUT_FILE 把显示输出到指定的文件 --no-color, --no-colour 关闭字体颜色 --force-color, --force-colour 强制开启输出颜色渲染 -l ARG, --list=ARG 打印公钥key. 可设置下面三个值 "pre" , "un" , and "unaccepted" 会显示 不许可/未签名 keys. "acc" or "accepted" 会显示 许可/已签名 keys. "rej" or "rejected" 会显示拒绝的 keys. "all" 会显示所有 keys. -L, --list-all 会显示所有公钥,相当月: "--list all" -a ACCEPT, --accept=ACCEPT 许可指定的公钥(使用--include-all选项,可以指定除了挂起的key外的所有reject状态的公钥) -A, --accept-all 许可所有pending的公钥 -r REJECT, --reject=REJECT 拒绝指定的公钥 (使用--include-all选项可以指定除了挂起的key外的所有accept状态的公钥) -R, --reject-all 拒接所有pending的公钥 --include-all 配合 accepting /rejecting 选项使用,指定所有非pending状态的公钥 -p PRINT, --print=PRINT 打印指定的公钥 -P, --print-all Print all public keys -d DELETE, --delete=DELETE 根据公钥的名称删除公钥 -D, --delete-all 删除所有 keys -f FINGER, --finger=FINGER 打印指定key的指纹信息 -F, --finger-all 打印所有key的指纹信息 Key 常用选项: --gen-keys=GEN_KEYS 对生成的key配置设置一个salt使用的名称。 --gen-keys- dir =GEN_KEYS_DIR 设置生成key对的放置目录,默认当前目录。default=. --keysize=KEYSIZE 为生成key设置位数, 仅跟--gen-keys选项配合时有效,数值大小必须大于2048,否则会被提升至2048位,默认2048default=2048 |
a)查看当前的salt key信息
[root@linux-node1 ~]# salt-key -L //或者直接salt-key
Accepted Keys:
minion-192-168-1-102
Unaccepted Keys:
Rejected Keys:
b)测试被控主机的连通性
[root@linux-node1 ~]# salt '*' test.ping
minion-192-168-1-102:
True
c)远程命令执行(cmd模块),格式:salt 'client配置的id' 模块.方法 '命令参数' (其中'*'表示所有的client)
[root@linux-node1 ~]# salt '*' cmd.run 'uptime'
minion-192-168-1-102:
21:51:44 up 61 days, 16:44, 2 users, load average: 0.79, 0.55, 0.47
[root@linux-node1 ~]# salt 'minion-192-168-1-102' cmd.run 'uptime'
minion-192-168-1-102:
22:11:50 up 61 days, 17:05, 2 users, load average: 0.44, 0.59, 0.63
[root@linux-node1 ~]# salt 'minion-192-168-1-102' cmd.run 'w'
minion-192-168-1-102:
22:14:20 up 61 days, 17:07, 2 users, load average: 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-168-1-102' cmd.run '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 '*' cmd.run '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 '*' cmd.run 'touch /root/test'
minion-192-168-1-102:
[root@linux-node1 ~]# salt '*' cmd.run '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端的认证
1
2
3
4
5
6
|
当 /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_master.pub
-r--------. 1 root root 3247 Feb 7 05:16 minion.pem
-rw-r--r--. 1 root root 800 Feb 7 05:16 minion.pub
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 master.pub
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
├── master.pub
├── 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_master.pub
-r-------- 1 root root 1675 12月 28 23:03 minion.pem
-rw-r--r-- 1 root root 451 12月 28 23:03 minion.pub
转自
Saltstack自动化操作记录(1)-环境部署 - 散尽浮华 - 博客园 https://www.cnblogs.com/kevingrace/p/5570290.html
Saltstack自动化操作记录(1)-环境部署【转】的更多相关文章
- Saltstack自动化操作记录(1)-环境部署
早期运维工作中用过稍微复杂的Puppet,下面介绍下更为简单实用的Saltstack自动化运维的使用. Saltstack知多少Saltstack是一种全新的基础设施管理方式,是一个服务器基础架构集中 ...
- Saltstack自动化操作记录(2)-配置使用 【转】
之前梳理了Saltstack自动化操作记录(1)-环境部署,下面说说saltstack配置及模块使用: 为了试验效果,再追加一台被控制端minion机器192.168.1.118需要在master控制 ...
- Saltstack自动化操作记录(2)-配置使用
之前梳理了Saltstack自动化操作记录(1)-环境部署,下面说说saltstack配置及模块使用: 为了试验效果,再追加一台被控制端minion机器192.168.1.118需要在master控制 ...
- linux下用户操作记录审计环境的部署记录
通常,我们运维管理人员需要知道一台服务器上有哪些用户登录过,在服务器上执行了哪些命令,干了哪些事情,这就要求记录服务器上所用登录用户的操作信息,这对于安全维护来说很有必要.废话不多说了,下面直接记录做 ...
- 1、大型项目的接口自动化实践记录--robotframework环境搭建
因为人力.团队技术问题,选用robotframework来做自动化,首先说下环境搭建 齐涛道长的入门教程非常棒:http://blog.csdn.net/tulituqi/article/detail ...
- 002-Saltstack自动化操作记录(2)-配置使用
之前梳理了就是第一篇001,下面说说saltstack配置及模块使用: 为了试验效果,再追加一台被控制端minion机器192.168.1.118需要在master控制端机器上做好主机名映射关系 1 ...
- 基于 Jenkins + Kubernetes + Argo CD 的完整 DevOps 流程记录(1) - 环境部署
一.环境准备 1.1 镜像仓库 整套 DevOps 流程使用 Harbor 作为内部镜像仓库,所有构建产物(镜像)都会推送到 Harbor,以备后续进行项目部署.Harbor 从 2.x 版本开始支持 ...
- 使用Selenium进行浏览器自动化操作记录
一位经验丰富的同事交给了我一个任务:将20个IP地址添加到公司系统对应的目录下. 这个任务之前做过,并且数量是远不止20个,当时就学习Selenium并且使用Python3.6写了一个脚本用来自动化地 ...
- 2、大型项目的接口自动化实践记录--接口测试简介及RequestsLibrary关键字简介
1.接口测试简介 1)先简单介绍下接口测试,那么什么是接口测试呢? 百科的回答:接口测试是测试系统组件间接口的一种测试.接口测试主要用于检测外部系统与系统之间以及内部各个子系统之间的交互点. 看起来有 ...
随机推荐
- Divide Candies CodeForces - 1056B (数学)
Arkady and his friends love playing checkers on an n×nn×n field. The rows and the columns of the fie ...
- JEECG BOOT
JEECGBOOT - 开源搜索 - 开源中国https://www.oschina.net/search?scope=blog&q=JEECGBOOT JEECG 基于代码生成器J2EE智能 ...
- 【MongoDB异常】Exception authenticating MongoCredential解决方法
我们通过ideal编辑器编辑 springboot时候,出现这个错误: com.mongodb.MongoSecurityException: Exception authenticating Mon ...
- vue scoped >>> & git conflict <<<<<<< HEAD
vue scoped >>> & git conflict <<<<<<< HEAD Q: ???还有这操作 A: > > ...
- Conda常见命令
Anaconda,Miniconda,Conda,Pip的区别: Anaconda:用于科学计算的python发行版,里面预装好了conda,某个版本的python,众多packages,科学计算工具 ...
- macbook 入门
前面的话 第一次使用 Mac 之前,需要改变一些原有思维,不应该使用 Windows 的思维习惯去使用 Mac,Mac 会节省系统维护.清理杀毒.升级驱动等操作的时间,让我们可以专注做真正重要的事情, ...
- OpenJudge-bailian 3454 秦腾与教学评估
http://bailian.openjudge.cn/practice/3454?lang=en_US 题目 在秦腾进入北京大学学习的第一个学期,就不幸遇到了前所未有的教学评估.在教学评估期间,同学 ...
- 分别使用POI和JXL导出数据到Excel
1.使用POI 引入jar包 <!-- poi HSSF is our port of the Microsoft Excel 97(-2007) file format (BIFF8) to ...
- 【BZOJ4030】[HEOI2015]小L的白日梦
[BZOJ4030][HEOI2015]小L的白日梦 题面 BZOJ 洛谷 题解 要求的是最小的不开心连续段的期望. 然后发现自己就不会做了. 然后就可以来抄题解啦. 首先来猜性质: 第一个,一定是按 ...
- linux的/etc/profile、~/.profile、~/.bashrc、~./bash_profile这几个配置文件
在添加环境变量的时候,我们会去修改配置文件 如果留意过,网上博文,有些在/etc/profile文件中配置的,有些是在~./bash_profile文件中配置的,等等 那么,/etc/profile. ...