devops 测试开发之路--devops (五): salt 的安装与配置

孙高飞 · 2017年12月19日 · 最后由 rocl 回复于 2017年12月20日 · 2936 次阅读

前言

好久没有更新这个系列的文章了, 最近一直在写深度学习相关的东西,一直冷落了这边。 现在开始慢慢捡起来吧。

salt 是什么,为什么要用 salt

salt 是一款自动化运维工具,属于 master agent 的 cs 架构。 可以通过 master 控制各个子节点去执行命令,我们通常用它来做服务器的初始化工作,它的 API 非常丰富,可以通过各种维度满足我们的需求。 salt 与 ansible 之争其实在运维圈子里吵了很多年了。各有各的好,我们不要纠结,如果大家熟悉 ansible 的话,也是完全可以满足需求的。

那为什么要用 salt 或者说 ansible 呢?这不是运维圈子用的东西么?其实打从接触容器编排开始,我们就已经进入运维领域了, 当我们有很多个节点上要安装 docker,k8s,初始化一堆配置的时候。人肉做这些事情就变得很烦,尤其是我们在测试的时候可能会不停的重装节点,初始化节点,删除大量日志,或者直接安装测试环境。当这些事情越来越多的时候,或者说节点越来越多的时候,传统的脚本就显得比较无力, 用一个自动化运维工具来做这些事就很方便了。

centos7 安装 salt-master

首先配置 yum 源

rpm --import https://repo.saltstack.com/yum/redhat/7/x86_64/latest/SALTSTACK-GPG-KEY.pub

vim /etc/yum.repos.d/saltstack.repo

[saltstack-repo]
name=SaltStack repo for RHEL/CentOS $releasever
baseurl=https://repo.saltstack.com/yum/redhat/$releasever/$basearch/latest
enabled=1
gpgcheck=1
gpgkey=https://repo.saltstack.com/yum/redhat/$releasever/$basearch/latest/SALTSTACK-GPG-KEY.pub

然后使用 yum 安装并用 systemd 启用 salt-master

yum install salt-master
systemctl enable salt-master
systemctl start salt-master

salt-master 的配置文件是放在/etc/salt/master 这里的。我们目前使用默认的配置就好。

在子节点安装 salt-minion

步骤跟安装 master 一样,需要换源,只不过 yum 安装的时候是 salt-minion

yum install salt-minion
systemctl enable salt-minion
systemctl start salt-minion

需要注意的是,为了能让 salt-minion 能够连接上 master。 需要修改/etc/salt/minion 这个配置文件中的 master 字段,修改成 master 节点的 ip 或者域名。 之后我们在 master 节点上运行 salt-key -L 就可以看到如下图的效果。

可以看到我们在 unaccepted key 中找到了我们的 master 节点,为什么是 unaccepted 呢? 因为 master 和 minion 之间是开启了双向认证的,在 minion 向 master 注册的时候就交换了 public key,我们需要在 master 节点上认可这个 minion 节点。 所以我们运行 salt-key -A 来接受所有 minion 节点的 public key。如下图:

这样我们就配置好了 master 和 minion 之间的通信。

接下来我们运行一下测试。在 master 节点上输入下面的命令

解释一下上面的命令, salt 是命令, '' 是匹配规则,salt 有很多种方式来匹配到底在哪些 minion 上运行程序。 例如分组,正则,grains,pillar 等。在这里我们就不细说了。 '' 的意思就是我们在所有 minon 节点上运行命令。 最后的 test.ping 是 salt 的一种运行模块,称为 modules。 test 是 salt 的测试模块, 我们运行 test.ping 来测试一下 master 节点与 minion 节点的连通性。

salt 中的 states

OK,现在我们来简单做个例子来应用一下 salt 吧。 salt 中的 states 是我们最常用的功能之一了,它能让我们简单的控制 minion 做一些事情。这里不先不细讲,我们做个很简单的 demo。 首先我们要在 master 节点中配置一些 states 的文件。在/etc/salt/master 中配置下面选项,指定 salt state 的根目录在/srv/salt。默认是下面的配置:

file_roots:
  base:
    - /srv/salt

我们接下来看看下面的操作:top.sls 文件是 SaltState 的默认 sls 文件,再未作特别特别指定时候,salt 会默认调用 top.sls 来执行。例入 salt * state.highstate。

#创建一个top.sls
mkdir -p /srv/salt
touch /srv/salt/top.sls

# 添加如下内容,注意sls文件是用2个空格来作为缩进
# base 匹配状态树的base目录配置
# '*'  表示匹配所有的minions
# - webserver 表示执行base目录下webserver.sls状态文件或是webserver/init.sls文件
base:
  '*':
    - webserver

上面在 top.sls 文件中定义了一个 webserber 文件下面来添加一个 webserver 文件,在文件/srv/salt/webserver.sls 文件中添加下面内容

# vim-enhanced :ID 声明,跟yum install apache 指定的名称一样
#   pkg.installed : 函数声明,说明该sls文件要指定的执行操作函数. pkg 是salt的function之一,说明要用操作系统本身的包管理器来管理应用,在本例子中相当于yum install
vim-enhanced:
  pkg.installed

然后我们执行 salt '*' state.highstate

OK,这样我们就成功的通过 salt states 在 minion 节点上安装了 vim

结尾

今天先简单讲讲 salt 的基本配置和简单应用。 以后有时间多写一点其他应用。 不论是 salt 还是 ansible 都是自动化运维的神器,当我们的测试节点越来越多的时候它们无疑是我们最好的助手。 我们可以把它们加入到我们的测试平台中,做到环境的自动化运维管理。

如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
共收到 2 条回复 时间 点赞

高产的飞哥,加油

—— 来自 TesterHome 官方 安卓客户端

原来是和 ansible 同一级别的东西。学习了

ABEE ycwdaaaa (孙高飞) 在 TesterHome 的发帖整理 中提及了此贴 01月12日 13:47
需要 登录 后方可回复, 如果你还没有账号请点击这里 注册