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 执行结果,将结果输出到终端。

你可能感兴趣的:(169SaltStack 运维通关手册--SaltStack 介绍及安装)