【搭建Saltstack运维工具】 -- 2019-08-11 19:24:07

目录

  • 所谓Salt
  • 开始搭建
  • 配置接受密钥
  • salt命令
  • YAML详解
  • 目标定位字符串
  • state模块定义主机状态
  • Salt采集静态信息之GrainsSalt

原文: http://106.13.73.98/__/108/

@(Saltstack)
***

所谓Salt

Saltstack是由thomas Hatch于2011年创建的一个开源项目,设计初衷是为了实现一个快速的远程执行系统.

Salt有多强大!

????系统管理元日常会进行大量的重复性操作,例如安装软件,修改配置文件,创建用户,批量执行命令等等,如果主机数量庞大, 单靠人工维护是在让人难以忍受.

????早期的运维人员会根据生产环境编写特定的脚本来完成大量的重复性工作,这些脚本复杂且难以维护,系统管理员面临的问题主要是系统配置管理、远程执行命令。因此而诞生了很多开源软件,系统维护方面的有fabricpuppetchefansibleSaltstack等,这些软件擅长维护系统状态或方便的对大量主机进行批量的命令执行.

????Salt灵活性强大,可以进行大规模部署,也能进行小规模的系统部署,Salt的设计构造适用于任意数量的服务器,从少量本地网络系统到跨越整个数据中心,扩扑架构都是C/S模型,配置简单.

????不管是几台、几百台、几千台服务器,都可以使用Salt在一个中心节点上进行管控,灵活定位任意服务器子集来运行命令.

????Salt是使用Python语言编写的,支持用户通过Python自定义功能模块,也提供了大量的Python API接口,用户可以根据需要进行简单快速的扩展.

Saltstack运行方式

  • Local本地运行,交付管理
  • Master/Minion 常用管理
  • Salt SSH 不需要客户端

Saltstack部署基本架构

在开始搭建之前,先理解Salt结构中各个角色:
主要区分salt-mastersalt-minion,前者是中心控制系统,后者是被管理的客户端.

在远程执行系统中,Salt用Python通过函数调用完成任务.
***

开始搭建

搭建环境

  • 192.168.43.43 master
  • 192.168.43.100 slave01
  • 192.168.43.200 slave02

安装Saltstack

Salt软件包需要epel源的支持,那么下载:
(EPEL的全称叫 Extra Packages for Enterprise Linux 。EPEL是由 Fedora 社区打造,为 RHEL 及衍生发行版如 CentOS、Scientific Linux 等提供高质量软件包的项目。装上了 EPEL之后,就相当于添加了一个第三方源。)

wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
yum clean all #清空缓存
yum makecache #生成yum缓存

搞定后,开始在对应的服务器上安装对象的包:

yum -y install salt-master  # 中心控制系统
yum -y install salt-minion  # 被管理的客户端

Salt端口

安装好Salt后开始配置,其中salt-master默认监听两个端口:

  • publish_port 4505 提供远程命令发送功能
  • ret_port 4506 提供认证,文件服务,结果收集等功能

Salt配置文件

配置文件中包含了大量可调整的参数,这些参数控制master和minion各个方面.
salt-master的配置文件为/etc/salt/master.
salt-minion的配置文件为/etc/salt/minion.

salt-master

# ??冒号":"后面必须留一个空格

# 绑定到本地的0.0.0.0地址
interface: 0.0.0.0

# 运行salt程序的用户,影响到salt的执行权限
user: root

# salt的运行线程,开的线程越多一般处理的速度越快,但一般不要超过CPU的个数
worker_threads: 10

# master的管理端口
publish_port: 4505

# master跟minion的通讯端口,用于文件服务,认证,接收返回结果等
ret_port: 4506

# 如果这个master运行的salt-syndic连接到了一个更层级别的master
# 那么这个参数需要配置成连接到这个高层级别的master的监听端口
syndic_master_port: 4506

# 指定pid文件位置
pidfile: /var/run/salt/master.pid

salt-minion

# minion的识别ID,可以是IP,域名,或是可以通过DNS解析的字符串
id: slave01
# 这里展示的slave01主机的配置文件,slave02主机的id为slave02

# salt运行的用户权限
user: root

# master的识别ID,可以是IP,域名,或是可以通过DNS解析的字符串
master : master

# master通信端口
master_port: 4506

# 备份模式,minion是本地备份,当进行文件管理时的文件备份模式
backup_mode: minion

# 执行salt-call时候的输出方式
output: nested

# minion等待master接受认证的时间
acceptance_wait_time: 10

# 失败重连次数,0表示无限次,非零会不断尝试到设置值后停止尝试
acceptance_wait_time_max: 0

# 重新认证延迟时间,可以避免因为master的key改变导致minion需要重新认证的syn风暴
random_reauth_delay: 60

# 日志文件位置
log_file: /var/logs/salt/minion.log

配置文件写好之后,还需要指明主机名与其ip的对应关系,可通过在/etc/hosts文件添加主机信息:

192.168.1.100 slave01
192.168.1.200 slave02
# 这里展示的master的hosts文件,slave服务器的hosts文件请添加上对应的主机与IP

修改后,在对应的服务器上启动对应的服务:

systemctl start salt-master
systemctl start salt-minion

配置接受密钥

salt-key的参数

在接受密钥之前,我们先来看看它有那些参数:

  • -L 查看KEY状态
  • -A 认证所有密钥
  • -D删除所有密钥
  • -a认证指定的key
  • -d删除指定的key
  • -r注销掉指定的key(该状态为未被认证)

开始接受密钥



启动minion后,minion会自动去寻找连接master,并请求master为其签发证书.
待证书签发完成后,master便会信任minion,此时便可通信,它们之间的通信是加密的.

salt-key命令用于管理minion密钥,在master执行:

在master上查看minion的密钥信息:

# '*'代表所有salve主机
[[email protected] ~]# salt-key -f '*'

# 还可以指定某一个主机
[[email protected] ~]# salt-key -f slave01</font>

在minion上查看master的密钥信息:

[[email protected] ~]# salt-call --local key.finger

确认密钥匹配后,在master上接受密钥:

# -A:将允许所有的salve
[[email protected] ~]# salt-key -A -y

# -a:将允许指定的salve
[[email protected] ~]# salt-key -a slave01


此时已经成功接受了密钥.

我们再来看看密钥信息:

***

salt命令

日常命令参数

首先要知道master和minion都安装了那些文件,然后才知道怎么操作.

master端

[[email protected] ~]# rpm -ql salt-master
/etc/salt/master  # salt master主配置文件
/usr/bin/salt  # salt master核心操作命令
/usr/bin/salt-cp  # salt文件传输命令
/usr/bin/salt-key  # salt证书管理
/usr/bin/salt-master  # salt master服务命令
/usr/bin/salt-run  # salt master runner命令

slave端

[[email protected] ~]# rpm -ql salt-minion
/etc/salt/minion  # minion配置文件
/usr/bin/salt-call  # 拉取命令
/usr/bin/salt-minion  # minion服务命令
/usr/lib/systemd/system/salt-minion.service  # minion启动脚本

开始你的salt命令
***
test.ping

# 检测目标主机是否存活
[[email protected] ~]# salt '*' test.ping
slave01:
    True
slave02:
    True
# '*'表示所有主机,将返回所有主机是否存活,也可以指定某一个主机.
# test.ping是salt远程执行的一个模块下面的方法.

test.ping是条很简单的探测minion主机收否存活的命令,也是远程执行命令,我们通过master发送消息给"*"所有的minion,并且告诉他们运行salt内置的命令(也是python模块中的一个函数),返回true表示slave机器监控存活.

test.echo

[[email protected] ~]# salt slave01 test.echo 'is ok'
slave01:
    is ok

test.fib

[[email protected] ~]# salt slave02 test.fib 8
slave02:
    |_
      - 0
      - 1
      - 1
      - 2
      - 3
      - 5
    - 2.86102294922e-06

test.fib可生成斐波那契数列.
斐波那切数列定义是第0项是0,第1项是1,数列从第3项开始,每一项等于前两项之和.
***
test模块实际上还有许多其它的函数,可通过salt ‘*‘ sys.list_functions test查看.

salt命令组成结构

  • 在命令行输入的命令都是 执行模块.
  • 等到命令写入到文件中 就叫做状态模块.

完整的五部分命令:

# --summary参数显示salt命令的概要
[[email protected] ~]# salt --summary '*' cmd.run > 'hostname'
slave02:
    slave02
slave01:
    slave01

-------------------------------------------
Summary
-------------------------------------------
# of Minions Targeted: 2
# of Minions Returned: 2
# of Minions Did Not Return: 0
-------------------------------------------

sys模块用于与系统交互,下面的命令将列出所有salt的sys模块:

[[email protected] ~]# salt '*' sys.list_modules

远程执行命令模块
*
cmd**
一个超级模块,所有shell命令都能执行:

[[email protected] ~]# salt 'slave01' cmd.run hostname
slave01:
    slave01

# 还可以使用cmd.run_all返回更详细的信息:
[[email protected] ~]# salt 'slave01' cmd.run_all hostname

pkg
用于安装软件,其底层调用的是yum工具:

# 在slave01上安装nginx
[[email protected] ~]# salt 'slave01' pkg.install "nginx"
# 卸载slave01上的nginx
[[email protected] ~]# salt 'slave01' pkg.remove "nginx"
# 检查pkg包的版本
[[email protected] ~]# salt 'slave01' pkg.version "nginx"

server
用于管理服务:

[[email protected] ~]$salt 'slave' service.start "nginx"
slave:
    True
[[email protected] ~]$salt 'slave' service.status "nginx"
slave:
    True
[[email protected] ~]$salt 'slave' service.stop "nginx"
slave:
    True

关于 --out=json 与 --out=yaml
***
--out=json

# 返回的数据是Json类型,如下
[[email protected] ~]# salt --out=json 'slave01' cmd.run 'hostname'
{
    "slave01": "slave01"
}

--out=json

[[email protected] ~]# salt --out=yaml 'slave01' cmd.run 'hostname'
slave01: slave01


YAML详解

在学习Saltstack过程中,第一要点就是States编写技巧,简称SLS文件,这个文件遵循YAML语法.

json、xml、yaml都是数据序列化格式,yaml容易被解析,应用于配置文件.

Salt的配置文件就是yaml格式,不能使用tab键.

还有saltstackk8sansible都用的yaml格式配置文件.

YAML语法规则

  • 大小写敏感
  • 使用缩进表示层级关系,缩进不可用tab键
  • 缩进的空格数不重要,相同层级的元素左侧对其即可
  • "#"号表示注释行

YAML是YAML Ain‘t Markup Language的首字母缩写,YAML的语法简单:
结构体通过空格展示
项目使用 - 代表
键值对通过 : 分割
YAML语法遵循固定的缩进风格,表示数据层级结构关系,saltstack需要每个缩进级别由2个空格组成,不可使用tab键.

YAML与JSON格式对比
***
YAML

first_key:
  second_key:second_value

JSON

{
  'first_key':{
      'second_key':'second_value',
  }
}

短横杠
***
YAML语法表示列表,使用一个横杠加一个空格,多个项使用同样的缩进级别作为同一个列表的部分,如下图:

列表可以作为一个键值对的value,例如一次性要安装多个软件:


目标定位字符串

之前的salt命令我们都是使用salt ‘*‘控制所有minion,并且我们只有两台minion,但是生产环境的服务器很可能是成千上百的minion,因此需要灵活地定位所需的服务器并且执行远程命令.

全局匹配

[[email protected] ~]# salt '*' test.ping
slave01:
    True
slave02:
    True

Linux通配符

  • * 代表任意字符,或空字符串
  • ? 代表任意一个字符,不可以为空
  • [a-z] 任何一个小写字母
  • [0-9] 任何一个数字

示例:

[[email protected] ~]# salt 'slave0[1-2]' test.ping
[[email protected] ~]# salt 'slave0?' test.ping
# 以上两条都可以匹配到slave01和slave02主机

state模块定义主机状态

之前执行的远程命令,都是一个过程式的,类似一段shell或者python脚本执行,执行一次触发一次相同的功能.

那么大量的minion上运行远程命令就必须使用salt提供的“状态管理”了,状态是对minion的一种描述和定义,运维不需要关心部署是如何完成的,只需要描述minion需要达到什么状态.

下面我们将通过state模块来部署nginx
***
打开master的配置文件/etc/salt/master,加入如下配置:

# 必须严格遵循语法,空格,不可用tab键
file_roots:
  base:
    - /srv/salt/base
  dev:
    - /srv/salt/dev
  test:
    - /srv/salt/test
  prod:
    - /srv/salt/prod
# 修改master配置文件后重启服务

创建文件夹(此步骤master与minion都要执行):

# 在master和minion上都要创建:
mkdir -p /srv/salt/{base,dev,test,prod}

/srv/salt/base下创建nginx.sls文件,其文件内容如下(此步骤master与minion都要执行):

nginx-install:
  pkg.installed:
    - name: nginx

nginx-service:
  service.running:
    - name: nginx
    - enable: True

此时用state模块部署nginx软件,通过我们编写的nginx.sls描述性配置文件,命令行调用state模块的sls函数:

# 启动命令,执行后nginx将被安装且激活,可进行状态管理
[[email protected] ~]# salt 'slave01' state.sls nginx

解释下nginx.sls描述文件:
sls配置文件都遵循YAML语言描述
第一条命令使用了pkg.install安装命令,相对于运行了yum install,而此时state模块会判断nginx是否安装了,如果没有安装就进行安装,安装了就什么都不做.
状态描述都会遵循这个原则,只有检测到真实状态和所需状态不一就会执行此功能,这种性质叫做幂等性.
***

Salt采集静态信息之GrainsSalt

其他

  • MongoDB Linux下载: http://dl.mongodb.org/dl/linux/x86_64

原文: http://106.13.73.98/__/108/

原文地址:https://www.cnblogs.com/gqy02/p/11336262.html

时间: 2024-11-14 18:04:42

【搭建Saltstack运维工具】 -- 2019-08-11 19:24:07的相关文章

【搭建Saltstack运维工具】

目录 所谓Salt 开始搭建 配置接受密钥 salt命令 YAML详解 目标定位字符串 state模块定义主机状态 Salt采集静态信息之GrainsSalt @(Saltstack) *** 所谓Salt Saltstack是由thomas Hatch于2011年创建的一个开源项目,设计初衷是为了实现一个快速的远程执行系统. Salt有多强大! ????系统管理元日常会进行大量的重复性操作,例如安装软件,修改配置文件,创建用户,批量执行命令等等,如果主机数量庞大, 单靠人工维护是在让人难以忍受

【Liunx】saltstack运维工具

salt介绍 saltstack是由thomas Hatch于2011年创建的一个开源项目,设计初衷是为了实现一个快速的远程执行系统. salt强大吗 系统管理员日常会进行大量的重复性操作,例如安装软件,修改配置文件,创建用户,批量执行命令等 等.如果主机数量庞大,单靠人工维护实在让人难以忍受. 早期运维人员会根据自己的生产环境来写特定脚本完成大量重复性工作,这些脚本复杂且难以维护.系统管理员面临的问题主要是1.系统配置管理,2.远程执行命令,因此诞生了很多开源软件,系统维护方面有fabric.

运维工具ansible理论部分

1.运维工作介绍 运维工作的全部流程: 系统安装(物理机.虚拟机)--> 程序包安装.配置.服务启动 --> 批量操作 --> 程序发布  --> 监控 随着一些大公司的IT系统架构越来越复杂,服务器数量越来越多,标准化和自动化已经是运维工作的基本要素. 自动化运维经历了4个阶段:人工,这个阶段基本上是全部需要到机器上一步步操作:脚本,使用计划任务完成一些重复性工作:工具,这个阶段一个人可以管理大量的机器,常见的工具:puppet,saltstack,ansible:平台化,这时运

运维工具SaltStack之一安装部署

运维工具SaltStack之一安装部署 一.概述 salt是一个异构平台基础设置管理工具,使用轻量级的通讯器ZMQ,用Python写成的批量管理工具,完全开源,遵守Apache2协议,与Puppet,Chef功能类似,有一个强大的远程执行命令引擎,也有一个强大的配置管理系统,通常叫做Salt State System. 二.基本原理 采用C/S模式,server端就是salt的master,client端就是minion,minion与master之间通过ZeroMQ消息队列通信.minion上

自动化运维工具SaltStack详细部署【转】

==========================================================================================一.基础介绍==========================================================================================1.简介SaltStack是一个服务器基础架构集中化管理平台,具备配置管理.远程执行.监控等功能,一般可以理解为简化版的pupp

运维工具SaltStack之三Grains组件

运维工具SaltStack之三Grains组件 一.grains组件介绍 grains是收集Minion主机的静态.不常变化的基本信息,存储在Minion端本地,如:CPU.内核.操作系统.虚拟化等,并且服务器端可以根据这些信息进行灵活定制或个性化定制,是Saltstack最重要的组件之一,多用来做资产管理的信息收集,主要解决平台的差异性. 如可以使用以下命令: #salt 'minion01' grains.items  #获取minion01主机基本信息 二.grains组件自定义 自定义g

运维工具SaltStack之四Pillar组件

运维工具SaltStack之四Pillar组件 一.pillar组件介绍 跟grains的结构一样,存放需要提供给Minion端的信息,存储在master端.可根据各个机器环境的不同,分别定义变量,然后再sls文件里统一引用,官方表示pillar是存储敏感数据的,主要解决环境的差异性.同时与grains组件还有一个特别的区别:grains数据加载在内存里,即minion启动之后不会变,哪怕修改了grains,除非重启minion或者从master端同步.而pillar修改之后,再获取数据即生效了

自动化运维工具之saltstack

今天试着在centos7上安装了saltstack自动化运维工具,以下是安装步骤: 首先,我们安装bash-completion包,它可以补全centos7的命令. yum install -y bash-completion 关于服务的启动问题: 首先,设置服务开机自动启动: systemctl enable salt-master 查看是否设置好开机启动: systemctl is-enabled salt-master 启动服务: systemctl restart salt-master

自动运维工具 -saltstack安装使用(实例演示!!!)

saltstack概述 在生产环境中,服务器往往不止一两台,一般都是成千上万台服务器.这对运维人员来说管理难度太大了,而saltstack是一个新的基础平台管理工具,可以支持管理上万台服务器规模,数秒钟即可完成数据传递,是现在用的比较多的自动化运维工具之一. Salt是一个基础平台管理工具.SaltStack采用 C/S模式,server端就是salt的master,client端就是minion,minion与master之间通过ZeroMQ消息队列通信.master监听4505和4506端口