SaltStack--快速入门(很棒的一篇文章)

超、凢脫俗 2022-11-10 03:56 288阅读 0赞

目录

saltstack快速入门#

saltstack介绍#

Saltstack原理#

快速安装#

SaltStack认证方式#

Saltstack远程执行#

Saltstack配置管理#

Saltstack常用配置#


saltstack快速入门#

saltstack介绍#

Salt,一种全新的基础设施管理方式,部署轻松,在几分钟内可运行起来,扩展性好,很容易管理上万台服务器,速度够快,服务器之间秒级通讯

主要功能
远程执行
配置管理
Stalstack官方文档

Saltstack原理#

Salt使用server-agent通信模型,服务端组件被称为Salt masteragent被称为Salt minion
Salt master主要负责向Salt minions发送命令,然后聚合并显示这些命令的结果。一个Salt master可以管理多个minion系统
Salt serverSalt minion通信的连接由Salt minion发起,这也意味着Salt minion上不需要打开任何传入端口(从而减少攻击)。Salt server使用端口45054506,必须打开端口才能接收到访问连接

d00e6853b7ccab2768edeb395b567124.png

  • Publisher (端口4505)所有Salt minions都需要建立一个持续连接到他们收听消息的发布者端口。命令是通过此端口异步发送给所有连接,这使命令可以在大量系统上同时执行。

  • Request Server (端口4506)Salt minios根据需要连接到请求服务器,将结果发送给Salt master,并安全地获取请求的文件或特定minion相关的数据值(称为Salt pillar)。连接到这个端口的连接在Salt masterSalt minion之间是1:1(不是异步)。

  1. [root@salt-master ~]# lsof -i:4505
  2. COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
  3. salt-mast 81121 root 16u IPv4 304019 0t0 TCP *:4505 (LISTEN)
  4. salt-mast 81121 root 18u IPv4 304082 0t0 TCP salt-master:4505->salt-minion03:37240 (ESTABLISHED)
  5. salt-mast 81121 root 19u IPv4 307610 0t0 TCP salt-master:4505->salt-minion01:47804 (ESTABLISHED)
  6. salt-mast 81121 root 20u IPv4 307611 0t0 TCP salt-master:4505->salt-minion02:58594 (ESTABLISHED)

快速安装#

1.1 配置 yum 仓库

  1. # 使用官方自带yum
  2. [root@salt-master ~]# yum install https://repo.saltstack.com/yum/redhat/salt-repo-latest.el7.noarch.rpm
  3. # 或者使用阿里云的yum(建议使用阿里云的,速度快一点)
  4. [root@salt-master ~]# yum -y install https://mirrors.aliyun.com/saltstack/yum/redhat/salt-repo-latest-2.el7.noarch.rpm
  5. [root@salt-master ~]# sed -i "s/repo.saltstack.com/mirrors.aliyun.com\/saltstack/g" /etc/yum.repos.d/salt-latest.repo
  6. [root@salt-master ~]# yum clean all
  7. [root@salt-master ~]# yum makecache

1.2 安装Master,并启动服务

  1. [root@salt-master ~]# yum -y install salt-master
  2. [root@salt-master ~]# systemctl enable salt-master
  3. [root@salt-master ~]# systemctl start salt-master

1.3 安装 Salt-Minion 指向 Salt-Master 网络地址

  1. [root@salt-minion01 ~]# yum -y install salt-minion
  2. # 可以使用主机名,也可以使用IP地址
  3. [root@salt-minion01 ~]# cp /etc/salt/minion{,.back}
  4. [root@salt-minion01 ~]# sed -i '/#master: /c\master: salt-master' /etc/salt/minion
  5. [root@salt-minion01 ~]# systemctl enable salt-minion
  6. [root@salt-minion01 ~]# systemctl start salt-minion

SaltStack认证方式#

5b074ba93aa63dd607d428c0d6011b76.png

Salt 的数据传输是通过 AES 加密,MasterMinion 之前在通信之前,需要进行认证。
Salt 通过认证的方式保证安全性,完成一次认证后,Master 就可以控制 Minion 来完成各项工作了。

  1. minion 在第一次启动时候,会在 /etc/salt/pki/minion/ 下自动生成 minion.pem(private key)minion.pub(public key), 然后将 minion.pub 发送给 master
  2. master 在第一次启动时,会在 /etc/salt/pki/master/ 下自动生成 master.pemmaster.pub ;并且会接收到 minionpublic key , 通过 salt-key 命令接收 minion public key, 会在 master/etc/salt/pki/master/minions目录下存放以 minion id 命令的 public key ;验证成功后同时 minion 会保存一份 master public key 在 minion 的 /etc/salt/pki/minion/minion_master.pub里。

Salt认证原理总结

  1. minion将自己的公钥发送给master
  2. master认证后再将自己的公钥也发送给minion

Master端认证示例

1)根据上面提到的认证原理,先看下未认证前的masterminionpki目录

  1. # master上查看
  2. [root@salt-master ~]# tree /etc/salt/pki/
  3. /etc/salt/pki/
  4. ├── master
  5. ├── master.pem
  6. ├── master.pub
  7. ├── minions
  8. ├── minions_autosign
  9. ├── minions_denied
  10. ├── minions_pre
  11. └── salt-minion01
  12. └── minions_rejected
  13. └── minion
  14. # minion上查看
  15. [root@salt-minion01 ~]# tree /etc/salt/pki/
  16. /etc/salt/pki/
  17. ├── master
  18. └── minion
  19. ├── minion.pem
  20. └── minion.pub

2)salt-key命令解释:

  1. [root@salt-master ~]# salt-key -L
  2. Accepted Keys: #已经接受的key
  3. Denied Keys: #拒绝的key
  4. Unaccepted Keys: #未加入的key
  5. Rejected Keys: #吊销的key
  6. #常用参数
  7. -L #查看KEY状态
  8. -A #允许所有
  9. -D #删除所有
  10. -a #认证指定的key
  11. -d #删除指定的key
  12. -r #注销掉指定key(该状态为未被认证)
  13. #配置master自动接受请求认证(master上配置 /etc/salt/master)
  14. auto_accept: True

3)salt-key认证

  1. #列出当前所有的key
  2. [root@salt-master ~]# salt-key -L
  3. Accepted Keys:
  4. Denied Keys:
  5. Unaccepted Keys:
  6. salt-minion01
  7. Rejected Keys:
  8. #添加指定minion的key
  9. [root@salt-master ~]# salt-key -a salt-minion01 -y
  10. The following keys are going to be accepted:
  11. Unaccepted Keys:
  12. salt-minion01
  13. Key for minion salt-minion01 accepted.
  14. #添加所有minion的key
  15. [root@salt-master ~]# salt-key -A -y
  16. [root@salt-master ~]# salt-key -L
  17. Accepted Keys:
  18. salt-minion01
  19. Denied Keys:
  20. Unaccepted Keys:
  21. Rejected Keys:

4)上面认证完成后再次查看masterminionpki目录

  1. # master上
  2. [root@salt-master ~]# tree /etc/salt/pki/
  3. /etc/salt/pki/
  4. ├── master
  5. ├── master.pem
  6. ├── master.pub
  7. ├── minions
  8. └── salt-minion01
  9. ├── minions_autosign
  10. ├── minions_denied
  11. ├── minions_pre
  12. └── minions_rejected
  13. └── minion
  14. # minion上
  15. [root@salt-minion01 ~]# tree /etc/salt/pki/
  16. /etc/salt/pki/
  17. ├── master
  18. └── minion
  19. ├── minion_master.pub
  20. ├── minion.pem
  21. └── minion.pub

Saltstack远程执行#

远程执行是 Saltstack 的核心功能之一。主要使用 salt 模块批量给选定的 minion 端执行相应的命令,并获得返回结果。

1、判断 saltminion 主机是否存活

  1. [root@salt-master ~]# salt '*' test.ping
  2. salt-minion02:
  3. True
  4. salt-minion03:
  5. True
  6. salt-minion01:
  7. True
  8. # salt saltstack自带的一个命令
  9. # * 表示目标主机,这里表示所有目标主机
  10. # test.ping test是saltstack中的一个模块,ping则是这个模块下面的一个方法

2、saltstack使用 cmd.run模块远程执行shell命令

  1. #在指定目标minion节点运行uptime命令
  2. [root@salt-master ~]# salt 'salt-minion02' cmd.run 'uptime'
  3. salt-minion02:
  4. 18:13:08 up 28 min, 2 users, load average: 0.00, 0.04, 0.13

Saltstack配置管理#

Salt 通过State模块来进行文件的管理;通过YAML语法来描述,后缀是.sls的文件

1、了解 YAML 参考:http://docs.saltstack.cn/topics/yaml/index.html

  1. remove vim:
  2. pkg.removed:
  3. - name: vim
  • 带有ID和每个函数调用的行都以冒号(:)结束。
  • 每个函数调用在ID下面缩进两个空格。
  • 参数作为列表传递给每个函数。
  • 每行包含函数参数的行都以两个空格缩进开头,然后是连字符,然后是一个额外的空格。
  • 如果参数采用单个值,则名称和值位于由冒号和空格分隔的同一行中。
  • 如果一个参数需要一个列表,则列表从下一行开始,并缩进两个空格

    2、配置sals ,定义环境 参考文档

  1. # 定义环境目录
  2. [root@salt-master ~]# vim /etc/salt/master
  3. file_roots:
  4. base:
  5. - /srv/salt/base
  6. dev:
  7. - /srv/salt/dev
  8. prod:
  9. - /srv/salt/prod
  10. # 创建上面定义的目录
  11. [root@salt-master ~]# mkdir -p /srv/salt/{base,dev,prod}
  12. # 重启服务
  13. [root@salt-master ~]# systemctl restart salt-master

3、编写第一个sls文件

  1. # 在base环境下编写第一个安装apache的sls文件
  2. [root@salt-master ~]# cd /srv/salt/base/
  3. [root@salt-master base]# cat apache.sls
  4. apache-install:
  5. pkg.installed:
  6. - name: httpd
  7. apache-service:
  8. service.running:
  9. - name: httpd
  10. - enable: True
  11. # 在dev环境下编写一个安装ftp的sls文件
  12. [root@salt-master base]# cd /srv/salt/dev/
  13. [root@salt-master dev]# cat vsftpd.sls
  14. vsftpd-install:
  15. pkg.installed:
  16. - name: vsftpd
  17. vsftpd-service:
  18. service.running:
  19. - name: vsftpd
  20. - enable: True

4、使用salt命令的state状态模块让minion应用配置

  1. # 让所有的minion都安装apache(由于salt默认的环境就是base,所以可以直接在后面指定调用的apache.sls文件,不要后缀sls)
  2. [root@salt-master ~]# salt '*' state.sls apache
  3. # 让所有的minion都安装vsftpd(saltenv指定环境)
  4. [root@salt-master ~]# salt '*' state.sls vsftpd saltenv=dev

5、使用salt的高级状态使不同主机应用不同的配置

  1. # topfile入口文件只能放在base环境
  2. [root@salt-master ~]# cat /srv/salt/base/top.sls
  3. base:
  4. 'salt-minion01':
  5. - apache
  6. 'salt-minion03':
  7. - apache
  8. dev:
  9. 'salt-minion02':
  10. - vsftpd
  11. 'salt-minion03':
  12. - vsftpd

6、使用salt命令执行高级状态,会将top.sls当做入口文件,进行调用

  1. # 将高级状态应用到所有主机
  2. [root@salt-master ~]# salt '*' state.highstate

Saltstack常用配置#

1、Salt Master配置
Salt Master端的配置文件/etc/salt/master,常用配置如下:

  1. interface: //指定bind 的地址(默认为0.0.0.0)
  2. publish_port: //指定发布端口(默认为4505)
  3. ret_port: //指定结果返回端口, 与minion配置文件中的master_port对应(默认为4506)
  4. user: //指定master进程的运行用户,如果调整, 则需要调整部分目录的权限(默认为root)
  5. timeout: //指定timeout时间, 如果minion规模庞大或网络状况不好,建议增大该值(默认5s)
  6. keep_jobs: //minion执行结果返回master, master会缓存到本地的cachedir目录,该参数指定缓存多长时间,可查看之间执行结果会占用磁盘空间(默认为24h)
  7. job_cache: //master是否缓存执行结果,如果规模庞大(超过5000台),建议使用其他方式来存储jobs,关闭本选项(默认为True)
  8. file_recv : //是否允许minion传送文件到master 上(默认是Flase)
  9. file_roots: //指定file server目录, 默认为:
  10. file_roots:
  11. base:
  12. - /srv/salt
  13. pillar_roots : //指定pillar 目录, 默认为:
  14. pillar_roots:
  15. base:
  16. - /srv/pillar
  17. log_level: //日志级别
  18. 支持的日志级别有'garbage', 'trace', 'debug', info', 'warning', 'error', ‘critical ’ ( 默认为’warning’)

2、Salt Minion端的配置文件/etc/salt/minion,常用配置如下:

  1. master: //指定master 主机(默认为salt)
  2. master_port: //指定认证和执行结果发送到master的哪个端口, 与master配置文件中的ret_port对应(默认为4506)
  3. id: //指定本minion的标识, salt内部使用id作为标识(默认为主机名)
  4. user: //指定运行minion的用户.由于安装包,启动服务等操作需要特权用户, 推荐使用root( 默认为root)
  5. cache_jobs : //minion是否缓存执行结果(默认为False)
  6. backup_mode: //在文件操作(file.managed 或file.recurse) 时, 如果文件发送变更,指定备份目录.当前有效
  7. providers : //指定模块对应的providers, 如在RHEL系列中, pkg对应的providers 是yumpkg5
  8. renderer: //指定配置管理系统中的渲染器(默认值为:yaml_jinja )
  9. file_client : //指定file clinet 默认去哪里(remote 或local) 寻找文件(默认值为remote)
  10. loglevel: //指定日志级别(默认为warning)
  11. tcp_keepalive : //minion 是否与master 保持keepalive 检查, zeromq3(默认为True)

saltstack远程执行

saltstack配置管理

saltstack数据系统

saltstack状态判断

saltstack使用salt-ssh

作者:别来无恙-

出处:https://www.cnblogs.com/yanjieli/p/10864648.html

版权:本作品采用「署名-非商业性使用-相同方式共享 4.0 国际」许可协议进行许可。

发表评论

表情:
评论列表 (有 0 条评论,288人围观)

还没有评论,来说两句吧...

相关阅读