设为首页 收藏本站
查看: 2103|回复: 0

[经验分享] 安装saltstack-zero菌

[复制链接]

尚未签到

发表于 2018-7-31 08:09:56 | 显示全部楼层 |阅读模式
  笔记内容:安装saltstack
  笔记日期:2018-01-23


  • 24.1 自动化运维介绍
  • 24.2 saltstack安装
  • 24.3 启动saltstack服务
  • 24.4 saltstack配置认证
24.1 自动化运维介绍
  随着信息时代的持续发展,IT运维已经成为IT服务内涵中重要的组成部分。面对越来越复杂的业务,面对越来越多样化的用户需求,不断扩展的IT应用需要越来越合理的模式来保障IT服务能灵活便捷、安全稳定地持续保障,这种模式中的保障因素就是IT运维(其他因素是更加优越的IT架构等)。从初期的几台服务器发展到庞大的数据中心,单靠人工已经无法满足在技术、业务、管理等方面的要求,那么标准化、自动化、架构优化、过程优化等降低IT服务成本的因素越来越被人们所重视。其中,自动化最开始作为代替人工操作为出发点的诉求被广泛研究和应用。
  IT运维从诞生发展至今,自动化作为其重要属性之一已经不仅仅只是代替人工操作,更重要的是深层探知和全局分析,关注的是在当前条件下如何实现性能与服务最优化,同时保障投资收益最大化。自动化对IT运维的影响,已经不仅仅是人与设备之间的关系,已经发展到了面向客户服务驱动IT运维决策的层面,IT运维团队的构成,也从各级技术人员占大多数发展到业务人员甚至用户占大多数的局面。
  因此,IT运维自动化是一组将静态的设备结构转化为根据IT服务需求动态弹性响应的策略,目的就是实现IT运维的质量,降低成本。可以说自动化一定是IT运维最高层面的重要属性之一,但不是全部。
  传统运维的缺陷:


  • 传统运维效率低,大多工作人为完成
  • 传统运维工作繁琐,容易出错
  • 传统运维每日重复做相同的事情
  • 传统运维没有标准化流程
  • 传统运维的脚本繁多,不能方便管理
  自动化运维就是要解决上面所有问题。
  常见自动化运维工具:


  • Puppet (www.puppetlabs.com)基于rubby开发,c/s架构,支持多平台,可管理配置文件、用户、cron任务、软件包、系统服务等。 分为社区版(免费)和企业版(收费),企业版支持图形化配置。
  • Saltstack(官网 https://saltstack.com,文档docs.saltstack.com )基于python开发,c/s架构,支持多平台,比puppet轻量,在远程执行命令时非常快捷,因为Saltstack有一个消息队列。Saltstack配置和使用比puppet容易,能实现puppet几乎所有的功能。
  • Ansible (www.ansible.com )更加简洁的自动化运维工具,不需要在客户端上安装agent,基于python开发。可以实现批量操作系统配置、批量程序的部署、批量运行命令。
24.2 saltstack安装
  saltstack的官方介绍文档:

  https://docs.saltstack.com/en/latest/topics/index.html

  saltstack可以使用salt-ssh远程执行,类似ansible,也可以使用c/s模式,下面我们将讲述该种模式的使用,因为salt-ssh很少用到,c/s模式是最常用的。
  资源有限我这里只准备了两台机器,一台作为服务端一台作为客户端:


  • 192.168.77.130   服务端
  • 192.168.77.128   客户端
  1.分别设置两台机器的主机名,并且配置hosts文件,我这里是做实验所以设置的是临时的主机名:
  192.168.77.130   服务端:
  

[root@localhost ~]# hostname server  
[root@server ~]# vim /etc/hosts  # 增加以下两行
  
192.168.77.130 server
  
192.168.77.128 client
  

  192.168.77.128   客户端:
  

[root@localhost ~]# hostname client  
[root@client ~]# vim /etc/hosts  # 增加以下两行
  
192.168.77.130 server
  
192.168.77.128 client
  

  2.然后两台机器上都需要安装saltstack yum源:
  

yum install -y https://repo.saltstack.com/yum/redhat/salt-repo-latest-2.el7.noarch.rpm  

  3.服务端安装:
  

[root@server ~]# yum install -y salt-master salt-minion  

  4.客户端安装:
  

[root@client ~]# yum install -y salt-minion  

24.3 启动saltstack服务
  以上我们完成了客户端与服务的安装,安装完成后需要先在服务端编辑配置文件:
  

[root@server ~]# vim /etc/salt/minion  
master: server  # 在文件中找到master,然后配置主机名
  

  同样的客户端也需要进行这个操作:
  

[root@client ~]# vim /etc/salt/minion  
master: server  # 在文件中找到master,然后配置服务端的主机名
  

  然后启动客户端,客户端不会监听端口:
  

[root@client ~]# systemctl start salt-minion  
[root@client ~]# ps aux |grep salt
  
root       5593  0.5  0.5 285476 19536 ?        Ss   12:13   0:00 /usr/bin/python /usr/bin/salt-minion
  
root       5603  2.3  0.9 560680 36624 ?        Sl   12:13   0:00 /usr/bin/python /usr/bin/salt-minion
  
root       5611  0.0  0.4 401568 19104 ?        S    12:13   0:00 /usr/bin/python /usr/bin/salt-minion
  
root       5680  0.0  0.0 112660   964 pts/0    S+   12:13   0:00 grep --color=auto salt
  
[root@client ~]#
  

  接着启动服务端,不过我这里启动时报错了,master和minion都启动不了:
  

[root@server ~]# systemctl start salt-master  
Job for salt-master.service failed because the control process exited with error code. See "systemctl status salt-master.service" and "journalctl -xe" for details.
  
[root@server ~]# systemctl status salt-master.service
  
● salt-master.service - The Salt Master Server
  Loaded: loaded (/usr/lib/systemd/system/salt-master.service; disabled; vendor preset: disabled)
  Active: failed (Result: exit-code) since Tue 2018-01-23 20:07:41 CST; 1min 26s ago
  Docs: man:salt-master(1)
  file:///usr/share/doc/salt/html/contents.html
  https://docs.saltstack.com/en/latest/contents.html
  Process: 3903 ExecStart=/usr/bin/salt-master (code=exited, status=1/FAILURE)
  Main PID: 3903 (code=exited, status=1/FAILURE)
  

  
Jan 23 20:07:41 server salt-master[3903]: import salt.config as config
  
Jan 23 20:07:41 server salt-master[3903]: File "/usr/lib/python2.7/site-packages/salt/config/__init__.py", line 45...odule>
  
Jan 23 20:07:41 server salt-master[3903]: import psutil
  
Jan 23 20:07:41 server salt-master[3903]: File "/usr/lib64/python2.7/site-packages/psutil/__init__.py", line 89, i...odule>
  
Jan 23 20:07:41 server salt-master[3903]: import psutil._pslinux as _psplatform
  
Jan 23 20:07:41 server salt-master[3903]: AttributeError: 'module' object has no attribute '_pslinux'
  
Jan 23 20:07:41 server systemd[1]: salt-master.service: main process exited, code=exited, status=1/FAILURE
  
Jan 23 20:07:41 server systemd[1]: Failed to start The Salt Master Server.
  
Jan 23 20:07:41 server systemd[1]: Unit salt-master.service entered failed state.
  
Jan 23 20:07:41 server systemd[1]: salt-master.service failed.
  
Hint: Some lines were ellipsized, use -l to show in full.
  
[root@server ~]# systemctl start salt-minion
  
Job for salt-minion.service failed because the control process exited with error code. See "systemctl status salt-minion.service" and "journalctl -xe" for details.
  
[root@server ~]#
  

  解决办法:
  分析错误信息:从服务的报错信息中可以看到这主要的两句:
  

import psutil._pslinux as _psplatform  
AttributeError: 'module' object has no attribute '_pslinux'
  

  可以看到这是因为导入了psutil包中的_pslinux,但是_pslinux不存在,所以就报错了。解决的办法也很简单,重新下载安装psutil包即可,步骤如下:
  

[root@server ~]# wget https://pypi.python.org/packages/source/p/psutil/psutil-3.2.2.tar.gz  
[root@server ~]# tar zxvf psutil-3.2.2.tar.gz
  
[root@server ~]# cd psutil-3.2.2/
  
[root@server ~/psutil-3.2.2]# python setup.py install
  
[root@server ~/psutil-3.2.2]# echo $?
  
0
  
[root@server ~/psutil-3.2.2]#
  

  这时启动服务就正常了:
  

[root@server ~/psutil-3.2.2]# systemctl start salt-master  
[root@server ~/psutil-3.2.2]# systemctl start salt-minion
  
[root@server ~/psutil-3.2.2]# ps aux |grep salt
  
root       4220  0.0  1.9 387532 37120 ?        Ss   20:25   0:00 /usr/bin/python /usr/bin/salt-master
  
root       4229  0.0  1.0 315048 19816 ?        S    20:25   0:00 /usr/bin/python /usr/bin/salt-master
  
root       4235  0.0  1.6 468824 31252 ?        Sl   20:25   0:00 /usr/bin/python /usr/bin/salt-master
  
root       4236  0.0  1.8 392560 35228 ?        S    20:25   0:00 /usr/bin/python /usr/bin/salt-master
  
root       4239  0.3  2.7 415004 51016 ?        S    20:25   0:07 /usr/bin/python /usr/bin/salt-master
  
root       4240  0.0  1.6 387532 31200 ?        S    20:25   0:00 /usr/bin/python /usr/bin/salt-master
  
root       4241  0.0  1.7 764388 31956 ?        Sl   20:25   0:00 /usr/bin/python /usr/bin/salt-master
  
root       4248  0.0  2.2 482512 41836 ?        Sl   20:25   0:01 /usr/bin/python /usr/bin/salt-master
  
root       4249  0.0  2.2 482516 41828 ?        Sl   20:25   0:01 /usr/bin/python /usr/bin/salt-master
  
root       4250  0.0  2.2 482248 41784 ?        Sl   20:25   0:01 /usr/bin/python /usr/bin/salt-master
  
root       4251  0.0  2.2 482236 41768 ?        Sl   20:25   0:01 /usr/bin/python /usr/bin/salt-master
  
root       4252  0.0  2.2 482256 41812 ?        Sl   20:25   0:01 /usr/bin/python /usr/bin/salt-master
  
root       5428  0.0  1.0 287592 19592 ?        Ss   20:25   0:00 /usr/bin/python /usr/bin/salt-minion
  
root       5431  0.0  2.0 563292 37424 ?        Sl   20:25   0:00 /usr/bin/python /usr/bin/salt-minion
  
root       5439  0.0  1.0 406604 19832 ?        S    20:25   0:00 /usr/bin/python /usr/bin/salt-minion
  
root       9032  0.0  0.0 112652   956 pts/0    S+   21:00   0:00 grep --color=auto salt
  
[root@server ~/psutil-3.2.2]# netstat -lntp |grep python
  
tcp        0      0 0.0.0.0:4505            0.0.0.0:*               LISTEN      4235/python
  
tcp        0      0 0.0.0.0:4506            0.0.0.0:*               LISTEN      4241/python
  
[root@server ~/psutil-3.2.2]#
  

  4505端口是用来发布消息的,4506端口则是与客户端通信、传输数据的。

24.4 saltstack配置认证
  saltstack的服务端和客户端通信需要建立一个安全通道,传输过程需要加密,所以得配置认证,也是通过密钥对来加密解密的,说白了就是配置个密钥认证。
  minion在第一次启动时会在/etc/salt/pki/minion/下生成minion.pem和minion.pub,其中.pub为公钥,我们需要把公钥传输给master。
  

[root@client ~]# ls /etc/salt/pki/minion/  
minion.pem  minion.pub
  
[root@client ~]#
  

  master第一次启动时也会在/etc/salt/pki/master下生成密钥对,当master通过salt-key工具接收到minion传过来的公钥后,就会在/etc/salt/pki/master/minions/目录里存放刚刚接受的公钥,同时客户端也会接收master传过去的公钥,把它放在/etc/salt/pki/minion目录下,并命名为minion_master.pub。
  

[root@server ~]# ls /etc/salt/pki/master  
master.pem  master.pub  minions  minions_autosign  minions_denied  minions_pre  minions_rejected
  
[root@server ~]#
  

  借助salt-key工具来实现认证:
  

[root@server ~]# salt-key -a client  
The following keys are going to be accepted:
  
Unaccepted Keys:
  
client
  
Proceed? [n/Y] y
  
Key for minion client accepted.
  
[root@server ~]# ls /etc/salt/pki/master/minions    # 接收的公钥会存放在这个目录下
  
client
  
[root@server ~]#
  

  客户端也会接收到服务端传过去的公钥:
  

[root@client ~]# ls /etc/salt/pki/minion  
minion_master.pub  minion.pem  minion.pub
  
[root@client ~]#
  

  -A可以认证所有在Unaccepted Keys下的客户端:
  

[root@server ~]# salt-key -A  
The following keys are going to be accepted:
  
Unaccepted Keys:
  
server
  
Proceed? [n/Y] y
  
Key for minion server accepted.
  
[root@server ~]#
  

  这时候就都认证成功了,直接执行salt-key命令可以查看所有状态下的主机(客户端):
DSC0000.jpg

  salt-key命令用法:


  • -a  后面跟主机名,认证指定主机
  • -A 认证所有主机
  • -r  跟主机名,拒绝指定主机
  • -R  拒绝所有主机
  • -d 跟主机名,删除指定主机认证
  • -D 删除全部主机认证
  • -y 省略掉交互,相当于直接按了y

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-543839-1-1.html 上篇帖子: SaltStack简单的安装 下篇帖子: saltstack 报错 Minion did not return. [No response]
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表