SaltStack 自动化运维

SaltStack (salt)是一种新的基础设施管理方法开发软件、简单易部署、可伸缩的足以管理成千上万的服务器,和足够快的速度控制,与他们交流,以毫秒为单位。SaltStack 提供了一个动态基础设施通信总线用于编排、远程执行、配置管理等

SaltStack 是一个服务器基础架构集中化管理平台,具备配置管理、远程执行、监控等功能,基于 Python 语言实现,结合轻量级消息队列(ZeroMQ)与 Python 第三方模块(Pyzmq、PyCrypto、Pyjinjia2、python-msgpack 和 PyYAML等)构建。

# salt docs

https://docs.saltstack.com/en/latest/

SaltStack 特性

(1)、部署简单、方便

(2)、支持大部分 UNIX/Linux 及 Windows 环境

(3)、主从集中化管理

(4)、配置简单、功能强大、扩展性强

(5)、主控端(master)和被控端(minion)基于证书认证,安全可靠

(6)、支持 API 及自定义模块,可通过 Python 轻松扩展

SaltStack 服务架构(C/S)

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

部署环境:Debian 11

官网 Debian 下载文档:https://docs.saltproject.io/salt/install-guide/en/latest/topics/install-by-operating-system/debian.html#install-debian

# 配置 apt source

 # 安装 salt

root@master:~# apt-get update

root@master:~# apt-get -y install salt-master salt-ssh salt-syndic salt-cloud salt-api

root@minion:~# apt-get update

root@minion:~# apt-get -y install salt-minion salt-ssh salt-syndic salt-cloud salt-api 

# 启动 salt 服务

root@master:~# systemctl enable salt-master salt-syndic salt-api --now

root@minion:~# systemctl enable salt-minion salt-syndic salt-api --now

# 查看监听端口和 salt-key 

# 由于 salt 的默认管理方式不是 ssh,所以 salt 关于此套 C/S 架构有专门的实现安全通信的方法,salt-key 就是实现 master 和 minion 安全通信的密钥

# salt-minion 配置 (172.16.201.11 为 master 节点 IP)

# salt-minion 的日志在 /var/log/salt/minion 

# 在配置文件中修改 master 看到的 minion 名字

# key 的4种定义

  • AcceptedKeys: 表示获得 salt 认可的 key
  • DeniedKeys: 表示 salt 拒绝的 key(salt 自动操作产生的结果)
  • UnacceptedKeys: 表示未获得 salt 认可的 key
  • RejectedKeys: salt 吊销的 key(salt 手工操作产生的结果)

# salt-key 的目录树

# 查看 key 的指纹,只有 key 指纹一致时 master 和 minion 才可以通信

# remove key

# 删除旧 id 对应的 key , -d 表示删除 key,-y 表示确认删除

# 删除全部 key

root@master:~# salt-key -D -y

# 拒绝 minion 所有的 key

root@master:~# salt-key -R -y

# 恢复拒绝的 key

root@master:~# rm -rf /etc/salt/pki/master/minions_rejected/*

# 接受 minion 的 key

# -a 参数表示接受单个 key

# -A 参数表示接受所有的 key

# master 自动接受 minion key

# key 的黑白名单设置

# autosign_file 表示白名单,autoreject_file 表示黑名单

# salt-adhoc 测试

# salt 是核心命令,'*' 表示所有的 target,匹配所有被管理主机。test.ping 表示 salt 远程执行的一个模块中的一个用法,在这里面就表示的是 test (module) 模块里面的 ping

 # salt 的命令结构

    salt  参数  执行目标  salt模块的函数  远程执行的参数

例如:

 # salt 一次性进行多次远程执行命令

# 列出 salt 命令的所有模块

root@master:~# salt debian11 sys.list_modules

# 列出某个模块下的函数 (以 cmd 模块为例)

# 设置 salt 远程执行结果的输出格式

# 查看 service 模块中 status 函数的用法文档

salt debian11 sys.doc service.status

# 查看所有远程主机 sshd 服务的状态

salt '*' service.status sshd

# 设置 sshd 服务下次开机不自动启动

salt '*' service.disable sshd

# 为 debian11 创建用户组并设置 gid 为 3456

salt debian11 group.add foo 3456

# 查看 debian11 远程主机 foo 用户组信息

salt debian11 group.info foo

# debian11 的 foo 用户组添加 test1 用户

salt debian11 group.adduser test1

# debian11 删除 foo 用户组

salt debian11 group.delete foo

# debian11 创建 sysop 用户并设置 uid 为 5678 

salt debian11 user.add sysop 5678

# debian11 安装 tmux 

salt debian11 pkg.install tmux

# debian11 卸载 apache2

salt debian11 pkg.remove apache2

# 从 salt-master 拷贝文件到所有 salt-minion

salt-cp '*' /root/salt-file /root

# 收集 debian11 的静态信息,类似于 ansible 的 setup 模块

salt debian11 grains.items --out=json

# 修改 salt-master 配置文件

# 在配置文件中定义了4个环境,分别是 base 环境,test 环境,dev 环境,prod 环境。必须要将写的状态文件(粗浅的理解为 ansible playbook)放入配置文件中指定的4个环境的路径中。在配置中定义的路径是这该环境的根路径,根路径下面还可以有子路径(子目录)

root@master:~# egrep -v '^#|^$' /etc/salt/master

auto_accept:true

file_roots:

  base:

    -/srv/salt/base

  test:

    -/srv/salt/test

  dev:

    -/srv/salt/dev

  prod:

    -/srv/salt/prod

# 创建对应的状态文件环境目录并重启服务生效

root@master:~# mkdir -p /srv/salt/{base,test,dev,prod} 

root@master:~# systemctl restart salt-master

# salt 运维最重要的就是写 sls (salt state, 状态文件),和 ansible 的 playbook 一样都采用 yaml 文件格式

posted @ 2023-07-05 16:06  demoduan  阅读(43)  评论(0编辑  收藏  举报