169SaltStack 运维通关手册--SaltStack 介绍及安装

saltstack 介绍

Salt 的定位
一个配置管理系统,能够将远程节点维护在一个预定义的状态(例如,确保安装特定的软件包并运行特定的服务)。
一个分布式远程执行系统,用于在远程节点上单独或通过任意选择标准来执行命令和查询数据。

Salt 通过简单的配置部署快速处理大量信息,实现对众多服务器、复杂业务环境、差异化配置推送、服务管理等功能,减少运维人员的干预,避免人工误操作。
简单性
在大规模部署和小型系统之间提供多功能操作,无论项目规模如何,Salt 的设置和维护都非常简单。 Salt 的体系结构旨在与任意数量的服务器协同工作,从少数本地网络系统到跨不同数据中心的部署。 拓扑结构是一个简单的服务器/客户端模型,其中所需的功能内置于一组守护进程中。 默认配置几乎不需要修改,但可以对 Salt 进行微调以满足特定需求。
以下是 Salt 的几项核心功能
使管理命令能够并行地而不是串行地在远程系统中执行。
使用安全和加密的协议。
使用尽可能最小和最快的网络负载。
提供简单的编程接口。

安装

环境安装
首先我们需要切换到 root 用户下,后续的实验内容都默认在 root 用户执行,开始实验前请自行切换至 root 用户。同时为规避不同版本的问题,使用 pip3 进行安装并指定版本。

# 自行设置一个 root 密码
sudo passwd root
# 切换到 root 用户
su -l root
# 安装 salt 包,-i 指定源 --trusted-host 忽略证书相关问题
# 该方式会安装所有 salt 组件
pip3 install "salt==3002" -i http://mirrors.cloud.aliyuncs.com/pypi/simple/ --trusted-host mirrors.cloud.aliyuncs.com

其他环境安装,环境里可直接跳过
CentOS Salt Master 安装。

yum -y install salt-master

CentOS Salt Minioin 安装。

yum -y install salt-minion

Ubuntu Salt Master 安装。

sudo apt -y install salt-master

Ubuntu Salt minion 安装。

sudo apt -y install salt-minion

注意
蓝桥云课环境为 Ubuntu 的 Docker 环境,但因为定制环境,不要使用 Ubuntu 通用方式安装,否则会出现依赖包版本问题无法正常运行。
Master 为 Salt 软件的控制端,Minion 为远程服务器,Salt 通过 master 控制操作 minion。

简单配置 master

创建目录 /etc/salt,然后创建 master 配置文件 /etc/salt/master。

mkdir /etc/salt
vim /etc/salt/master
# 监听所有ip地址
interface: 0.0.0.0

file_ignore_glob:
  - "*.pyc"
  - "*/somefolder/*.bak"
  - "*.swp"

配置 minion
修改或新建 minion 配置文件 /etc/salt/minion

# 指定 salt-master 地址,为方便调试,实验环境我们指定为 127.0.0.1
master: 127.0.0.1
# 该参数用于指定主机的唯一 ID
id: www.sublimetext.com

启动 Salt 进程
蓝桥云课环境启动方式。

# 蓝桥云课环境为 docker 环境,只能以这种方式启动,提示升级 Python 版本可以忽略。
# -d 参数表示后台执行,否则占用终端
# -l info 表示日志记录级别
salt-master -d -l info
salt-minion -d -l info

注意,后续课程如果新打开环境注意自行执行这两个命令启动 salt。
ubuntu 和 centos7 启动方式。

systemctl start salt-master
systemctl start salt-minion

添加 minion 主机到 master 的控制列表里
master 和 minion 启动后,minion 会向 master 请求进行认证,master 通过 salt-key 命令进行相关操作。
查看所有 key

salt-key -L
# 已接受的 key
Accepted Keys:
# 拒绝的 key
Denied Keys:
# 未接受(未处理)的 key
Unaccepted Keys:
www.sublimetext.com
# 退回的 key
Rejected Keys:

image.png

salt-key 操作命令
-A 接受所有 key
-y 同意操作,如果没有该参数会有交互
-a 接受某一个 minion
-R 拒绝所有 minion
-r 拒绝某一个 minion
-D 删除所有已接收的 minion
-d 删除某一个已接受的 minion

salt-key -A -y

接受 minion key 后。

image.png

调用 Salt 模块进行主机操作
测试 master 与 minion 之间的联通性:

salt '*' test.ping

调用 cmd 模块执行命令:

salt '*' cmd.run ls /tmp/

image.png

调用执行函数:

# 调用 disk 磁盘模块
salt '*' disk.usage
www.sublimetext.com:
    ----------
    /:
        ----------
        1K-blocks:
            12254384
        available:
            3008320
        capacity:
            75%
        filesystem:
            /dev/mapper/docker-252:17-524289-e6c0b20dee77c03275e9d7aae37958098f36115fc5c37ddae4f9614b697dc1df
        used:
            8600536
    /dev:
        ----------
        1K-blocks:
.........

image.png

获取网络配置

# 调用网络模块
salt '*' network.interfaces
www.sublimetext.com:
    ----------
    eth0:
        ----------
        hwaddr:
            02:42:c0:a8:2a:03
        inet:
            |_
              ----------
              address:
                  192.168.42.3
              broadcast:
                  192.168.42.255
              label:
                  eth0
              netmask:
                  255.255.255.0
        parent:
            if10618
        up:
            True

Master 与 Minion 认证
minion 在第一次启动时,会在 /etc/salt/pki/minion/(该路径在 /etc/salt/minion 里面设置或修改)下自动生成 minion.pem(private key)和 minion.pub(public key),然后将 minion.pub 发送给 master。
master 在接收到 minion 的 public key 后,通过 salt-key 命令接收远端服务器 public key,这样在 master 的 /etc/salt/pki/master/minions 下的将会存放以 minion id 命名的 public key,然后 master 就能对 minion 发送指令了。
Master 与 Minion 的连接
SaltStack master 启动后默认监听 4505 和 4506 两个端口。4505(publish_port)为 saltstack 的消息发布系统的端口,4506(ret_port)为 saltstack 客户端与服务端通信的端口。如果使用 lsof 查看 4505 端口,会发现所有的 minion 在 4505 端口持续保持在 ESTABLISHED 状态。

image.png

注意:如果lsof 命令不存在,使用 apt -y install lsof 安装。
Salt 工作流程
以执行 salt '*' cmd.run ls 为例;
Salt stack 的 Master 与 Minion 之间通过 ZeroMq 进行消息传递,使用了 ZeroMq 的发布-订阅模式,连接方式包括 tcp,ipc。
salt 命令,将 cmd.run ls 命令从 salt.client.LocalClient.cmd_cli 发布到 master ,获取一个 Jobid,根据 Jobid 获取命令执行结果。
master 接收到命令后,将要执行的命令发送给客户端 minion。
minion 从消息总线上接收到要处理的命令,交给 minion._handle_aes 处理。
minion._handle_aes 发起一个本地线程调用 cmdmod 执行 ls 命令。线程执行完 ls 后,调用 minion._return_pub 方法,将执行结果通过消息总线返回给 master。
master 接收到客户端返回的结果,调用 master._handle_aes 方法,将结果写的文件中
salt.client.LocalClient.cmd_cli 通过轮询获取 Job 执行结果,将结果输出到终端。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念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

推荐阅读更多精彩内容