170SaltStack 运维通关手册--SaltStack 架构和配置

Salt 组件

Salt Master,中心管理系统。此系统用于将命令和配置发送到在受管系统上运行的 Salt minion。
Salt Minions,被管理的系统。该系统运行 Salt minion,它从 Salt master 接收命令和配置。
Exection Modules,从命令行针对一个或多个受管系统执行临时命令。 对以下管理场景有帮助:实时监控,状态和盘点;一次性命令和脚本;部署关键更新。
States,一种系统配置的声明性或命令式表示。
Grains,系统变量。 Grains 是有关底层受管系统的静态信息,包括操作系统,内存和许多其他系统属性。 您还可以为任何系统定义自定义 grains。
Pillar,用户定义的变量。 这些安全变量被定义并存储在 Salt Master 中,然后使用目标“分配”给一个或多个 minions。 pilla 数据存储诸如端口,文件路径、配置参数和密码之类的值。
Top File,将 states 和 pilla 数据与 Salt minions 匹配。
Runner,在 Salt master 上执行的模块,用于执行支持任务。 Salt runners 报告作业状态、连接状态、从外部 API 读取数据,查询连接的 Salt minions 等。例如,Orchestrate 运行器协调跨多个系统的配置部署。
Returners,将 Salt minions 返回的数据发送到另一个系统,例如数据库。 Salt Returners 可以在 Salt minion 或 Salt master 上运行。
Reactor,在 SaltStack 环境中发生特定事件时触发相应的响应。
Salt SSH,在没有部署 Salt minion 的系统上通过 SSH 运行 Salt 命令。

Salt 各组件的具体使用会在以后的文档中逐步介绍。

Salt 架构模式

Salt 多种运行模式。
master less,无 master 模式下,salt 进行自管理。
agent less,无 minion 模式下进行远程管理,类似 Ansible 。
c/s ,最常用模式,也会因 IT 架构衍生出 proxy 代理、syndic 代理。

Salt 的配置文件默认位于 /etc/salt/,FreeBSD 系统例外,配置文件位于 /usr/local/etc/salt。

Salt Agentless 模式,无 minion 运行

Salt 可以在远程主机没有安装 minion 的情况下通过 salt-ssh 命令调用 ssh 连接并操作远程服务器。
在这种情况下,salt-master 进程也无需启动。
在蓝桥云课环境下,我们使用了 pip3 进行安装,所以无需单独安装 salt-ssh。如果使用 yum 或者 apt 方式安装,需要额外进行 yum install salt-ssh 或者 apt install salt-ssh 安装模块。
agentless 模式运行流程
通过 SSH 连接到远程系统。
将 Salt 的瘦版本 agent 部署到临时目录,包括任何必需的文件。
运行指定的命令。
(可选)清理临时目录。

Agentless 模式下运行 Salt,依赖 ssh 进行连接,所以执行效率会低于 C/S 模式。
roster 文件
默认情况下,Salt 使用 YAML 文件来存储 agentless 系统的连接细节,称为 roster(字面含义为名册)。
一个基本的 roster 文件包含一个 ID,一个主机和一个用户的信息:

# 文件格式类似如下
ID:
  host: [IP or DNS name]
  user: [username]

修改 master 配置文件
编辑文件:/etc/salt/master,添加如下内容:

# master必须通过SSH去连接访问minion,roster 配置文件用来保存主机信息
roster_file: /etc/salt/roster
# salt-ssh 操作的日志文件,如果没有 /etc/salt/log 目录,请手动创建
# ssh_log_file: /etc/salt/log/salt-ssh.log

# salt-ssh 提供默认参数
roster_defaults:
  user: root
  sudo: True

# 使用 user home 目录下的key进行登录认证
ssh_use_home_key: True

# 指定 Salt 文件服务的根目录,调用时使用 salt://
file_roots:
  base:
    - /etc/salt/srv/salt/base

创建 file_roots 目录:

mkdir -p /etc/salt/srv/salt/base

Roster 配置主机信息
文件路径 /etc/salt/roster。

Group1: # 组名
  host: localhost # 主机地址
  user: root # 登录用户名
  priv: /root/.ssh/id_rsa # 使用私钥

测试前,需要先 生成免密登录的私钥。

mkdir ~/.ssh
# 生成私钥文件
ssh-keygen -t rsa -N '' -f ~/.ssh/id_rsa -q
# 复制文件
cp ~/.ssh/id_rsa.pub ~/.ssh/authorized_keys

测试 salt-ssh 操作,发送 ping 命令。

salt-ssh '*' test.ping -i

注意:第一次执行 ssh 操作,需要 -i 参数,否则会因 known_hosts 问题报错。

image.png

salt-ssh 调用 state 组件
state 组件描述了目标服务器该保持状态,调用该组件去连接服务器安装 state 描述的方案进行操作。
新建文件:/etc/salt/srv/salt/base/redis.sls。

# 该 sls 文件声明远程服务器应该安装 python-redis模块,安装并启动 redis
# 文件具体格式及声明方式后续文档会详细讲解,现在只是测试 salt-ssh 功能
redis: pip.installed

redis-server:
  pkg:
    - installed
  service.running:
    - require:
        - pkg: redis-server

执行命令。

# 参数 redis,salt 会查找 file_roots 目录下对应同名的 .sls
salt-ssh '*' state.apply redis -i
image.png

Salt masterless,无 master 环境,独立运行 minion

在 Salt 的无 master 环境下,minion 可以执行的任务。
在系统上使用 salt-call 命令而不与主机连接。
无 Master 的 states 管理,完全从当地的文件运行 states。

在无 master 模式下运行 Salt 时,请勿运行 salt-minion 守护进程。 否则,它将尝试连接到 Master 并失败。
salt-call 命令是独立的,不需要 salt-minion 守护进程。
salt-call 使用

salt-call test.ping --local

salt-call 命令调用 salt-call。
test.ping 其中 test 为模块名称,ping 为模块下功能名称。
--local 指定为本地调用。


image.png

如果在无 master 环境中使用 states 模块,需要在 /etc/salt/minion 文件配置 file_roots 参数。

file_roots:
  base:
    - /etc/salt/srv/salt/base

执行命令

salt-call state.apply redis --local

蓝桥云课环境为 Docker ,系统自带的服务管理模块无法使用,命令执行会有错误输出,但不会影响服务启动。
如果不想每次执行指定 --local,可以修改 /etc/salt/minion 文件,将 file_client 修改为 local。

# file_client: local
# 该参数默认为 remote,修该为 local
# salt 主要使用 c/s 架构,考虑到参数的影响,非必要参数大家不要修改

Salt C/S 架构

salt c/s 架构是最常用的,在该种模式下,salt 可以对上万台服务器进行部署和管理。以后的文档内容基本也将围绕 c/s 模式展开。

master 配置

以下是基本的 master 配置项,其余更多项目参数会在具体章节中使用。
interface
服务将要绑定的本地网络接口,必须是 IP 地址。

interface: 0.0.0.0

publish_port
设置消息发布接口使用的网络端口。

publish_port: 4505

master_id
在发布作业中传递给 minions 的 master id。 这用于 MultiSyndics 将作业返回给正确的发出请求的 master 服务器。

master_id: MasterOfMaster

注意:如果还使用到了 syndic 服务,则这必须与配置 syndic 的字符串相同。
user
用来运行 salt master 进程的系统用户。

user: root

ret_port
数据返回服务使用的端口,这是 Salt 用来接收执行返回数据和命令执行数据的服务。

ret_port: 4506

pki_dir
存放 pki 密钥的目录。

pki_dir: /etc/salt/pki/master

auto_accept
自动接受所有 minion 的认证请求,默认为 False 。

auto_accept: False

keep_jobs
设置保留旧作业信息的小时数。 请注意,将此选项设置为 0 会禁用缓存清理程序。

keep_jobs: 24

以上是 salt-master 配置文件中常见的几个,后续如果有更多需要修改,我们会单独提到。

minion 配置

以下是基本的 minion 配置项,其余更多项目参数会在具体章节中使用。
master
指定 master 服务器地址

master: 127.0.0.1
# 多master环境可以指定 master 列表
master:
  - address_1
  - address_2

master_type
定义 master 的服务类型, 可以是 str, failover, func 或者 disable.
如果此选项设置为故障转移,则 master 选项必须定义为一个 master 服务地址的列表。 然后,minion 将会按照列表中指定的顺序尝试每个 master,直到它成功连接。 还必须设置 master_alive_interval,这决定了 minion 将验证 master 的存活的频率。

master_type: failover

master_port
指定 master 服务的端口,注意这需要与 Salt Master 服务器上的 ret_port 选项一致。

master_port: 4506

publish_port
指定 master 发布服务器的端口,这需要与 Salt master 上的 publish_port 选项一致。

publish_port: 4505

root_dir
此目录将会被预先附加到以下选项的前面:pki_dir,cachedir,log_file,sock_dir 和 pidfile。

root_dir: /

pki_dir
指定存放 minion 的公私密钥的路径。

pki_dir: /etc/salt/pki/minion

id
明确声明此 minion 使用的 id。 由于 Salt 使用分离的 id,因此可以在同一台机器上运行多个 minions 但具有不同的 id。

id: shiyanlou

minion_id_caching
当 minion 配置中没有静态定义 minion 的 id 时,将 minion id 缓存到文件中。 当从系统中自动获取 minion id 的方案改变时,此设置可防止潜在问题,这可能导致 minion 失去与 master 的连接。 要关闭 minion id 缓存,请将此配置设置为 False。

minion_id_caching: True

grains
静态地为 minions 定义一些 grains 变量。

grains:
  roles:
    - webserver
    - memcache
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,457评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,837评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,696评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,183评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,057评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,105评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,520评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,211评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,482评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,574评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,353评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,213评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,576评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,897评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,174评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,489评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,683评论 2 335

推荐阅读更多精彩内容

  • saltstack 介绍 Salt 的定位一个配置管理系统,能够将远程节点维护在一个预定义的状态(例如,确保安装特...
    Jachin111阅读 455评论 0 1
  • saltstack介绍 关于Saltstack的介绍,简单一句话:整合了Puppet和 Chef的功能,更加强大,...
    bdslinux阅读 2,878评论 0 2
  • 一、初识运维 运维都做哪些事?1.机房设备上下架2.系统初始化3.应用环境初始化4.应用的部署 调试 配置 ...
    清风徐来_简阅读 2,037评论 0 2
  • 一、saltstack是什么? saltstack是一个开源异构平台基础设置管理工具。 二、saltstack能干...
    小宝瓜阅读 1,243评论 0 1
  • SaltStack 1. 什么是SaltStack 是基于Python开发的一套C/S架构配置管理工具(不仅仅是配...
    小宁静致远阅读 1,355评论 0 0