自动化运维SaltStack

太过爱你忘了你带给我的痛 2022-11-27 12:27 337阅读 0赞

自动化运维SaltStack

    1. SaltStack介绍
    • 1.1 自动化运维工具
    • 1.2 saltsatack的特点
    • 1.3 saltstack架构
    1. SaltStack四大功能与四大运行方式
    1. SaltStack组件介绍
    1. saltstack最小化安装
    • 4.1 在控制机上安装saltstack主控端软件
    • 4.2 在被控机上安装salt-minion客户端
    • 4.3 salt-minion和salt-master之间重新认证
    • 4.4 saltstack配置文件
    1. SaltStack认证机制
    • 5.1 salt-key常用选项
    1. SaltStack远程执行
    1. salt命令使用

     

1. SaltStack介绍


在这里插入图片描述      

1.1 自动化运维工具

作为一个运维人员,很大一部分工作是在业务的配置管理和状态维护以及版本发布上,而当业务场景及公司规模上了一定规模后,人为手工的去做这些工作将变得极其困难,此时我们将需要利用一些自动化运维的工具来达到批量管理的目的。

常用的自动化运维工具有:

  • puppet
  • ansible
  • saltstack

此三款属同类工具,皆可用来提高运维管理的效率,但它们又各有优势,目前主流的自动化运维工具是ansible和saltstack。其中ansible无需安装客户端,这是其最大的优势,而saltstack则需要安装客户端工具类似zabbix的agent。应用场景方面,ansible常用于小型企业,而saltstack则常用于中大型企业因为ansible无法并行执行saltstack可以并行。但不论其特点如何,本质上均属同类,所以只需要掌握一种即可轻松胜任运维工作。      

1.2 saltsatack的特点

  • 基于python开发的C/S架构配置管理工具
  • 底层使用ZeroMQ消息队列pub/sub方式通信
  • 使用SSL证书签发的方式进行认证管理,传输采用AES加密
    在这里插入图片描述      

1.3 saltstack架构

saltstack架构中服务器端叫Master,客户端叫Minion

MasterMinion端都是以守护进程的模式运行,一直监听配置文件里面定义的ret_port(接受minion请求)publish_port(发布消息)的端口。

Minion运行时会自动连接到配置文件里面定义的Master地址ret_port端口进行连接认证。

saltstack除了传统的C/S架构外,其实还有一种叫做masterless的架构,其不需要单独安装一台 master 服务器,只需要在每台机器上安装 Minion端,然后采用本机只负责对本机的配置管理机制服务的模式


在这里插入图片描述

     

2. SaltStack四大功能与四大运行方式


SaltStack有四大功能,分别是:

  • 远程执行
  • 配置管理/状态管理
  • 云管理(cloud)
  • 事件驱动  

SaltStack可以通过远程执行实现批量管理,并且通过描述状态来达到实现某些功能的目的。

SaltStack四大运行方式:

  • local本地运行
  • Master/Minion传统方式
  • Syndic分布式 <主控master(top master)可以控制一群master>
  • Salt ssh      

3. SaltStack组件介绍



























































组件 功能
Salt Master 用于将命令和配置发送到在受管系统上运行的Salt minion
Salt Minions 从Salt master接收命令和配置
Execution Modules 从命令行针对一个或多个受管系统执行的临时命令。对…有用:
1. 实时监控,状态和库存
2. 一次性命令和脚本
3. 部署关键更新
Formulas (States) 系统配置的声明性或命令式表示
Grains Grains 是有关底层受管系统的静态信息,包括操作系统,内存和许多其他系统属性。
Pillar 用户定义的变量。这些安全变量被定义并存储在Salt Master中,
然后使用目标“分配”给一个或多个Minion。
Pillar数据存储诸如端口,文件路径,配置参数和密码之类的值。
Top File 将Formulas (States)和Salt Pillar数据与Salt minions匹配。
Runners 在Salt master上执行的模块,用于执行支持任务。Salt runners报告作业状态,连接状态,
从外部API读取数据,查询连接的Salt minions等。
Returners 将Salt minions返回的数据发送到另一个系统,例如数据库。Salt Returners可以在Salt minion或Salt master上运行。
Reactor 在SaltStack环境中发生事件时触发反应。
Salt Cloud / Salt Virt 在云提供商/虚拟机管理程序上提供系统,并立即将其置于管理之下。
Salt SSH 在没有Salt minion的系统上通过SSH运行Salt命令。

     

4. saltstack最小化安装






















主机 IP 要安装的应用
master(控制机) 192.168.30.244/24 salt
salt-cloud
salt-master
salt-minion
salt-ssh
salt-syndic
minion(被控机) 192.168.30.245/24 salt-minion

   

4.1 在控制机上安装saltstack主控端软件

  1. 1.配置yum
  2. curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo
  3. sed -i -e '/mirrors.cloud.aliyuncs.com/d' -e '/mirrors.aliyuncs.com/d' /etc/yum.repos.d/CentOS-Base.repo
  4. sed -i 's/\$releasever/7/g' /etc/yum.repos.d/CentOS-Base.repo
  5. yum -y install wget vim
  6. wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
  7. rpm -ivh https://repo.saltstack.com/yum/redhat/salt-repo-latest-2.el7.noarch.rpm
  8. 2.下载应用
  9. yum -y install salt salt-cloud salt-master salt-minion salt-ssh salt-syndic
  10. 3.修改主控机的配置文件
  11. [root@master ~]# sed -i '/^#master:/a master: 192.168.30.244' /etc/salt/minion
  12. [root@master ~]# sed -n '/^master/p' /etc/salt/minion
  13. master: 192.168.30.244
  14. 4.开机自启,并启动
  15. [root@master ~]# systemctl enable --now salt-master salt-minion
  16. [root@master ~]# ss -anlt
  17. State Recv-Q Send-Q Local Address:Port Peer Address:Port
  18. LISTEN 0 128 *:22 *:*
  19. LISTEN 0 128 *:4505 *:*
  20. LISTEN 0 128 *:4506 *:*
  21. LISTEN 0 128 :::22 :::*

   

4.2 在被控机上安装salt-minion客户端

  1. 1.配置yum
  2. [root@minion ~]# rpm -ivh https://repo.saltstack.com/yum/redhat/salt-repo-latest-2.el7.noarch.rpm
  3. 2.下载应用
  4. [root@minion ~]# yum -y install salt-minion
  5. 3.修改被空机的配置文件
  6. [root@minion ~]# sed -i '/^#master:/a master: 192.168.30.244' /etc/salt/minion
  7. [root@minion ~]# sed -n '/^master/p' /etc/salt/minion
  8. master: 192.168.30.244
  9. 4.开机自启
  10. [root@minion ~]# systemctl enable --now salt-minion

   

4.3 salt-minion和salt-master之间重新认证

minion端:

  1. 如果之前认证过,请在master端删除之前认证的key,在做以下操作
  2. #如果要修改id,就要修改的key写进/etc/salt/minion_id
  3. [root@minion ~]# cat /etc/salt/minion_id
  4. 192.168.30.245
  5. #删掉minion存放masterkey的文件
  6. [root@minion ~]# rm -rf /etc/salt/pki/minion/minion_master.pub
  7. 重启服务
  8. [root@minion ~]# systemctl restart salt-minion


master端:

  1. #删掉之间的认证key
  2. [root@master ~]# salt-key -L
  3. Accepted Keys:
  4. Denied Keys:
  5. Unaccepted Keys:
  6. master
  7. minion
  8. Rejected Keys:
  9. [root@master ~]# salt-key -d minion
  10. The following keys are going to be deleted:
  11. Unaccepted Keys:
  12. minion
  13. Proceed? [N/y] y
  14. Key for minion minion deleted.
  15. #认证成功
  16. [root@master ~]# salt-key -Ay
  17. The following keys are going to be accepted:
  18. Unaccepted Keys:
  19. 192.168.30.245
  20. Key for minion 192.168.30.245 accepted.
  21. [root@master ~]# salt-key -L
  22. Accepted Keys:
  23. 192.168.30.245
  24. Denied Keys:
  25. Unaccepted Keys:
  26. Rejected Keys:

   

4.4 saltstack配置文件

saltstack的配置文件在/etc/salt目录

saltstack配置文件说明:


















配置文件 说明
/etc/salt/master 主控端(控制端)配置文件
/etc/salt/minion 受控端配置文件


配置文件/etc/salt/master默认的配置就可以很好的工作,故无需修改此配置文件。  

配置文件/etc/salt/minion常用配置参数

  • master:设置主控端的IP
  • id:设置受控端本机的唯一标识符,可以是ip也可以是主机名或自取某有意义的单词

在日常使用过程中,经常需要调整或修改Master配置文件,SaltStack大部分配置都已经指定了默认值,只需根据自己的实际需求进行修改即可。下面的几个参数是比较重要的

  • max_open_files:可根据Master将Minion数量进行适当的调整
  • timeout:可根据Master和Minion的网络状况适当调整
  • auto_accept和autosign_file:在大规模部署Minion时可设置自动签证
  • master_tops和所有以external开头的参数:这些参数是SaltStack与外部系统进行整合的相关配置参数

     

5. SaltStack认证机制


saltstack主控端是依靠openssl证书来与受控端主机认证通讯的,受控端启动后会发送给主控端一个公钥证书文件,在主控端用salt-key命令来管理证书。

salt-minion与salt-master的认证过程:

  • minion第一次启动时,会在/etc/salt/pki/minion/下自动生成一对密钥,然后将公钥发给master
  • master收到minion的公钥后,通过salt-key命令接受该公钥。此时master的/etc/salt/pki/master/minions目录将会存放以minion id命名的公钥,然后master就能对minion发送控制指令了    

    [root@master ~]# cd /etc/salt/pki/

  1. ##此时key在minions_pre文件下
  2. [root@master pki]# tree .
  3. .
  4. └── master
  5. ├── master.pem
  6. ├── master.pub
  7. ├── minions
  8. ├── minions_autosign
  9. ├── minions_denied
  10. ├── minions_pre
  11. ├── 192.168.30.245 *
  12. └── master *
  13. └── minions_rejected
  14. 6 directories, 4 files
  15. 接受key请求后
  16. [root@master pki]# salt-key -Ay
  17. The following keys are going to be accepted:
  18. Unaccepted Keys:
  19. 192.168.30.245
  20. master
  21. Key for minion 192.168.30.245 accepted.
  22. Key for minion master accepted.
  23. key文件在minions文件下
  24. [root@master pki]# tree .
  25. .
  26. └── master
  27. ├── master.pem
  28. ├── master.pub
  29. ├── minions
  30. ├── 192.168.30.245 *
  31. └── master *
  32. ├── minions_autosign
  33. ├── minions_denied
  34. ├── minions_pre
  35. └── minions_rejected
  36. 6 directories, 4 files

   

5.1 salt-key常用选项

  1. //salt-key常用选项
  2. -L //列出所有公钥信息
  3. ----------------------------------------
  4. -a minion //接受指定minion等待认证的key
  5. -A //接受所有minion等待认证的key
  6. ----------------------------------------
  7. -r minion //拒绝指定minion等待认证的key
  8. -R //拒绝所有minion等待认证的key
  9. ----------------------------------------
  10. -f minion //显示指定key的指纹信息
  11. -F //显示所有key的指纹信息
  12. ----------------------------------------
  13. -d minion //删除指定minion的key
  14. -D //删除所有minion的key
  15. ----------------------------------------
  16. -y //自动回答yes
  17. //列出所有公钥信息
  18. [root@master pki]# salt-key -L
  19. Accepted Keys:
  20. Denied Keys:
  21. Unaccepted Keys:
  22. master
  23. minion
  24. Rejected Keys:
  25. //接受 minion id为‘master’的公钥
  26. [root@master pki]# salt-key -a master
  27. The following keys are going to be accepted:
  28. Unaccepted Keys:
  29. master
  30. Proceed? [n/Y] Y
  31. Key for minion master accepted.
  32. [root@master pki]# salt-key -L
  33. Accepted Keys:
  34. master
  35. Denied Keys:
  36. Unaccepted Keys:
  37. minion
  38. Rejected Keys:
  39. //接受所有公钥
  40. [root@master pki]# salt-key -Ay
  41. The following keys are going to be accepted:
  42. Unaccepted Keys:
  43. minion
  44. Key for minion minion accepted.
  45. [root@master pki]# salt-key -L
  46. Accepted Keys:
  47. master
  48. minion
  49. Denied Keys:
  50. Unaccepted Keys:
  51. Rejected Keys:

   

6. SaltStack远程执行


  1. //测试指定受控制端‘minion’主机是否存活
  2. [root@master ~]# salt 'minion' test.ping
  3. minion:
  4. True
  5. //使用万能模块 cmd.run ##后面能任何非交互命令
  6. [root@master ~]# salt "minion" cmd.run 'mkdir /root/zyy' 命令要用‘’引起来
  7. minion:
  8. [root@minion ~]# ls
  9. zyy
  10. //下载软件
  11. [root@master ~]# salt 'minion' pkg.install tree
  12. minion:
  13. ----------
  14. tree:
  15. ----------
  16. new:
  17. 1.6.0-10.el7
  18. old:
  19. //测试所有受控端主机是否存活
  20. [root@master ~]# salt '*' test.ping
  21. minion:
  22. True
  23. master:
  24. True

   

7. salt命令使用


  1. //语法:salt [options] '<target>' <function> [arguments]
  2. //常用的options
  3. --version //查看saltstack的版本号
  4. --versions-report //查看saltstack以及依赖包的版本号
  5. -h //查看帮助信息
  6. -c CONFIG_DIR //指定配置文件目录(默认为/etc/salt/)
  7. -t TIMEOUT //指定超时时间(默认是5s)
  8. --async //异步执行
  9. -v //verbose模式,详细显示执行过程
  10. --username=USERNAME //指定外部认证用户名
  11. --password=PASSWORD //指定外部认证密码
  12. --log-file=LOG_FILE //指定日志记录文件
  13. //常用target参数
  14. -E //正则匹配
  15. -L //列表匹配
  16. -S //CIDR匹配网段
  17. -G //grains匹配
  18. --grain-pcre //grains加正则匹配
  19. -N //组匹配
  20. -R //范围匹配
  21. -C //综合匹配(指定多个匹配)
  22. -I //pillar值匹配
  23. //正则匹配
  24. [root@master ~]# salt -E 'mas*' test.ping
  25. master:
  26. True
  27. //列表匹配
  28. [root@master ~]# salt -L master,minion test.ping
  29. master:
  30. True
  31. minion:
  32. True
  33. //CIDR匹配网段
  34. [root@master ~]# salt -S '192.168.30.0/24' test.ping
  35. master:
  36. True
  37. minion:
  38. True
  39. //grains匹配
  40. [root@master ~]# salt -G 'os:redhat' test.ping
  41. master:
  42. True
  43. minion:
  44. True
  45. //组匹配
  46. [root@master ~]# salt -N redhat test.ping
  47. 192.168.69.202:
  48. True
  49. //此处的centos是一个组名,需要在master配置文件中定义nodegroups参数,且需要知道minion的id信 \
  50. //息才能将其定义至某个组中
  51. //综合匹配
  52. [root@master ~]# salt -C 'G@os:redhat or L@192.168.69.202' test.ping
  53. master:
  54. True
  55. minion:
  56. True
  57. //G@os:redhat or L@192.168.69.202是一个复合组合,支持使用and和or关联多个条件

发表评论

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

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

相关阅读

    相关 工具SaltStack

    一、概述 salt是一个异构平台基础设置管理工具,使用轻量级的通讯器ZMQ,用Python写成的批量管理工具,完全开源,遵守Apache2协议,与Puppet,Chef功能类