澳门新萄京官方网站-www.8455.com-澳门新萄京赌场网址

澳门新萄京官方网站立刻入门教程,快捷入门S

2019-06-01 作者:服务器运维   |   浏览(154)

Saltstack 急速入门教程,Saltstack入门教程

目录

  • saltstack简介
  • 安装saltstack
  • grains&pillar
  • 管理对象Target
  • 布局管理States
  • 自定义module
导读 SaltStack是基于Python开发的一套C/S架构配置管理工具(功能不仅仅是配置管理,如使用salt-cloud配置AWS EC2实例),它的底层使用ZeroMQ消息队列pub/sub方式通信,使用SSL证书签发的方式进行认证管理。号称世界上最快的消息队列ZeroMQ使得SaltStack能快速在成千上万台机器上进行各种操作。

简述

saltstack

  • saltstack是二个新的基础平台管理工科具,只要求开销数分钟就可以运转起来,能够支撑管理上万台服务器的范畴,数秒钟就可以完毕多少传递。
  • saltstack是使用python语言开辟的,同有的时候间也支撑restAPI方便壹次开采以及和它平台合并,同不常候官方也揭露了二个Web管理界面halite。

优点:

  • 率先,他速度快,基于音信队列 线程,跑完多台道具,都是皮秒级其他
  • 附带,非常灵活,源码是python,方便清楚和自定义模块(python 语言绝对于其余的perl、ruby等仍然很好通晓的)
  • 命令轻易,作用强大

saltstack运市场价格势

  • Local
  • Master/Minion
  • Salt SSH

正文使用Master/Minion运转格局。

saltstack叁大作用

  • 远程试行
  • 布局管理
  • 云管理

saltstack数据系统

  • Grains (静态数据)
  • pillar (动态数据)

saltstack配置处理

  • SLS(YAML、Jinja)
  • Highstate
  • States Module

自动化学工业具相比较

Puppet大概是四款工具中最赫赫有名的。就可用操作、模块和用户分界面来讲,它是最周密的。Puppet展现了数额大旨协和的全貌,差非常少涵盖每贰个周转连串,为各大操作系统提供了深深的工具。起始设置比较轻巧,只需求在急需加以管理的种种系统上安装主服务器和客户端代理软件。命令行接口(CLI)简单直观,允许通过puppet命令下载和安装模块。然后,必要对安排文件举行改换,好让模块适合所需的职责;招待受命令的客户端与主服务器联系时,会改动配置文件,恐怕客户端通过立即触发改变配置文件的推送(push)来开始展览改变。

Ansible关怀的严重性是力求言简意赅和飞跃,而且不要求在节点上设置代理软件。由此,Ansible通过SSH实施全体机能。供给管住的节点被增添到Ansible配置景况,SSH授权密钥被增大到各样节点上,那与运作Ansible的用户有关。一旦造成了那步,Ansible主服务器可以通过SSH与节点进行通讯,实施全数须求的天职。Ansible能够动用Paramiko(基于SSH二协议的Python完结)或正式SSH用于通讯,不过还也许有1种加快情势,允许更急速、越来越大局面包车型地铁通讯。

Salt类似Ansible,因为它也是基于CLI的工具,采纳了推送情势达成客户端通讯。它能够由此Git或通进度序包管理种类设置到主服务器和客户端上。客户端会向主服务器建议请求,请求在主服务器上获取接受后,就足以垄断该客户端了。Salt能够由此常备的SSH与客户端进行通讯,但如果应用名字为minion的客户端代理软件,能够大大提升可扩大性。其余,Salt含有3个异步文件服务器,可感到客户端加速文件服务进程,这点一滴是Salt珍视高扩张性的三个人作品显示。与Ansible同样,你可以一贯通过CLI,向客户端发出命令,比方运转服务或安装程序包;你也得以选择名叫state的YAML配置文件,管理相比复杂的任务。还恐怕有“pillar”,那个是坐落集中地点的数据集,YAML配置文件能够在运营时期走访它们。

小结:个人观点puppet最大缺陷正是私下认可情状下Agent每隔三十分钟向master同步状态,master主动推送成效比较虚弱(二.七本子),ansible基于SSH服务推行,假设服务器过多不建议选用,他是使用轮流培训的措施。Salt基于信息队列。品质蛮好,适合大批量生产条件。

Saltstack 火速入门教程

saltstack简介

澳门新萄京官方网站 1

贯彻情形

计划3台机械,那3台机器都关闭 selinux,清空防火墙规则。

  • saltstack ==> 172.16.0.19 (服务端)
  • client1 ==> 172.16.0.20 (客户端)
  • client2 ==> 172.16.0.21 (客户端)

查阅版本和根本

[root@saltstack ~]# cat /etc/RedHat-release
CentOS Linux release 7.3.1611 (Core) 
[root@saltstack ~]# uname -rm
3.10.0-514.6.1.el7.x86_64 x86_64

分别安装 hostname,设置完成xshell注销重复连接一下

[root@saltstack ~]# hostnamectl set-hostname saltstack
[root@client1 ~]# hostnamectl set-hostname client1
[root@client2 ~]# hostnamectl set-hostname client2

编辑 hosts 文件
每台都安装,若机器太多,能够由此搭建 DNS,则毫不在每台机器上安装那些

[root@saltstack ~]# vi /etc/hosts
添加下面内容
172.16.0.19 saltstack
172.16.0.20 client1
172.16.0.21 client2

SaltStack简单介绍与风味

SaltStack 是1种基于 C/S 架构的服务器基础架构集中国化学工业进出口总公司管理平台,管理端称为 Master,客户端称为 Minion。SaltStack 具备配置处理、远程推行、监察和控制等成效,一般能够清楚为是简化版的 Puppet 和抓牢版的 Func。SaltStack 自己是基于 Python 语言开垦完毕,结合了轻量级的音信队列软件 ZeroMQ 与 Python 第2方模块(Pyzmq、PyCrypto、Pyjinjia二、python-msgpack 和 PyYAML 等)营造。

经过安顿 SaltStack 情状,运行职员能够在多数台服务器上完成批量实施命令,依照区别的业务性情开始展览计划聚集国化学工业进出口总企业管理、分发文件、收集系统数据及软件包的安装与治本等。

1.介绍

Saltstack 比 Puppet 出来晚几年,是基于Python 开荒的,也是基于 C/S 架构,服务端 master 和客户端 minions ;Saltstack 和 Puppet 很像,能够说 Saltstatck 整合了 Puppet 和 Chef 的职能,特别有力,更契合广大量管打败务器,并且它比 Puppet 更易于配置。 3大效果: 远程命令执行,配置管理(服务,文件,cron,用户,组),云管理。

什么是saltstack?

Saltstack开源项目始于201一年,使用Python开荒的1套C/S架构的运行工具,由Master和Minion组成,通过ZeroMQ实行通讯。
品种地址: https://github.com/saltstack/salt
官方网址地址: http://www.saltstack.com
法定文书档案: http://docs.saltstack.com OR http://docs.saltstack.cn
开垦语言: Python
运作格局: C/S

与此同不常候动用XC90SA Key格局确认身份,传输接纳AES加密,这使得它的安全性获得了保全。SaltStack平时被描述为Func压实版 Puppet精简版。

发端设置

独家为三台机械增多Ali云epel源

[root@saltstack ~]# mv /etc/yum.repos.d/epel.repo /etc/yum.repos.d/epel.repo.backup
[root@saltstack ~]# mv /etc/yum.repos.d/epel-testing.repo /etc/yum.repos.d/epel-testing.repo.backup
[root@saltstack ~]# wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo

服务端安装

[root@saltstack ~]# yum -y install salt-master salt-minion

客户端安装

[root@client1 ~]# yum -y install salt-minion

客户端安装

[root@client2 ~]# yum -y install salt-minion

SaltStack 具备以下特点:

1、布署轻松、方便;

二、帮助超越50%UNIX/Linux及Windows情形;

三、主从集中国化学工业进出口总企管;

肆、配置简单、作用强大、扩充性强;

5、主要调节端(master)和被控端(minion)基于证书认证,安全可信。

六、援助API及自定义模块,可由此Python轻松扩张。

二.筹算职业

预加防御两台机械,那两台机器都关门 selinux,清空 iptables 规则并保留。 master:192.16八.一.160 slaver:192.168.1.1陆一

更新软件源

[[email protected] ~]# wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
[[email protected] ~]# yum makecache fast
Loaded plugins: fastestmirror
HuaDongBD                                                                                                                                            | 2.9 kB  00:00:00     
base                                                                                                                                                 | 3.6 kB  00:00:00     
extras                                                                                                                                               | 3.4 kB  00:00:00     
os                                                                                                                                                   | 3.6 kB  00:00:00     
updates                                                                                                                                              | 3.4 kB  00:00:00     
updates/7/x86_64/primary_db                                                                                                                          | 7.8 MB  00:00:07     
Loading mirror speeds from cached hostfile
 * base: mirrors.aliyun.com
 * extras: mirrors.aliyun.com
 * updates: mirrors.aliyun.com
Metadata Cache Created
[[email protected] ~]#

骨干术语

说明
master 控制中心,salt命令运行和资源状态管理端
minions 需要管理的客户端机器,会主动连接master端,并从master端得到资源状态信息,同步资源管理信息
states 配置管理的指令集
grains minion端的静态变量
pillar minion端的动态变量
highstate 给minion永久添加状态,从sls配置文件读取
salt schedule 自动保持客户端配置

何以选用SaltStack?

配置master

服务端和客户端都要配置

[root@saltstack ~]# vi /etc/salt/minion  16
以下两种方式都可以,选择其中一种即可
# master改为服务端的主机名
master: saltstack    
# master改为服务端的IP
master: 172.16.0.19

分级修改叁台机械minion文件中的的id为本人的主机名

[root@client1 ~]# vi /etc/salt/minion  78
id: client1
[root@client2 ~]# vi /etc/salt/minion  78
id: client2

启动saltstack服务
服务端

[root@saltstack ~]# systemctl enable salt-master
[root@saltstack ~]# systemctl enable salt-minion
[root@saltstack ~]# systemctl start salt-master
[root@saltstack ~]# systemctl start salt-minion

客户端

[root@client1 ~]# systemctl enable salt-minion
[root@client1 ~]# systemctl start salt-minion

SaltStack 的干活规律

SaltStack 选拔 C/S 结构来对云情状内的服务器操作管理及布署管理。为了更加好的明白它的干活措施及管制模型,将透过图形形式对其规律举行阐释。

SaltStack 客户端(Minion)在运营时,会自动生成1套密钥,包涵私钥和公钥。之后将公钥发送给服务器端,服务器端验证并接受公钥,以此来建立保障且加密的通讯连接。同一时间经过音讯队列 ZeroMQ 在客户端与服务端之间创建消息公布连接。具体通讯原理图,如图 壹所示,命令实行如图 二 所示:

澳门新萄京官方网站 2

专门的职业术语表达:

Minion 是 SaltStack 供给管住的客户端安装组件,会再接再砺去老是 Master 端,并从 Master 端获得财富气象音信,同步财富管理新闻。

Master 作为调节宗旨运营在主机服务器上,担当 Salt 命令运转和财富气象的田间管理。

ZeroMQ 是一款开源的音讯队列软件,用于在 Minion 端与 Master 端创立系列通讯桥梁。

Daemon 是运转于每二个分子内的照顾进度,承担着公布新闻及通讯端口监听的功用。

澳门新萄京官方网站 3

原理图表明:

Minion 是 SaltStack 须要管住的客户端安装组件,会积极去老是 Master 端,并从 Master 端获得资源情状音讯,同步能源管理新闻。

Master 作为调整中央运作在主机服务器上,担任 Salt 命令运维和财富意况的军管。

Master 上实践某条指令通过队列下发到各样 Minions 去奉行,并回到结果。

3. 安装

在SaltsStack架构中服务端叫作Master,客户端叫作Minion,都以以守护进度的情势运维,向来监听配置文件中定义的ret_port(saltstack客户端与服务端通讯的端口,担当接收客户端发送过来的结果,暗中同意450陆端口)和publish_port(saltstack的音信公布种类,暗许4505端口)的端口。当Minion运营时会自动连接到安排文件中定义的Master地址ret_port端口进行连接认证。

  • Master:调节中央,salt命令运转和财富意况管理
  • Minion : 须要管理的客户端机器,会主动去连接Mater端,并从Master端获得能源情形音信,同步财富管理音信
  • States:配置处理的指令集
  • Modules:在指令行杏月布局文件中运用的命令模块,能够在命令行中运维
  • Grains:minion端的变量,静态的
  • Pillar:minion端的变量,动态的相比私密的变量,能够透过陈设文件落实同步minions定义
  • highstate:为minion端下发永世增多状态,从sls配置文件读取.即同步状态配置
  • salt_schedule:会自动保持客户端配置

安装saltstack

时下市面上主流的开源自动化配置管理工科具备puppet、chef、ansible、saltstack等等。到底选择那么些相比较好?能够从以下几方面思量:

安插认证

服务端操作

[root@saltstack ~]# salt-key -a client1
The following keys are going to be accepted:
Unaccepted Keys:
client1
Proceed? [n/Y] y     
Key for minion client1 accepted.

[root@saltstack ~]# salt-key -a client2
The following keys are going to be accepted:
Unaccepted Keys:
client2
Proceed? [n/Y] y
Key for minion client2 accepted.
[root@saltstack ~]# salt-key -a saltstack
The following keys are going to be accepted:
Unaccepted Keys:
saltstack
Proceed? [n/Y] y
Key for minion saltstack accepted.

[root@saltstack ~]# salt-key 
Accepted Keys:
client1
client2
saltstack
Denied Keys:
Unaccepted Keys:
Rejected Keys:

证实:-a :accept ,-A:accept-all,-d:delete,-D:delete-all。能够使用 salt-key 命令查看到已经签署的客户端。此时我们在客户端的 /etc/salt/pki/minion 目录上面会多出二个minion_master.pub 文件。

测试注明
示例1: salt '*' test.ping //检测通信是或不是寻常,也能够内定在这之中一个'client一'

[root@saltstack ~]# salt '*' test.ping
saltstack:
    True
client2:
    True
client1:
    True
[root@saltstack ~]# salt 'client1' test.ping
client1:
    True

示例2: salt '*' cmd.run 'df -h' //远程试行命令

[root@saltstack ~]# salt '*' cmd.run 'df -hT'
client2:
    Filesystem     Type      Size  Used Avail Use% Mounted on
    /dev/sda2      xfs        17G   13G  4.2G  76% /
    devtmpfs       devtmpfs   97M     0   97M   0% /dev
    tmpfs          tmpfs     111M   12K  111M   1% /dev/shm
    tmpfs          tmpfs     111M  8.8M  102M   8% /run
    tmpfs          tmpfs     111M     0  111M   0% /sys/fs/cgroup
    /dev/sda1      xfs       297M  202M   96M  68% /boot
    tmpfs          tmpfs      23M     0   23M   0% /run/user/0
saltstack:
    Filesystem     Type      Size  Used Avail Use% Mounted on
    /dev/sda2      xfs        17G  6.8G   11G  40% /
    devtmpfs       devtmpfs  475M     0  475M   0% /dev
    tmpfs          tmpfs     489M   16K  489M   1% /dev/shm
    tmpfs          tmpfs     489M   14M  476M   3% /run
    tmpfs          tmpfs     489M     0  489M   0% /sys/fs/cgroup
    /dev/sda1      xfs       297M  202M   96M  68% /boot
    tmpfs          tmpfs      98M     0   98M   0% /run/user/0
    tmpfs          tmpfs      98M     0   98M   0% /run/user/994
client1:
    Filesystem     Type      Size  Used Avail Use% Mounted on
    /dev/sda2      xfs        17G   13G  4.1G  77% /
    devtmpfs       devtmpfs   97M     0   97M   0% /dev
    tmpfs          tmpfs     111M   12K  111M   1% /dev/shm
    tmpfs          tmpfs     111M   13M   98M  12% /run
    tmpfs          tmpfs     111M     0  111M   0% /sys/fs/cgroup
    /dev/sda1      xfs       297M  202M   96M  68% /boot
    tmpfs          tmpfs      23M     0   23M   0% /run/user/0

说明: 这里的 * 必须是在 master 上曾经被接受过的客户端,能够经过 salt-key 查到,经常是大家早已设定的 id 值。关于那1部分剧情,它援助通配、列表以及正则。 举个例子两台湾游客户端 client1、client2, 那我们得以写成 salt 'client*' salt 'client[2]' salt -L 'client一,client2' salt -E 'client(一|二)' 等格局,使用列表,即多少个机械用逗号分隔,而且亟需加-L,使用正则供给求带-E选项。 它还帮助 grains 和 pillar,分别加 -G 和 -I 选项。

[root@saltstack ~]# salt -E 'client(1|2)' cmd.run 'ls'
client1:
    anaconda-ks.cfg
    initial-setup-ks.cfg
    one-click-install-lnmp.sh
client2:
    anaconda-ks.cfg
    initial-setup-ks.cfg
    one-click-install-lnmp.sh
[root@saltstack ~]# salt -L 'client1,client2' cmd.run 'ls'
client1:
    anaconda-ks.cfg
    initial-setup-ks.cfg
    one-click-install-lnmp.sh
client2:
    anaconda-ks.cfg
    initial-setup-ks.cfg
    one-click-install-lnmp.sh
[root@saltstack ~]# salt 'client[2]' cmd.run 'ls'
client2:
    anaconda-ks.cfg
    initial-setup-ks.cfg
    one-click-install-lnmp.sh
[root@saltstack ~]# salt 'client*' cmd.run 'ls'
client2:
    anaconda-ks.cfg
    initial-setup-ks.cfg
    one-click-install-lnmp.sh
client1:
    anaconda-ks.cfg
    initial-setup-ks.cfg
    one-click-install-lnmp.sh

SaltStack 的架构划设想计

为了让我们更加好的接头 SaltStack 聚焦国化学工业进出口总公司管理方面的优势,由此,依照项指标实际上意况制图了安顿架构图,并在文中对架构图实行了详尽表明。如图 3 所示:

澳门新萄京官方网站 4

说明:

SaltStack 的具有被管理客户端节点(如图 三 所示 DB 和 Web),皆以由此密钥实行加密通讯,使用端口为 450陆。客户端与劳务器端的内容传输,是经过新闻队列实现,使用端口为 450伍。Master 能够发送任何命令让 迷你on 施行,salt 有广大可施行模块,例如说 CMD 模块,在安装 minion 的时候已经自带了,它们常常位于你的 python 库中,locate salt | grep /usr/ 能够看出 salt 自带的全部东西。

为了更加好的知情架构用意,以下将显得重大的命令颁发进程:

SaltStack 的 Master 与 迷你on 之间通过 ZeroMq 实行消息传递,使用了 ZeroMq 的发布订阅方式,连接格局包含 TCP 和 IPC。

Salt 命令,将 cmd.run ls 命令从 salt.client.LocalClient.cmd_cli 宣布到 Master,获取叁个 Jodid,遵照 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 施行结果,将结果输出到终端。

三.一 服务端安装

yum install -y epel-release

yum install -y salt-master salt-minion

[[email protected] ~]# yum install -y epel-release
[[email protected] ~]# yum install -y salt-master salt-minion

安装

Installs the latest release. Updating installs the latest release even if it is a new major version.

1.1、Run the following command to import the SaltStack repository key:

wget -O - https://repo.saltstack.com/apt/ubuntu/16.04/amd64/latest/SALTSTACK-GPG-KEY.pub | sudo apt-key add -

1.2、Save the following file to /etc/apt/sources.list.d/saltstack.list:

deb http://repo.saltstack.com/apt/ubuntu/16.04/amd64/latest xenial main

1.3、Install

> sudo apt-get update
> sudo apt-get install salt-master
> sudo apt-get install salt-minion
> sudo apt-get install salt-ssh
> sudo apt-get install salt-syndic
> sudo apt-get install salt-cloud
> sudo apt-get install salt-api

1.4、show version

> salt --version
salt 2016.3.3 (Boron)

语言的选用(puppet/chef vs ansible/saltstack)

grains 和 pillar

1、grains
grains 是在 minion(客户端)运营时收罗到的部分信息,譬喻操作系统类型、网卡ip等。
利用命令:

[root@saltstack ~]# salt 'client1' grains.ls      // 列出所有的 grains 项目名字
[root@saltstack ~]# salt 'client1' grains.items    // 列出所有的 grains 项目名以及值

grains的音信并不是动态的,并不会随时更改,它只是在 minion 运营时搜罗到的。grains 也得以做安插管理

自定义 grains的点子有二种(客户端自定义配置和服务端写脚本定义):
一.客户端配置(缺点:每台都得去计划,机器多了铺排起来不便宜)

[root@client1 ~]# vi /etc/salt/grains     // 添加如下,注意冒号后有空格
role: nginx
env: test
myname: primum est

或者

[root@client2 ~]# vi /etc/salt/minion  12
去掉这行内容的注释
default_include: minion.d/*.conf

[root@client2 ~]# cd /etc/salt/minion.d/
[root@client2 minion.d]# vi custom_grains.conf            // 添加下面内容
grains:
  role:  
    nginx
  env:  
    test
  myname:  
    primum est

重启minion服务

[root@client1 ~]# systemctl restart salt-minion
[root@client2 ~]# systemctl restart salt-minion

服务端获取 grains

[root@saltstack ~]# salt 'client*' grains.item role env myname        // 列出多个
client1:
    ----------
    env:
        test
    myname:
        primum est
    role:
        nginx
client2:
    ----------
    env:
        test
    myname:
        primum est
    role:
        nginx

[root@saltstack ~]# salt 'client*' grains.get myname        // 列出单个
client1:
    primum est
client2:
    primum est

[root@saltstack ~]# salt 'client*' grains.item myname
client2:
    ----------
    myname:
        primum est
client1:
    ----------
    myname:
        primum est

grains 在长途实施命令时很有益。大家得以依据 grains 的有些目的来操作。比如把具有的 web 服务器的 grains 的 role 设置为 nginx,那那样大家就足以批量对 nginx 的服务器进行操作了:

[root@saltstack ~]# salt -G role:nginx cmd.run 'hostname'
client2:
    client2
client1:
    client1
[root@saltstack ~]# salt -G os:CentOs cmd.run 'hostname'
client2:
    client2
client1:
    client1

二.服务端写Python脚本

[root@saltstack ~]# mkdir /srv/salt/_grains
[root@saltstack ~]# cd /srv/salt/_grains/
[root@saltstack _grains]# vi mytest.py        // 添加下面内容
#!/usr/bin/env python
# _*_ coding:utf-8 _*_

import os

def my_test():
    grains = {}
    grains['say'] = 'hello world'
    return grains

def my_test1():
    grains = {}
    with os.popen('free -m') as f:
        grains['mem_usage'] = f.read()
    return grains

手拉手到客户端

[root@saltstack _grains]# salt 'client*' saltutil.sync_all

澳门新萄京官方网站 5

 

客户端验证脚本是或不是同步过去

[root@client1 ~]# ll /var/cache/salt/minion/extmods/grains/
总用量 8
-rw------- 1 root root 266 4月  27 11:13 mytest.py
-rw------- 1 root root 613 4月  27 11:13 mytest.pyc

服务端刷新模块

[root@saltstack _grains]# salt 'client*' sys.reload_modules 
client1:
    True
client2:
    True

服务端查看客户端自定义的四个监督检查项

[root@saltstack _grains]# salt 'client*' grains.item say
client1:
    ----------
    say:
        hello world
client2:
    ----------
    say:
        hello world
[root@saltstack _grains]# salt 'client*' grains.item mem_usage
client2:
    ----------
    mem_usage:
                      total        used        free      shared  buff/cache   available
        Mem:            220         103          31           4          85          78
        Swap:          2046         176        1870
client1:
    ----------
    mem_usage:
                      total        used        free      shared  buff/cache   available
        Mem:            220         106          30           2          83          76
        Swap:          2046         178        1868

能够看看服务端写自定义监察和控制项的脚本,能够1键联合到具备客户端上,快速方便。

2、pillar
pillar 和 grains 不均等,是在 master 上定义的,并且是本着 minion 定义的部分音信。像有的比较根本的数据(密码)能够存在 pillar 里,还是能定义变量等。
率先大家查阅master端pillars组件是或不是在打开状态
查看/etc/salt/master pillar_ops: True 就表示pillars在展开状态,不然大家手动修改。
新的本子暗许已经张开,继续下边内容。

翻开钦赐minion的 pillar 值:

[root@saltstack ~]# salt 'client1' pillar.items
client1:
    ----------

服务端自定义配置 pillar

[root@saltstack ~]# vi /etc/salt/master  529    // 找到如下内容,去掉#号
pillar_roots:
  base:
    - /srv/pillar
[root@saltstack ~]#  mkdir /srv/pillar
[root@saltstack ~]# vi /srv/pillar/test.sls    // 自定义配置文件,内容如下
conf: /etc/mum.conf
myname: primum est
[root@saltstack ~]# vi /srv/pillar/top.sls    // 总入口文件,内容如下
base:
  'client1':
    - test

重启master

[root@saltstack ~]# systemctl restart salt-master

小心:当改换完 pillar 配置文件后,我们能够通过刷新 pillar 配置来获取新的 pillar 状态:

[root@saltstack ~]# salt '*' saltutil.refresh_pillar
client1:
    True
saltstack:
    True
client2:
    True

验证:

[root@saltstack ~]# salt 'client1' pillar.items
client1:
    ----------
    conf:
        /etc/mum.conf
    myname:
        primum est

[root@saltstack ~]# salt 'client1' pillar.item myname
client1:
    ----------
    myname:
        primum est

[root@saltstack ~]# salt 'client1' pillar.item conf
client1:
    ----------
    conf:
        /etc/mum.conf

pillar 同样能够用来作为 salt 的匹配对象。比如:

[root@saltstack ~]# salt -I 'conf:/etc/mum.conf' test.ping
client1:
    True
[root@saltstack ~]# salt -I 'conf:/etc/mum.conf' cmd.run 'w'
client1:
     17:19:45 up  7:45,  1 user,  load average: 0.05, 0.03, 0.05
    USER     TTY      FROM             LOGIN@   IDLE   JCPU   PCPU WHAT
    root     pts/1    172.16.0.1       11:14   25.00s  0.68s  0.68s -bash

除此以外1种概念pillar的法子,也适用于state
率先编辑/srv/pillar/目录下的top.sls 文件

[root@saltstack ~]# vi /srv/pillar/top.sls           // 内容如下
base:
  'client1':
    - test
    - apache

首先行表示那是大家的入口文件
其次行代表我们要合营的用户,‘client1’代表client1客户端,“*”代表全数用户
其三丶肆行代表相称到的用户能够看来的多少的安排文件的名字

此地大家能够直接写一个名字叫做apache的公文实行布置,也足以写1个含有init.sls的目录实行铺排。这里运用蕴含init.sls文件的目录的形式的布局方式。

[root@saltstack ~]# cd /srv/pillar/
[root@saltstack pillar]# mkdir apache
[root@saltstack pillar]# cd apache/
[root@saltstack apache]# vim init.sls              // 添加如下内容
system-type:
  {% if grains.os == 'CentOS' %}
    name: Centos-Linux
  {% else %}
    name: unknown
  {% endif %}

apache-name:
  {% if grains.os_family == 'RedHat' %}
    apache: httpd
  {% elif grains.os_family == 'Arch' %}
    apache: apache
  {% elif grains.os_family == 'Debian' %}
    apache: apache2
  {% endif %}

{% if grains.os == 'CentOS' %} 类似于django的模板语言(我们得以选用python脚本定义grains的多少,可是pillar未有。大家可以在pillar的sls脚本其中调用grains的变量,pillar和grains具备同样的功能可以被别的零件调用。)

服务端查看自定义的pillar新闻

[root@saltstack apache]# salt 'client1' pillar.item apache-name
client1:
    ----------
    apache-name:
        ----------
        apache:
            httpd
[root@saltstack apache]# salt 'client1' pillar.item system-type
client1:
    ----------
    system-type:
        ----------
        name:
            Centos-Linux

 

SaltStack 的安装与安插

对 SaltStack 有了三个从头的询问之后,通超过实际际案例操作更是精晓SaltStack。

一、安装Salt

Salt必要epel源补助,全部安装前必要先安装epel源包。

1、salt-master

# yum -y install salt-master

2、salt-minion

# yum -y install salt-minion

二、配置Salt

1、master(/etc/salt/master)

# salt运行的用户,影响到salt的实施权限

user: root

#salt的运行线程,开的线程愈来愈多相似管理的进程越快,但貌似不要赶上CPU的个数

worker_threads: 10

# master的管理端口

publish_port : 4505

# master跟minion的报纸发表端口,用于文书服务,认证,接受重回结果等

ret_port : 4506

# 如若这一个master运维的salt-syndic连接受了2个更加高层级的master,那么那些参数须求配备成连接到的那些高层级master的监听端口

syndic_master_port : 4506

# 钦命pid文件地方

pidfile: /var/run/salt-master.pid

# saltstack 能够调控的文件系统的上马地方

root_dir: /

# 日志文件地方

log_file: /var/log/salt_master.log

# 分组织设立置

nodegroups:

group_all: '*'

# salt state施行时候的根目录

file_roots:

    base:

        - /etc/salt/

# 设置pillar 的根目录

pillar_roots:

    base:

        - /etc/pillar

2、配置minion(/etc/salt/minion)

master: mail  #那块的mail指的是在/etc/hosts文件中所定义的主机名

id: node1

3、启动salt

service salt-master start

service salt-minion start

# saltstack 是使用python2的言语编写,对python三的包容性倒霉,请使用python二的遭遇

四、认证命令介绍

salt-key #评释管理    

# salt-key –L       #翻开全数minion-key    

# salt-key –a      #收受某些minion-key    

# salt-key –A      #接受全体minion-key

# salt-key –d       #剔除有些minion-key

# salt-key –D       #除去全数minion-key

澳门新萄京官方网站 6

澳门新萄京官方网站 7

澳门新萄京官方网站 8

5、salt命令介绍

指令格式:salt [options] [arguments]

例:salt * cmd.run 'uptime'

澳门新萄京官方网站 9

三.二 客户端安装

[[email protected] ~]# yum install -y epel-release
[[email protected] ~]# yum install -y salt-minion

宗旨的安插

文件 /etc/salt/master

interface: 192.168.199.86

文件 /etc/salt/minion

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

Puppet、Chef基于Ruby开发,ansible、saltstack基于python开发的

配置管理安装Apache

上面举办的示范是远程通过 yum 情势安装 Apache。步骤如下:
修改配置文件

[root@saltstack ~]# vi /etc/salt/master  406    // 打开如下内容的注释
file_roots:
  base:
    - /srv/salt/

在意:情形: base、dev(开拓蒙受)、test(测试境况)、prod(生产条件)。

[root@saltstack ~]# mkdir /srv/salt
[root@saltstack ~]# vi /srv/salt/top.sls        
base:
  'client1':
    - apache

注意:若换成 '*',则意味着在装有的客户端推行 apache 模块。

[root@saltstack ~]# vi /srv/salt/apache.sls            
apache-service:
  pkg.installed:
    - names:                // 如果只有一个服务,那么就可以写成 –name: httpd 不用再换一行
      - httpd
      - httpd-devel
  service.running:
    - name: httpd
    - enable: True

在意:apache-service 是自定义的 id 名。pkg.installed 为包安装函数,上边是要设置的包的名字。service.running 也是三个函数,来保管钦定的劳务运维,enable 代表开机运行。

重启服务

[root@saltstack ~]# systemctl restart salt-master

实施命令

[root@saltstack ~]# salt 'client1' state.highstate          // 执行时间比较长,因为要安装httpd

澳门新萄京官方网站 10

 

如上海体育场合所示,说明 Apache 远程安装已成功。

 

SaltStack minion相配情势

一、 Glob(salt私下认可的target类型,使用shell的通配符来钦命三个或七个Minion ID)

# salt * test.ping 或 salt ‘*’ test.ping

贰、pcre包容正则表明式

# salt –E ‘^[m|M]in.[澳门新萄京官方网站立刻入门教程,快捷入门SaltStack。e|o|u]n$’ test.ping

三、Subnet(通过点名3个IPv四地址或1个CID哈弗的IPv四子网)

# salt –S 192.168.0.42 test.ping

# salt –s 192.168.0.0/16 test.ping

4、Grains(salt能够经过操作系统、CPU框架结构及自定义音讯等机器特征实行target Minion)

# salt –G ‘os:Ubuntu’ test.ping

# Salt –G ‘os_family:Debian’ test.ping

五、pillar(salt援助通过pillar数据举办相配)

# Salt –I ‘my_val:my_val’ test.ping

6、混合(compound)

# Salt –C ‘web* or G@os:Arch’ test.ping

7、节点组(Nodegroup)

节点组需求事先定义,配置情势如下:

# vim /etc/salt/master

nodegroups:

node: 'L@node1,node2’

# salt -N node test.ping

4.配置

配置

master:
https://docs.saltstack.com/en/latest/ref/configuration/master.html
http://arlen.blog.51cto.com/7175583/1423997

minion:
https://docs.saltstack.com/en/latest/ref/configuration/minion.html
http://arlen.blog.51cto.com/7175583/1424008

运行开采语言热衷于python(早先时期可做二遍开荒),排除Puppet、Chef

文件目录管理

1、文件管理
服务端配置
编排/srv/salt/目录下的top.sls 文件

[root@saltstack ~]# vi /srv/salt/top.sls     // 修改为如下
base:
  'client1':
    - filetest

新建 filetest.sls 文件

[root@saltstack ~]# vi /srv/salt/filetest.sls        
file-test:
  file.managed:
    - name: /tmp/filetest.txt
    - source: salt://test/123/1.txt
    - user: root
    - group: root
    - mode: 644

只顾:第二行的 file-test 为自定的名字,表示该配置段的名字,可以在别的配置段中援引它;source内定文件从何地拷贝,这里的 test 目录也正是是 /srv/salt/test 目录;name钦赐远程客户端要调换的公文。

新建所要测试的源文件

[root@saltstack ~]# mkdir -p /srv/salt/test/123
[root@saltstack ~]# vim /srv/salt/test/123/1.txt
saltstack ....
this is a test ....

推行命令:

[root@saltstack ~]# salt 'client1' state.highstate

澳门新萄京官方网站 11

 

客户端验证

[root@client1 ~]# ll /tmp/filetest.txt 
-rw-r--r-- 1 root root 34 4月  26 10:58 /tmp/filetest.txt
[root@client1 ~]# cat /tmp/filetest.txt 
saltstack ....
this is a test ...

二、目录管理
服务端配置
随着编辑/srv/salt/目录下的top.sls 文件

[root@saltstack ~]# vi /srv/salt/top.sls     // 修改为如下
base:
  'client1':
    - filedir

新建 filedir.sls 文件

[root@saltstack ~]# vi /srv/salt/filedir.sls
file-dir:
  file.recurse:
    - name: /tmp/testdir
    - source: salt://test1/234
    - user: root
    - file_mode: 644
    - dir_mode: 755
    - mkdir: True
    - clean: True

留意:clean: True 源删除文件或目录,指标也会跟着删除,不然不会去除。可以暗许设置为 False。

新建所要测试的源目录

[root@saltstack ~]# mkdir -p /srv/salt/test1/234/
[root@saltstack ~]# vi /srv/salt/test1/234/2.txt
filedir..........test
and add delete select alter

施行命令:

[root@saltstack ~]# salt 'client1' state.highstate

澳门新萄京官方网站 12

 

客户端验证

[root@client1 ~]# ll /tmp/testdir/
总用量 4
-rw-r--r-- 1 root root 50 4月  26 11:11 2.txt

测试增加和删除效用

[root@saltstack ~]# mkdir /srv/salt/test1/234/mydir
[root@saltstack ~]# touch /srv/salt/test1/234/mydir/111.txt
[root@saltstack ~]# touch /srv/salt/test1/234/testdir.add
[root@saltstack ~]# rm -rf /srv/salt/test1/234/2.txt

施行命令:

[root@saltstack ~]# salt 'client1' state.highstate

澳门新萄京官方网站 13澳门新萄京官方网站立刻入门教程,快捷入门SaltStack。

 

客户端验证

[root@client1 ~]# tree /tmp/testdir/
/tmp/testdir/
|-- mydir
|   `-- 111.txt
`-- testdir.add

1 directory, 2 files

留意:由上海体育场合能够,成功在客户端 /tmp/testdir/ 目录下创办了 mydir 目录以及 testdir.add 文件,并删除 2.txt 文本。这里值得注意的是要学有所成创制 mydir 目录,前提是 mydir 目录下要有文件,如这里的11一.txt 文书,假诺未有,客户端是不会成立 mydir 目录的。

 

SaltStack常用模块

1、status模块(查看系统消息)

澳门新萄京官方网站 14

澳门新萄京官方网站 15

# salt "*" status.diskstats    #查看磁盘音讯

# salt "*" status.meminfo      #翻开内部存款和储蓄器音信

# salt "*" status.w            #w命令再次来到音讯

二、查看全部module列表

澳门新萄京官方网站 16

三、查看钦赐module的富有function方法

澳门新萄京官方网站 17

四、查看钦命module用法

澳门新萄京官方网站 18

伍、具人体模型块的应用(例子)

澳门新萄京官方网站 19

并且到内定机器查看

澳门新萄京官方网站 20

cmd.run模块的运用

澳门新萄京官方网站 21

澳门新萄京官方网站 22

4.1 Salt minion配置

用vi/vim打开/etc/salt/minion,找到配置选项master所在行,一般在第一陆行。修改内容,去掉#,冒号后有二个空格,将salt更换为master。

示范操作如下:

[[email protected] ~]# vi /etc/salt/minion

[[email protected] ~]# vi /etc/salt/minion

# Set the location of the salt master server. If the master server cannot be
# resolved, then the minion will fail to start.
master: master

一经找不到master对应的行,能够直接在文书尾巴部分增多一行master: mastermaster: 192.168.1.160

也可以采取sed命令直接修改配置文件

[[email protected] ~]# sed -i 's/#master: salt/master: 192.168.1.160/g' /etc/salt/minion

启动

sudo service salt-master start
sudo service salt-minion start

速度的挑选 (ansible vs saltstack)

长距离实践

眼前提到远程执行命令 test.ping,cmd.run,点前面包车型客车是模块,点前面包车型大巴是函数;这样总归是不太标准化,上边详细介绍怎么远程实施命令湖剧本。
壹、远程实施命令
服务端配置
继之编辑/srv/salt/目录下的top.sls 文件

[root@saltstack ~]# vi /srv/salt/top.sls     // 修改为如下
base:
  'client1':
    - cmdtest

新建 cmdtest.sls 文件

[root@saltstack ~]# vi /srv/salt/cmdtest.sls
cmd-test:
  cmd.run:
    - onlyif: test -f /tmp/filetest.txt
    - names:
      - touch /tmp/cmdtest.txt
      - mkdir /tmp/cmdtest
    - user: root

只顾:条件 onlyif 表示若 /tmp/filetest.txt 文件存在,则推行前面包车型大巴一声令下;能够使用 unless,两个正好相反。

实施命令:

[root@saltstack ~]# salt 'client1' state.highstate

澳门新萄京官方网站 23

 

客户端验证

[root@client1 ~]# ll /tmp/
总用量 156
drwxr-xr-x  2 root  root      6 4月  26 11:45 cmdtest
-rw-r--r--  1 root  root      0 4月  26 11:45 cmdtest.txt
-rw-r--r--  1 root  root     34 4月  26 10:58 filetest.txt
drwxr-xr-x  3 root  root     38 4月  26 11:14 testdir

2、远程实践脚本
服务端配置
随之编辑/srv/salt/目录下的top.sls 文件

[root@saltstack ~]# vi /srv/salt/top.sls    // 修改为如下
base:
  'client1':
    - shelltest

新建 shelltest.sls 文件

[root@saltstack ~]# vi /srv/salt/shelltest.sls
shell-test:
  cmd.script:
    - source: salt://test/1.sh
    - user: root

新建 1.sh 脚本文件

[root@saltstack ~]# vi /srv/salt/test/1.sh
#!/bin/sh
touch /tmp/shelltest.txt
if [ -d /tmp/shelltest ]
then
    rm -rf /tmp/shelltest
else
    mkdir /tmp/shelltest
fi

试行命令:

[root@saltstack ~]# salt 'client1' state.highstate

澳门新萄京官方网站 24

 

客户端验证

[root@client1 ~]# ll /tmp/
drwxr-xr-x  2 root  root      6 4月  26 12:08 shelltest
-rw-r--r--  1 root  root      0 4月  26 12:08 shelltest.txt

经过地点的事例,咱们贯彻了远程实行脚本;要是大家想1键远程安装 LAMP 或者LNMP,那么只需把本例中的 壹.sh 脚本替换来 1键设置的台本就行。

治本职责布署
1、建立 cron
服务端配置
编纂/srv/salt/目录下的top.sls 文件

[root@saltstack ~]# vi /srv/salt/top.sls     // 修改为如下
#base:
#  'client1':
#    - apache
#base:
#  'client1':
#    - filetest
#base:
#  'client1':
#    - filedir
#base:
#  'client1':
#    - cmdtest
#base:
#  'client1':
#    - shelltest
#base:
#  'client1':
#    - shelltest
base:
  'client1':
    - crontest

编辑 crontest.sls 文件

[root@saltstack ~]# vim /srv/salt/crontest.sls
cron-test:
  cron.present:
    - name: /bin/touch /tmp/111.txt
    - user: root
    - minute: '*'
    - hour: 20
    - daymonth: 1-10
    - month: '3,5'
    - dayweek: '*'

注意,*需求用单引号引起来。当然大家还足以采取 file.managed 模块来管理cron,因为系统的 cron都以以安插文件的花样存在的。

试行命令:

[root@saltstack ~]# salt 'client1' state.highstate

澳门新萄京官方网站 25

 

客户端验证

[root@client1 ~]# crontab -l
# Lines below here are managed by Salt, do not edit
# SALT_CRON_IDENTIFIER:/bin/touch /tmp/111.txt
* 20 1-10 3,5 * /bin/touch /tmp/111.txt

2、删除 cron
服务端配置
咱俩只需修改 crontest.sls 文件

[root@saltstack ~]# vim /srv/salt/crontest.sls
cron.present    改为    cron.absent

在意:两个不可能存活,要想删除一个 cron,那在此以前的 present 就得替换掉大概去除掉。

推行命令:

[root@saltstack ~]# salt 'client1' state.highstate

澳门新萄京官方网站 26

 

客户端验证

[root@client1 ~]# crontab -l        // 可查看到该任务计划已删除
# Lines below here are managed by Salt, do not edit

 

Grains

Static bits of information that a minion collects about the system when the minion first starts.

The grains interface is made available to Salt modules and components so that the right salt minion commands are automatically available on the right systems.

上述是官方的解释,差非常少意思是说grains是minion第一回运行的时候搜罗的静态数据,能够用在salt的模块和其余零件中。举例,当os_family的Grain数据为Centos时,则会使用yum工具组件来进行软件包处理。Grains会在Minion进度运转时加载,并缓存在内部存款和储蓄器中。那样salt-minion进度就无须每趟操作都重新检索系统来赢得Grain,比异常的大的增高了Minion的属性。

一、大家那边大约做一个出口测试,能够见到minion节点的部分音信如下:

澳门新萄京官方网站 27

翻开具体每壹项新闻

澳门新萄京官方网站 28

二、应用场景:

grains的特色–每一遍运营申报、静态决定了它从未pillar灵活,要精通pillar是每四日可变的,只要在master端修改了那一般都会立时见效的。所以grains更合乎做一些静态的属性值的收罗,举例设备的剧中人物(role),磁盘个数(disk_num),操作系统版本等那样极其稳固的性质。轻巧计算起来grains的用途如下:

(一),grains能够在state系统运用中,用户配置管理模块。

(2),grains能够在target中利用,用来相称minion,举个例子os,用-G。

(3),grains能够用来消息查询,grains保存着采撷到的客户端的音信。

那么大家就足以博得一个大概的论断,假诺你想定义的属性值是平常变化的,那请选拔pillar,如若是很牢固、不易变的那请用grains。

3、grains优先级

grains能够保证在minion端、通过master端下发等几个措施来散发。但不一样的点子有两样的预先级的(由低到高):

(1). /etc/salt/grains

(2) /etc/salt/minion

(3)./srv/salt/_grains/  master端_grains目录下

事先级依次依次为存在在minion端/etc/salt/minion配置文件中的同名grains会覆盖/etc/salt/grains文件中的值,而通过master端_grains目录下grains文件下发的值能够会覆盖minion端的全体同名值。比较刚烈,综上说述记念,通过master下发的grains优先级是最高的可,/etc/salt/minion次之,/etc/salt/grains最低(core grains非常小懂,就不商量了,这几个比/etc/salt/grains还低)。

4、grains的下发

grains的颁发大约可以分为两个思路:

(一)自定义的(_grains)能够经过state.highstate、saltutil.sync_grains、saltutil.sync_all 等情势批量下发,切记全部在_grains目录下的兼具自定义grains值都会下发到minion,那是血的教训。

(二)固定期存款放在minion端配置文件中,如grains、minion文件中,可以经过file manager的主意去批量下发/etc/salt/grains等配备文件贯彻grains的批量颁发,当然了也由此别的情势把那一个文件批量下发下去,都是ok的。

对比:

(一)通过state.highstate 下发的grains好处是毫不重启minion就可以见效,但经过下发/etc/salt/grains文件下发的grains值则必须重启minion端服务才足以生效。

(二)自定义的_grains每一趟在highstate调用的时候就能自行发出、刷新,而/etc/salt/grains文件的则不会。

五.起动服务

(1)服务端

[[email protected] ~]# salt-master start

在后端运转

[[email protected] ~]# salt-master start &
[3] 35438
[[email protected] ~]#

(2)客户端

[[email protected] ~]# salt-minion start &
[ERROR   ] The Salt Master has cached the public key for this node, this salt minion will wait for 10 seconds before attempting to re-authenticate
[ERROR   ] The Salt Master has cached the public key for this node, this salt minion will wait for 10 seconds before attempting to re-authenticate

[[email protected] ~]# salt-minion start &
[ERROR   ] The Salt Master has cached the public key for this node, this salt minion will wait for 10 seconds before attempting to re-authenticate
[ERROR   ] The Salt Master has cached the public key for this node, this salt minion will wait for 10 seconds before attempting to re-authenticate

[[email protected] ~]# salt-minion start
[ERROR   ] The Salt Master has cached the public key for this node, this salt minion will wait for 10 seconds before attempting to re-authenticate
[ERROR   ] The Salt Master has cached the public key for this node, this salt minion will wait for 10 seconds before attempting to re-authenticate

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命令accept minion public key,那样在master的/etc/salt/pki/master/minions下的将会存放以minion id命名的 public key,然后master就能够对minion发送指令了。

master接受minion的key

> sudo salt-key -L                
Accepted Keys:
Denied Keys:
Unaccepted Keys:
qianlnk
Rejected Keys:

> sudo salt-key -a qianlnk
The following keys are going to be accepted:
Unaccepted Keys:
qianlnk
Proceed? [n/Y] y
Key for minion qianlnk accepted.

> sudo salt-key -L        
Accepted Keys:
qianlnk
Denied Keys:
Unaccepted Keys:
Rejected Keys:

ansible基于ssh协议传输数据,SaltStack使用消息队列zeroMQ传输数据。从网络数据来看,SaltStack比ansible快大致40倍。

1键搭建rsync服务

rsync服务端搭建配置文件介绍

[root@saltstack rsync]# cat rsync_server.sls 
rsync:    ##ID  这个ID必须是唯一的名字
  user.present:    ##user模块中present应用
    - fullname: rsync  ##用户名字
    - createhome: False  ##不创建家目录
    - shell: /sbin/nologin  ##禁止登录
    - empty_password: True  ##不需要密码
rsyncd.conf: ##ID
  file.managed:  ##file模块
    - name: /etc/rsyncd.conf  ##客户端文件存放路径
    - source: salt://rsync/rsyncd.conf   ##服务端文件路径
    - user: root    ##属主
    - group: root  ##属组
    - mode: 644 ##权限
backup:
  file.directory: ##file模块
    - name: /backup ##创建目录名
    - user: rsync
    - group: rsync
    - mode: 755
    - makedirs: True  ##如果没有自动创建
rsync.password:  
  file.managed:
    - name: /etc/rsync.password
    - source: salt://rsync/rsyncd.password
    - user: root
    - group: root
    - mode: 600
daemon:
  cmd.run:  ##使用cmd.run模块
    - name: rsync --daemon
Boot from open:
  cmd.run:
    - name: echo "/usr/bin/rsync --daemon" >>/etc/rc.local

千帆竞发陈设
服务端配置
编写/srv/salt/目录下的top.sls 文件

[root@saltstack ~]# vi /srv/salt/top.sls        // 修改为下面内容
 base:
  'client1':
    - rsync.rsync_server
  'client2':
    - rsync.rsync_client

创立rsync服务端搭建配置文件

[root@saltstack ~]# mkdir /srv/salt/rsync
[root@saltstack ~]# cd /srv/salt/rsync/
[root@saltstack rsync]# vi rsync_server.sls                // 添加下面内容
rsync:   
  user.present:    
    - fullname: rsync  
    - createhome: False  
    - shell: /sbin/nologin  
    - empty_password: True  
rsyncd.conf: ##ID
  file.managed:  
    - name: /etc/rsyncd.conf  
    - source: salt://rsync/rsyncd.conf   
    - user: root    
    - group: root  
    - mode: 644 
backup:
  file.directory: 
    - name: /backup 
    - user: rsync
    - group: rsync
    - mode: 755
    - makedirs: True  
rsync.password:  
  file.managed:
    - name: /etc/rsync.password
    - source: salt://rsync/rsyncd.password
    - user: root
    - group: root
    - mode: 600
daemon:
  cmd.run:  
    - name: rsync --daemon
Boot from open:
  cmd.run:
    - name: echo "/usr/bin/rsync --daemon" >>/etc/rc.local

始建rsync客户端搭建配置文件

[root@saltstack rsync]# vi rsync_client.sls              // 添加下面内容 
rsync.passwd:
  file.managed:
    - name: /etc/rsync.password
    - source: salt://rsync/rsync.password
    - user: root
    - group: root
    - mode: 600
backup:
  file.directory:
    - name: /backup
    - user: root
    - group: root
    - mode: 755
    - makedirs: True

创制rsync服务配置文件(这里是rsync服务的铺排文件,下面的是salt安装rsync服务应用的搭建配置文件)

[root@saltstack rsync]# vi rsyncd.conf           // rsync配置文件
uid =rsync     
gid =rsync     
use chroot=no
max chonnections =200
timeout = 300
pid file =/var/run/rsyncd.pid
lock file = /var/run/rsync.lock
log file = /var/log/rsyncd.log
ignore errors
read only = false
list = false
hosts allow = 172.16.0.0/24
hosts deny = 0.0.0.0/32
auth users = rsync_backup
secrets file = /etc/rsync.password
[backup]                
path = /backup 

[root@saltstack rsync]# vi rsyncd.password            // 服务端密码文件
rsync_backup:123456

[root@saltstack rsync]# vi rsync.password             // 客户端密码文件
123456

[root@saltstack rsync]# ll
总用量 20
-rw-r--r-- 1 root root 274 4月  26 15:17 rsync_client.sls
-rw-r--r-- 1 root root 376 4月  26 15:11 rsyncd.conf
-rw-r--r-- 1 root root  20 4月  26 15:15 rsyncd.password
-rw-r--r-- 1 root root   7 4月  26 15:15 rsync.password
-rw-r--r-- 1 root root 723 4月  26 15:16 rsync_server.sls

验证rsync服务是或不是安装成功
rsync服务端查看服务是或不是运行

[root@client1 ~]# ll /etc/rsync.password 
-rw------- 1 root root 20 4月  26 15:24 /etc/rsync.password
[root@client1 ~]# cat /etc/rsync.password 
rsync_backup:123456
[root@client1 ~]# ps -ef|grep rsync
root      12636      1  0 15:24 ?        00:00:00 rsync --daemon
root      12710   2400  0 15:25 pts/0    00:00:00 grep --color=auto rsync

好极了,大家在rsync客户端推送1个文本到服务端是不是中标

[root@client2 ~]# cd /backup/
[root@client2 backup]# echo 'this msg from new install rsync client used by test' > test.txt
[root@client2 backup]# ls test.txt 
test.txt
[root@client2 backup]# rsync -avz /backup/  rsync_backup@172.16.0.20::backup --password-file=/etc/rsync.password
sending incremental file list
./
test.txt

sent 132 bytes  received 30 bytes  324.00 bytes/sec
total size is 52  speedup is 0.32

诚如推送成功了,快去rsync服务端看下吧

[root@client1 ~]# cd /backup/
[root@client1 backup]# ll
总用量 4
-rw-r--r-- 1 rsync rsync 52 4月  26 15:46 test.txt
[root@client1 backup]# cat test.txt 
this msg from new install rsync client used by test

好的,顺遂装完,出去抽支烟和活动下颈椎吧。

 

Pillar

在多数情景中,Pillar的显现作为和Grain一致,但有个比不小的分别是:Pillar在Master上开始展览定义,存在于一个集中国化学工业进出口总集团的不二等秘书诀。Pillar数据是与一定minion关联的,也正是说每三个minion都不得不看看自身的数量,所以Pillar能够用来传递敏感数据(在Salt的希图中,Pillar使用独立的加密session,也是为了确定保障敏感数据的安全性)。

Pillar能够用在那几个地点:

一、敏感数据

举例ssh key,加密证书等,由于Pillar使用独立的加密session,能够确定保障这个乖巧数据不被其他minion看到。

2、变量

能够在Pillar中拍卖平台差距性,举例针对分裂的操作系统设置软件包的名字,然后在State中援引。

叁、别的任何数据

能够在Pillar中加多任何索要运用的数额。举例定义用户和UID的对应关系,mnion的剧中人物等。

4、用在Targetting中

Pillar能够用来采用minion,使用-I选项。

定义Pillar:

master配置文件中定义:

暗中同意境况下,master配置文件中的全体数据都助长到Pillar中,且对全数minion可用。若是要禁止使用这一暗中认可值,能够在master配置文件中增添如下数据,重启服务后生效:

pillar_opts: False

应用SLS文件定义Pillar

Pillar使用与State相似的SLS文件。Pillar文件放在master配置文件中pillar_roots定义的目录下。示例如下:

pillar_roots:

    base:

        - /srv/pillar

上面这段代码定义了base情形下的Pillar文件保存在/srv/pillar/目录下。与State相似,Pillar也许有top file,也使用同样的合营形式将数据利用到minion上。示比方下:

# cat /srv/pillar/top.sls:

base:

    '*':

        - packages

# cat /srv/pillar/packages.sls:

{% if grains['os'] == 'RedHat' %}

apache: httpd

git: git

{% elif grains['os'] == 'Debian' %}

apache: apache2

git: git-core

{% endif %}

base蒙受中有所的minion都存有packages中定义的数码。Pillar选拔与file server同样的公文映射格局,在本例中,packages映射到文件/srv/pillar/packages.sls。注意key与value要用冒号加空格分隔,未有空格的话将解析退步。

怎么驾驭minion具有那三个Pillar数据?

在Master上改换pillar文件后,须求用于下命令刷新minion上的多寡:

澳门新萄京官方网站 29

接纳Pillar获取自定义数据:

澳门新萄京官方网站 30

陆.配置认证

(壹)在服务端上操作 新开采一个nb0终端

[[email protected] ~]# salt-key -a nb0
The following keys are going to be accepted:
Unaccepted Keys:
nb0
Proceed? [n/Y] y
Key for minion nb0 accepted.
[[email protected] ~]#

[[email protected] ~]# salt-key -a nb1
The following keys are going to be accepted:
Unaccepted Keys:
nb1
Proceed? [n/Y]y
Key for minion nb1 accepted.
[[email protected] ~]#

[[email protected] ~]# salt-key -a nb2
The following keys are going to be accepted:
Unaccepted Keys:
nb2
Proceed? [n/Y] y
Key for minion nb2 accepted.
You have mail in /var/spool/mail/root
[[email protected] ~]#

[[email protected] ~]# salt-key
Accepted Keys:
nb0
nb1
nb2
Denied Keys:
Unaccepted Keys:
Rejected Keys:
[[email protected] ~]# 

专注: 在==大规模安插迷你on==的时候能够设置自动接受钦命等待认证的 key

在修改/etc/salt/master前,先备份一下

[[email protected] ~]# cp /etc/salt/master /etc/salt/master.bak

通过vi打开/etc/salt/master

[[email protected] ~]# vi /etc/salt/master

找到#auto_accept: False一行,修改False为True

# Enable auto_accept, this setting will automatically accept all incoming
# public keys from the minions. Note that this is insecure.
#auto_accept: False

或然经过sed命令修改

[[email protected] ~]# sed -i 's/#auto_accept: False/auto_accept: True/g' /etc/salt/master

ctrl c截至salt-master,然后再起步

[[email protected] ~]# salt-master start 
^C[WARNING ] Stopping the Salt Master
[WARNING ] Stopping the Salt Master

Exiting on Ctrl-c
[WARNING ] Stopping the Salt Master

Exiting on Ctrl-c

Exiting on Ctrl-c
[[email protected] ~]# salt-master start

(二)测试评释

[[email protected] ~]# salt '*' test.ping
nb2:
    True
nb1:
    True
nb0:
    True
[[email protected] ~]#

这里的 * 必须是在 master 上曾经被接受过的客户端,能够通过 salt-key 查到

远程施行命令

[[email protected] ~]# salt '*' cmd.run   'df -h'
nb0:
    Filesystem           Size  Used Avail Use% Mounted on
    /dev/mapper/cl-root   48G   26G   22G  55% /
    devtmpfs             3.9G     0  3.9G   0% /dev
    tmpfs                3.9G   16K  3.9G   1% /dev/shm
    tmpfs                3.9G  402M  3.5G  11% /run
    tmpfs                3.9G     0  3.9G   0% /sys/fs/cgroup
    /dev/sda1           1014M  139M  876M  14% /boot
    /dev/mapper/cl-home   24G   33M   24G   1% /home
    tmpfs                781M     0  781M   0% /run/user/0
    /dev/loop0           7.8G  7.8G     0 100% /var/ftp/iso-home
nb1:
    Filesystem           Size  Used Avail Use% Mounted on
    /dev/mapper/cl-root   48G  4.3G   44G   9% /
    devtmpfs             3.9G     0  3.9G   0% /dev
    tmpfs                3.9G   12K  3.9G   1% /dev/shm
    tmpfs                3.9G  377M  3.5G  10% /run
    tmpfs                3.9G     0  3.9G   0% /sys/fs/cgroup
    /dev/sda1           1014M  139M  876M  14% /boot
    /dev/mapper/cl-home   24G   33M   24G   1% /home
    tmpfs                781M     0  781M   0% /run/user/0
nb2:
    Filesystem           Size  Used Avail Use% Mounted on
    /dev/mapper/cl-root   48G  4.9G   43G  11% /
    devtmpfs             3.9G     0  3.9G   0% /dev
    tmpfs                3.9G   12K  3.9G   1% /dev/shm
    tmpfs                3.9G  401M  3.5G  11% /run
    tmpfs                3.9G     0  3.9G   0% /sys/fs/cgroup
    /dev/sda1           1014M  139M  876M  14% /boot
    /dev/mapper/cl-home   24G   33M   24G   1% /home
    tmpfs                781M     0  781M   0% /run/user/0
[[email protected] ~]# 

第3大家要精通在设置SaltStack的时候Master 跟Minion端都各自设置了如何文件,这样方便大家去领悟SaltStack日后的一部分惯常操作。我们能够通过以下命令查看SaltStack安装配置的时候分别安 装了如何命令(yum安装情势)。

[[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 命令
/usr/bin/salt-unity
/usr/lib/systemd/system/salt-master.service
/usr/share/man/man1/salt-cp.1.gz
/usr/share/man/man1/salt-key.1.gz
/usr/share/man/man1/salt-master.1.gz
/usr/share/man/man1/salt-run.1.gz
/usr/share/man/man1/salt-unity.1.gz
/usr/share/man/man7/salt.7.gz
[[email protected] ~]#

[[email protected] ~]# salt --version
salt 2015.5.10 (Lithium)
[[email protected] ~]#

测试

> sudo salt "qianlnk" test.ping
qianlnk:
  True

> sudo salt "qianlnk" cmd.run 'uptime'
qianlnk:
  13:34:25 up 14 days, 2:37, 1 user, load average: 0.04, 0.18, 0.16

相比较ansible,Saltstack缺点是索要设置客户端。为了速度建议选用SaltStack

Saltstack 常用命令

一、拷贝文件到客户端

[root@saltstack ~]# salt 'client2' cp.get_file salt://apache.sls /tmp/cp.txt
client2:
    /tmp/cp.txt

客户端查看

[root@client2 ~]# ll /tmp
总用量 4
-rw-r--r-- 1 root root 151 4月  26 14:04 cp.txt

2、拷贝目录到客户端

[root@saltstack ~]# salt 'client2' cp.get_dir salt://test /tmp
client2:
    - /tmp/test/1.sh
    - /tmp/test/123/1.txt

客户端查看

root@client2 ~]# ll /tmp/
总用量 4
-rw-r--r-- 1 root root 151 4月  26 14:04 cp.txt
drwxr-xr-x 3 root root  29 4月  26 14:14 test

三、显示存活的客户端

[root@saltstack ~]# salt-run manage.up
- client1
- client2
- saltstack

四、命令下进行服务端的脚本

[root@saltstack ~]# vim /srv/salt/test/shell.sh
#! /bin/sh
echo "salt server do run shell script on client" > /tmp/shell.txt

[root@saltstack ~]# salt 'client2' cmd.script salt://test/shell.sh

澳门新萄京官方网站 31

 

客户端查看

[root@client2 ~]# ll /tmp/
-rw-r--r-- 1 root root  42 4月  26 14:20 shell.txt
[root@client2 ~]# cat /tmp/shell.txt 
salt server do run shell script on client

正文永远更新链接地址:http://www.linuxidc.com/Linux/2017-10/147566.htm

澳门新萄京官方网站 32

State

简述:SLS(代表SaLt State文件)是Salt State系统的主干。SLS描述了系统的对象状态,由格式轻便的多少整合。那常常被称作配置管理

top.sls是安排水管道理的入口文件,一切都以从此处开始,在master 主机上,暗许存放在/srv/salt/目录.

top.sls 暗中同意从 base 标签开始深入分析实践,下顶级是操作的靶子,能够经过正则,grain模块,或分组名,来进展匹配,再下一流是要施行的state文件,不包换扩充名。

创建/srv/salt/top.sls

澳门新萄京官方网站 33

state实战

澳门新萄京官方网站 34

澳门新萄京官方网站 35

澳门新萄京官方网站 36

七管理对象

设若大家要维护好二个高大的安顿处理种类,那么首先得有限帮忙好大家的管理对象,在SaltStack系 统中大家的管理对象叫作Target,在Master上大家得以应用不一致Target去管理分歧的Minion。那个Target都是透过去管理和相称迷你on的ID来做的局地成团。

[[email protected] ~]# rpm -ql salt-minion
/etc/salt/minion                #salt minion 配置文件
/usr/bin/salt-call              #salt call 拉取命令
/usr/bin/salt-minion            #salt minion  服务命令
/usr/lib/systemd/system/salt-minion.service
/usr/share/man/man1/salt-call.1.gz
/usr/share/man/man1/salt-minion.1.gz
You have mail in /var/spool/mail/root
[[email protected] ~]# 

(一)正则相称

在操作与治本Minion时方可透过正则表达式来 相配Minion ID的格局去管理它们。 举例我们想要 对金童玉女到’nb*’字符串的Minion举行操作,查看各节点的IP

[[email protected] ~]# salt 'nb*' network.ip_addrs
nb0:
    - 192.168.1.160
nb1:
    - 192.168.1.161
nb2:
    - 192.168.1.162
[[email protected] ~]# 

(二)列表匹配

-L, –list 列表相配

[[email protected] ~]# salt -L nb1,nb2 test.ping
nb2:
    True
nb1:
    True
[[email protected] ~]# 

(3)Grians匹配

[[email protected] ~]# salt -G 'os:CentOS' test.ping
nb0:
    True
nb1:
    True
nb2:
    True
You have mail in /var/spool/mail/root
[[email protected] ~]#

内部os:CentOS,这里的对象是一组键值对, 这里运用了Minion的Grains的键值对。在后面介绍 Grains的时候会详细批注,这里只必要驾驭能够通 过键值对的秘诀去相称Minion ID。

-G, –grain grains 匹配

(4)组匹配

第二在master配置文件中定义组

[[email protected] ~]# vi /etc/salt/master

#####         Node Groups           #####
##########################################
# Node groups allow for logical groupings of minion nodes. A group consists of a group
# name and a compound target.
#nodegroups:
#  group1: '[email protected],bar.domain.com,baz.domain.com and bl*.domain.com'
#  group2: '[email protected]:Debian and foo.domain.com'

[email protected] 和[email protected] 分别代表minion和grain新闻 [email protected]开通的是内定的以逗号分隔的四个minionId

Letter

Match Type

Example

Alt Delimiter?

G

Grains glob

[email protected]:Ubuntu

Yes

E

PCRE Minion ID

`[email protected]d .(dev

qa

P

Grains PCRE

[email protected]:(RedHat

Fedora

L

List of minions

[email protected],minion3.domain.com or bl*.domain.com

No

I

Pillar glob

[email protected]:foobar

Yes

J

Pillar PCRE

`[email protected]:^(foo

bar)$`

S

Subnet/IP address

[email protected]/24 or [email protected]

No

R

Range cluster

[email protected]%foo.bar

No

Matchers can be joined using boolean and, or, and not operators.

修改group1:group1: '[email protected],nb2'

-N, –nodegroup 组匹配

(5)CIDPAJERO匹配 1玖2.16八.一.0/二四是3个钦定的CID库罗德网段,这里 CID凯雷德相称的IP地址是Minion连接Matser 4505端口 的发源地址。

[[email protected] ~]# salt -S '192.168.1.0/24' test.ping
nb0:
    True
nb2:
    True
nb1:
    True
[[email protected] ~]# 

选取支持

sys.doc 类似于linux的man命令,可以来得minion模块的详实使用验证。如:

sudo salt ‘qianlnk’ sys.doc test

查看minion qianlnk上test模块的更加多新闻。

SaltStack github地址:https://github.com/saltstack/salt

捌.管理对象属性

Grains是SaltStack组件中丰富重大的组件之 1,因为我们在做布署安插的过程中会平常选取它,Grains是SaltStack记录Minion的片段静态信息的机件,大家得以归纳地了解为Grains里面著录着 每台Minion的1对常用属性,比方CPU、内存、磁 盘、互联网音信等,我们得以由此grains.items查看某 台Minion的有所Grains音讯,Minions的Grains新闻是Minions运行的时候采撷汇报给Master的,在骨子里 应用情形中大家须要依附自个儿的作业要求去自定义 一些Grains

grains&pillar

SaltStack官方网址文书档案地址:https://docs.saltstack.com

8.壹经过Minion配置文件定义Grains

先介绍下比较简单的Grains自定义方法,正是通过Minion配置文件定义

Minions的Grains音讯是在Minions服务运转的时候汇报给Matser的,所以大家须要修改好Minion配置文 件后重启Minion服务。在Minion的/etc/salt/minion配置文件中私下认可有一部分注释行。这里正是在Minion上 的minion配置文件中怎么样定义Grains消息例子。上边只需依靠活动的要求依据以下格式去填写相应的 键值对就行,我们注意格式就行,SaltStack的配备文件的暗中认可格式都以YAML格式:

# Custom static grains for this minion can be specified here and used in SLS
# files just like all other grains. This example sets 4 custom grains, with
# the 'roles' grain having two values that can be matched against.
#grains:
#  roles:
#    - webserver
#    - memcache
#  deployment: datacenter4
#  cabinet: 13
#  cab_u: 14-15

为了统一管理Minion的Grains消息,要求把这几个注释复制到minion.d/grains文件中

自定义 grains,客户端上安顿

[[email protected] ~]# vi /etc/salt/minion

# Custom static grains for this minion can be specified here and used in SLS
# files just like all other grains. This example sets 4 custom grains, with
# the 'roles' grain having two values that can be matched against.
grains:
  roles:
    - nginx
  env:
    - test
  myname:
    - hadron
#  deployment: datacenter4
#  cabinet: 13
#  cab_u: 14-15

重启salt-minion

[[email protected] ~]# ps -aux|grep salt-minion
root      38792  0.0  0.1 231928 15388 pts/0    S    02:32   0:00 /usr/bin/python /usr/bin/salt-minion restart
root      38795  0.5  0.3 547648 28872 pts/0    Sl   02:32   0:00 /usr/bin/python /usr/bin/salt-minion restart
root      43928  0.3  0.1 231928 15384 pts/0    S    02:34   0:00 /usr/bin/python /usr/bin/salt-minion restart
root      43933  1.8  0.3 547648 28784 pts/0    Sl   02:34   0:00 /usr/bin/python /usr/bin/salt-minion restart
root      45693  0.0  0.0 112648   960 pts/0    S    02:34   0:00 grep --color=auto salt-minion
root      50604  0.0  0.1 231928 15384 pts/0    S    Aug17   0:00 /usr/bin/python /usr/bin/salt-minion start
root      50607  0.0  0.3 760916 29024 pts/0    Sl   Aug17   0:48 /usr/bin/python /usr/bin/salt-minion start
root      92074  0.0  0.1 231928 15388 pts/0    S    01:58   0:00 /usr/bin/python /usr/bin/salt-minion restart
root      92077  0.0  0.3 547916 26832 pts/0    Sl   01:58   0:01 /usr/bin/python /usr/bin/salt-minion restart
[[email protected] ~]# kill 38792 43928 45693 50604
-bash: kill: (45693) - No such process
[[email protected] ~]# ps -aux|grep salt-minion
root      43933  1.2  0.3 547648 28784 pts/0    Sl   02:34   0:00 /usr/bin/python /usr/bin/salt-minion restart
root      46529  0.0  0.0 112648   956 pts/0    S    02:35   0:00 grep --color=auto salt-minion
root      92074  0.0  0.1 231928 15388 pts/0    S    01:58   0:00 /usr/bin/python /usr/bin/salt-minion restart
root      92077  0.0  0.3 547916 26832 pts/0    Sl   01:58   0:02 /usr/bin/python /usr/bin/salt-minion restart
[1]   Terminated              salt-minion start
[3]-  Terminated              salt-minion restart
[4]   Terminated              salt-minion restart
[[email protected] ~]# kill 92077 92074 43933
-bash: kill: (43933) - No such process
[[email protected] ~]# ps -aux|grep salt-minion
root      48215  0.0  0.0 112648   960 pts/0    S    02:36   0:00 grep --color=auto salt-minion
[2]   Terminated              salt-minion restart
[[email protected] ~]# salt-minion restart &
[1] 49052
[[email protected] ~]# 

服务端获取 grains

[[email protected] ~]# salt 'nb1' grains.item role env myname
nb1:
    ----------
    env:
        - test
    myname:
        - hadron
    role:
        - nginx
[[email protected] ~]# 
[[email protected] ~]# salt 'nb1' grains.item role
nb1:
    ----------
    role:
        - nginx
[[email protected] ~]#

只顾:grains 在长途试行命令时很有利。我们得以依照 grains 的有个别指标来操作。比如把持有的 web 服务器的 grains 的 role 设置为 nginx,那那样我们就足以批量对 nginx 的服务器举行操作了:

[[email protected] ~]# salt -G role:nginx cmd.run 'hostname'
nb1:
    nb1
[[email protected] ~]# 

[[email protected] ~]# salt -G os:CentOS cmd.run 'hostname'
nb1:
    nb1
nb0:
    nb0
nb2:
    nb2
[[email protected] ~]#

什么是grains?

Grains是服务器的1各个粒子音讯,相当于服务器的一多元物理,软件条件音讯。在施行salt的sls时候能够依靠Grains音信的两样对服务器实行相称分组,比方能够依据系统是centos服务器跟系统是redhat情状的装置差异的软件包。

SaltStack架构

8.2 pillar

pillar 和 grains 不雷同,是在 master 上定义的,并且是针对性 minion 定义的局地音信。像有的比较关键的数码(密码)能够存在 pillar 里,还足以定义变量等。

(一)服务端自定义配置 pillar

[[email protected] ~]# vim /etc/salt/master

找到如下内容,

#pillar_roots:
#  base:
#    - /srv/pillar
#

去掉#号,修改为

pillar_roots:
  base:
    - /srv/pillar

[[email protected] ~]# mkdir /srv/pillar

自定义配置文件,内容如下

[[email protected] ~]# vim /srv/pillar/test.sls
[[email protected] ~]# cat /srv/pillar/test.sls
conf: /etc/test123.conf
myname: hadron
[[email protected] ~]# 

总入口文件,内容如下

[[email protected] ~]# vim /srv/pillar/top.sls
[[email protected] ~]# cat /srv/pillar/top.sls
base:
  'nb1':
    - test
[[email protected] ~]#

重启master

[[email protected] ~]# ps -aux|grep salt-master
root      29178  0.0  0.3 313076 26816 pts/3    S    Aug17   0:00 /usr/bin/python /usr/bin/salt-master start
root      29242  0.5  0.4 407192 32856 pts/3    Sl   Aug17   1:24 /usr/bin/python /usr/bin/salt-master start
root      29243  0.0  0.2 395004 22692 pts/3    Sl   Aug17   0:00 /usr/bin/python /usr/bin/salt-master start
root      29244  0.0  0.3 395004 24292 pts/3    Sl   Aug17   0:00 /usr/bin/python /usr/bin/salt-master start
root      29245  0.0  0.2 313076 22016 pts/3    S    Aug17   0:00 /usr/bin/python /usr/bin/salt-master start
root      29250  0.0  0.3 1204752 28560 pts/3   Sl   Aug17   0:01 /usr/bin/python /usr/bin/salt-master start
root      29251  0.0  0.3 1205064 28624 pts/3   Sl   Aug17   0:01 /usr/bin/python /usr/bin/salt-master start
root      29252  0.0  0.3 1205068 28596 pts/3   Sl   Aug17   0:01 /usr/bin/python /usr/bin/salt-master start
root      29255  0.0  0.3 1205068 28648 pts/3   Sl   Aug17   0:01 /usr/bin/python /usr/bin/salt-master start
root      29258  0.0  0.3 1205072 28584 pts/3   Sl   Aug17   0:01 /usr/bin/python /usr/bin/salt-master start
root      29261  0.0  0.2 689932 22668 pts/3    Sl   Aug17   0:00 /usr/bin/python /usr/bin/salt-master start
root      93354  0.0  0.0 112652   960 pts/2    S    03:07   0:00 grep --color=auto salt-master
[[email protected] ~]# kill 29178 29242 29243 29244 29245 29250 29251 29252 29255 29258 29261

在单身终端运转

[[email protected] ~]# salt-master start

在意:当更换完 pillar 配置文件后,我们得以因而刷新 pillar 配置来获取新的 pillar 状态

[[email protected] ~]# salt '*' saltutil.refresh_pillar
nb1:
    True
nb0:
    True
nb2:
    True
[[email protected] ~]# 

验证

[[email protected] ~]# salt 'nb1' pillar.items
nb1:
    ----------
    conf:
        /etc/test123.conf
    myname:
        hadron
[[email protected] ~]# salt 'nb1' pillar.item conf
nb1:
    ----------
    conf:
        /etc/test123.conf
[[email protected] ~]# salt 'nb1' pillar.item myname
nb1:
    ----------
    myname:
        hadron
[[email protected] ~]# 

pillar 同样能够用来作为 salt 的相称对象

[[email protected] ~]# salt -I 'conf:/etc/test123.conf' test.ping
nb1:
    True
[[email protected] ~]# salt -I 'conf:/etc/test123.conf' cmd.run 'w'
nb1:
     03:17:08 up 67 days, 14:25,  1 user,  load average: 0.02, 0.12, 0.24
    USER     TTY      FROM             [email protected]   IDLE   JCPU   PCPU WHAT
    root     pts/0    hadron           Mon21   24:44   2.38s  0.16s -bash
[[email protected] ~]#

查看grains的功能

sudo salt ‘qianlnk’ sys.list_functions grains
qianlnk: 
  - grains.append 
  - grains.delval 
  - grains.fetch 
  - grains.filter_by 
  - grains.get 
  - grains.get_or_set_hash 
  - grains.has_value 
  - grains.item 
  - grains.items 
  - grains.ls 
  - grains.remove 
  - grains.set 
  - grains.setval 
  - grains.setvals 

在SaltsStack架构中服务端叫作Master,客户端叫作Minion,都是以守护进程的情势运作,向来监听配置文件中定义的ret_port(saltstack客户端与服务端通讯的端口,负担接收客户端发送过来的结果,暗中同意450六端口)和publish_port(saltstack的新闻公布种类,暗许4505端口)的端口。当Minion运转时会自动连接到陈设文件中定义的Master地址ret_port端口实行接二连三认证。

九. 安插管理安装Apache

上面进行的言传身教是长距离通过 yum 方式安装 Apache。步骤如下:

(1)配置

[[email protected] ~]# vim /etc/salt/master

找到如下内容

# file_roots:
#   base:
#     - /srv/salt/

去掉#注释

file_roots:
  base:
    - /srv/salt

[[email protected] ~]# mkdir /srv/salt
[[email protected] ~]# vim /srv/salt/top.sls
[[email protected] ~]# cat /srv/salt/top.sls
base:
  'nb1':
    - apache
[[email protected] ~]#

[[email protected] ~]# vim /srv/salt/apache.sls
[[email protected] ~]# cat /srv/salt/apache.sls
apache-service:
  pkg.installed:
    - names:
      - httpd
      - httpd-devel
  service.running:
    - name: httpd
    - enable: True
[[email protected] ~]#

留神:apache-service 是自定义的 id 名。pkg.installed 为包安装函数,上面是要安装的包的名字。service.running 也是二个函数,来担保钦赐的劳务运维,enable 表示开机运行。

(二)重启服务

[[email protected] ~]# salt-master start 
^C[WARNING ] Stopping the Salt Master
[WARNING ] Stopping the Salt Master
[WARNING ] Stopping the Salt Master

Exiting on Ctrl-c

Exiting on Ctrl-c

Exiting on Ctrl-c
You have mail in /var/spool/mail/root
[[email protected] ~]# salt-master start

[[email protected] ~]# salt 'nb1' state.highstate
nb1:
----------
          ID: apache-service
    Function: pkg.installed
        Name: httpd
      Result: True
     Comment: Package httpd is already installed.
     Started: 03:38:36.137884
    Duration: 1250.258 ms
     Changes:   
----------
          ID: apache-service
    Function: pkg.installed
        Name: httpd-devel
      Result: True
     Comment: The following packages were installed/updated: httpd-devel
     Started: 03:38:37.388313
    Duration: 33668.276 ms
     Changes:   
              ----------
              apr-devel:
                  ----------
                  new:
                      1.4.8-3.el7
                  old:
              apr-util-devel:
                  ----------
                  new:
                      1.5.2-6.el7
                  old:
              cyrus-sasl:
                  ----------
                  new:
                      2.1.26-20.el7_2
                  old:
              cyrus-sasl-devel:
                  ----------
                  new:
                      2.1.26-20.el7_2
                  old:
              httpd:
                  ----------
                  new:
                      2.4.6-45.el7.centos.4
                  old:
                      2.4.6-45.el7.centos
              httpd-devel:
                  ----------
                  new:
                      2.4.6-45.el7.centos.4
                  old:
              httpd-tools:
                  ----------
                  new:
                      2.4.6-45.el7.centos.4
                  old:
                      2.4.6-45.el7.centos
              openldap-devel:
                  ----------
                  new:
                      2.4.40-13.el7
                  old:
----------
          ID: apache-service
    Function: service.running
        Name: httpd
      Result: True
     Comment: Service httpd has been enabled, and is running
     Started: 03:39:11.080192
    Duration: 6685.669 ms
     Changes:   
              ----------
              httpd:
                  True

Summary
------------
Succeeded: 3 (changed=2)
Failed:    0
------------
Total states run:     3
[[email protected] ~]# 

证实 Apache 远程安装已成功。

[[email protected] ~]# systemctl status httpd.service
● httpd.service - The Apache HTTP Server
   Loaded: loaded (/usr/lib/systemd/system/httpd.service; enabled; vendor preset: disabled)
   Active: active (running) since Fri 2017-08-18 03:39:17 EDT; 2min 10s ago
     Docs: man:httpd(8)
           man:apachectl(8)
 Main PID: 11613 (httpd)
   Status: "Total requests: 0; Current requests/sec: 0; Current traffic:   0 B/sec"
   CGroup: /system.slice/httpd.service
           ├─11613 /usr/sbin/httpd -DFOREGROUND
           ├─11715 /usr/sbin/httpd -DFOREGROUND
           ├─11716 /usr/sbin/httpd -DFOREGROUND
           ├─11717 /usr/sbin/httpd -DFOREGROUND
           ├─11718 /usr/sbin/httpd -DFOREGROUND
           └─11719 /usr/sbin/httpd -DFOREGROUND

Aug 18 03:39:16 nb1 systemd[1]: Starting The Apache HTTP Server...
Aug 18 03:39:16 nb1 httpd[11613]: AH00558: httpd: Could not reliably determine the server's fully qualified domain name, using 192.168.1.161. Set the 'ServerN...his message
Aug 18 03:39:17 nb1 systemd[1]: Started The Apache HTTP Server.
Hint: Some lines were ellipsized, use -l to show in full.
[[email protected] ~]# 

查看grains信息

sudo salt ‘qianlnk’ grains.items

澳门新萄京官方网站 37

10.states文件

salt states的主导是sls文件,该文件使用YAML语法定义了部分k/v的数量。

sls文件存放根路线在master配置文件中定义,默感到/srv/salt,该目录在操作系统上不存在,供给手动创造。

在salt中得以经过salt://代替根路径,举个例子你能够透过salt://top.sls访问/srv/salt/top.sls。

在states中top文件也由master配置文件定义,默以为top.sls,该公文为states的入口文件。 贰个粗略的sls文件如下:

apache:
 pkg.installed
 service.running
   - require:
     - pkg: apache

表明:此SLS数据确认保障叫做”apache”的软件包(package)已经安装,并且”apache”服务(service)正在运作中。

  • 首先行,被喻为ID表达(ID Declaration)。ID表达注脚能够操控的名字。
  • 第三行和第四行是State表达(State Declaration),它们各自使用了pkg和service states。pkg state通过系统的包管理其管理非同一般包,service state管理种类服务(daemon)。 在pkg及service列上面是运转的不贰秘诀。方法定义包和服务应该如何是好。此处是软件包应该被设置,服务应该处于运转中。
  • 第陆行使用require。本办法称为”必须指令”(Requisite Statement),表明只有当apache软件包安装成功时,apache服务才开动起来

salt-master是透过写sls配置处理minion上海重机厂新指令的,服务景况等等。

salt states的为主是sls文件,该文件使用YAML语法定义了有的k/v的数码。sls文件存放根路线在master配置文件中定义,默以为/srv/salt,该目录在操作系统上不存在,须要手动成立。

[[email protected] ~]# mkdir -p /srv/salt/base

怎么采纳grains?

  1. Master:调控中央,salt命令运维和能源气象管理
  2. Minion : 需求管住的客户端机器,会积极性去连接Mater端,并从Master端获得能源情形
  3. 音讯,同步财富管理音讯
  4. States:配置管理的指令集
  5. Modules:在指令行5月安排文件中使用的命令模块,能够在指令行中运营
  6. Grains:minion端的变量,静态的
  7. Pillar:minion端的变量,动态的比较私密的变量,能够由此计划文件落到实处共同minions定义
  8. highstate:为minion端下发永恒增多状态,从sls配置文件读取.即同步状态配置
  9. salt_schedule:会活动保持客户端配置

1壹.文件目录管理

指令行中使用

对操作系统是Ubuntu的服务器执行test.ping 
➜ salt sudo salt -G "os:Ubuntu" test.ping 
dk1: 
  True 
dk2: 
  True 

显示cpu架构是x86_64的服务器的cpu个数 
➜ salt sudo salt -G 'cpuarch:x86_64' grains.item num_cpus 
dk2: 
  ---------- 
  num_cpus: 
  4 
dk1: 
  ---------- 
  num_cpus: 
  4 

SaltStack安装配备

1一.一文本管理

(一)服务端配置

[[email protected] ~]# vim /srv/salt/top.sls
[[email protected] ~]# cat /srv/salt/top.sls
base:
  'nb1':
    - apache
  'nb2':
    - filetest
[[email protected] ~]# 

新建 filetest.sls 文件

[[email protected] ~]# vim /srv/salt/filetest.sls
[[email protected] ~]# cat /srv/salt/filetest.sls
file-test:
  file.managed:
    - name: /tmp/filetest.txt
    - source: salt://test/123/1.txt
    - user: root
    - group: root
    - mode: 644
[[email protected] ~]# 

在意:第2行的 file-test 为自定的名字,表示该配置段的名字,可以在别的配置段中引用它;source钦点文件从哪个地方拷贝,这里的 test 目录相当于是 /srv/salt/test 目录;name钦赐远程客户端要转移的公文。

新建所要测试的源文件

[[email protected] ~]# mkdir -p /srv/salt/test/123/
[[email protected] ~]# echo "file test" > /srv/salt/test/123/1.txt
[[email protected] ~]#

奉行命令:

[[email protected] ~]# salt 'nb2' state.highstate
nb2:
----------
          ID: file-test
    Function: file.managed
        Name: /tmp/filetest.txt
      Result: True
     Comment: File /tmp/filetest.txt updated
     Started: 03:59:13.664379
    Duration: 505.159 ms
     Changes:   
              ----------
              diff:
                  New file
              mode:
                  0644

Summary
------------
Succeeded: 1 (changed=1)
Failed:    0
------------
Total states run:     1
[[email protected] ~]# 

(二)客户端验证

[[email protected] ~]# cat /tmp/filetest.txt 
file test
[[email protected] ~]# 

sls中使用

#在top.sls中使用 

'os:Ubuntu': 
  - match: grain 
  - webserver 

在top.sls入口中对系统是Ubuntu的服务器执行webserver.sls里定义的状态信息。 

私下认可以CentOS陆为例,选择yum安装,还恐怕有其余安装形式,如pip、源码、salt-bootstrap

11.2索引管理

(1)接着编辑在此之前的 top.sls 文件

修改为如下

[[email protected] ~]# vim /srv/salt/top.sls
[[email protected] ~]# cat /srv/salt/top.sls
base:
  'nb1':
    - apache
  'nb2':
    - filedir
[[email protected] ~]#

(2)新建 filedir.sls 文件

[[email protected] ~]# vim /srv/salt/filedir.sls
[[email protected] ~]# cat /srv/salt/filedir.sls
file-dir:
  file.recurse:
    - name: /tmp/testdir
    - source: salt://test/123
    - user: root
    - file_mode: 644
    - dir_mode: 755
    - mkdir: True
    - clean: True
[[email protected] ~]#

clean: True 源删除文件或目录,指标也会随着删除,不然不会去除。能够暗许设置为 False

(三)新建所要测试的源目录

/srv/salt/test/12三早就存在,且有一个文书

[[email protected] ~]# ls /srv/salt/test/123
1.txt
[[email protected] ~]# cat /srv/salt/test/123/1.txt 
file test

(四)推行命令

[[email protected] ~]# salt 'nb2' state.highstate
nb2:
----------
          ID: file-dir
    Function: file.recurse
        Name: /tmp/testdir
      Result: True
     Comment: Recursively updated /tmp/testdir
     Started: 01:38:38.129930
    Duration: 392.34 ms
     Changes:   
              ----------
              /tmp/testdir/1.txt:
                  ----------
                  diff:
                      New file
                  mode:
                      0644

Summary
------------
Succeeded: 1 (changed=1)
Failed:    0
------------
Total states run:     1
[[email protected] ~]#

(五)客户端验证

[[email protected] ~]# ls /tmp
filetest.txt                     Jetty_0_0_0_0_16010_master____.6nvknp        Jetty_localhost_40934_datanode____.k20t6j
hadoop-root-journalnode.pid      Jetty_0_0_0_0_16030_regionserver____.45q9os  Jetty_nb2_50070_hdfs____xjgcrn
hadoop-unjar4050493136279788948  Jetty_0_0_0_0_8042_node____19tj0x            systemd-private-bd8f0cf7c19147208fb1f2948ed5483f-vmtoolsd.service-LQvsNz
hsperfdata_root                  Jetty_0_0_0_0_8480_journal____.8g4awa        testdir
[[email protected] ~]# ls /tmp/testdir/
1.txt
[[email protected] ~]# 

(陆)测试增删功能

在服务端新建newDir目录以及文件a,删除一.txt 文件

[[email protected] ~]# cd /srv/salt/test/123
[[email protected] 123]# mkdir newDir
[[email protected] 123]# echo "Hello" > newDir/a
[[email protected] 123]# rm -rf 1.txt

(7)再一次试行命令

[[email protected] ~]# salt 'nb2' state.highstate
nb2:
----------
          ID: file-dir
    Function: file.recurse
        Name: /tmp/testdir
      Result: True
     Comment: Recursively updated /tmp/testdir
     Started: 01:45:59.688250
    Duration: 442.358 ms
     Changes:   
              ----------
              /tmp/testdir/newDir:
                  ----------
                  /tmp/testdir/newDir:
                      New Dir
              /tmp/testdir/newDir/a:
                  ----------
                  diff:
                      New file
                  mode:
                      0644
              removed:
                  - /tmp/testdir/1.txt

Summary
------------
Succeeded: 1 (changed=1)
Failed:    0
------------
Total states run:     1
[[email protected] ~]#

(八)再一次表达

[[email protected] ~]# ls /tmp/testdir/
newDir
[[email protected] ~]# ls /tmp/testdir/newDir/
a
[[email protected] ~]#

专注的是要学有所成创造newDir目录,前提是newDir目录下要有文件;假如未有,客户端是不会创立newDir目录的。

自定义grains

留存方式:

1、core grains 
2、在/etc/salt/grains 中自定义 
3、在/etc/salt/minion 中自定义 
4、在_grains目录中自定义grains,同步到minions 
  • core grains是系统设定的grains,若是自定义的grains的名号跟core grains中的同样则会将之覆盖掉。
  • 在minion端的/etc/salt/grains中定义:
root@17ca9e9efc8a:/etc/salt# cat grains  
roles: 
  - zookeeper 
  - kafka 

在意!该目录下不存在grains文件的话自个儿创立,定义grains后需要重启salt-minion。

测试:

sudo salt -G “roles:kafka”  test.ping
cn2: 
  True
  • 在/etc/salt/minion中定义,类似在/etc/salt/grains中定义。
  • 在master端,_grains目录中定义:
➜  cd /srv/salt 
➜  mkdir _grains 
➜  cd _grains  
➜  vi my_grain.py 
#添加内容 
➜  cat my_grain.py  
def my_grains(): 
grains = {'roles' : ['phpserver','webserver']} 
return grains 

➜  sudo salt -E "dk*" saltutil.sync_grains     #刷新minion的grains 
dk2: 
  - grains.my_grain 
dk1: 
  - grains.my_grain 
➜  sudo salt -E "dk*" grains.item roles 
dk2: 
  ---------- 
  roles: 
  - phpserver 
  - webserver 
dk1: 
  ---------- 
  roles: 
  - phpserver 
  - webserver 

➜ sudo salt -G "roles:webserver" test.ping 
dk2: 
  True 
dk1: 
  True 

EPEL源配置

1二.远程实行

眼前提到远程实施命令 test.ping,cmd.run,点后边的是模块,点后边的是函数;那样总归是不太标准化,上面详细介绍怎么远程推行命令和本子。

什么是pillar?

跟grains的社团是一模一样的,也是字典格式,数据经过key/value的格式进行仓库储存。使用独立的session加密。Pillar是数额主导, 其在Saltstack中至关心重视要的效用正是储存和概念配置管理中供给的一对数码,举例软件版本号、用户名密码等音信。

rpm -ivh https://mirrors.tuna.tsinghua.edu.cn/epel/epel-release-latest-6.noarch.rpm

1二.第11中学距离实施命令

(一)接着编辑之前的 top.sls 文件

[[email protected] ~]# vim /srv/salt/top.sls
[[email protected] ~]# cat /srv/salt/top.sls
base:
  'nb1':
    - cmdtest
  'nb2':
    - filedir
[[email protected] ~]# 

(2)新建 cmdtest.sls 文件

[[email protected] ~]# vim /srv/salt/cmdtest.sls
[[email protected] ~]# cat /srv/salt/cmdtest.sls
cmd-test:  
  cmd.run:
    - onlyif: test -f /tmp/1.txt
    - names:
      - touch /tmp/cmdtest.txt
      - mkdir /tmp/cmdtest
    - user: root
[[email protected] ~]# 

规格 onlyif 表示若 /tmp/一.txt文件存在,则进行前边的命令;可以应用 unless,两个正好相反。

[[email protected] ~]# echo "hello" > /tmp/1.txt
[[email protected] ~]# cat /tmp/1.txt 
hello
[[email protected] ~]#

(三)施行命令

[[email protected] ~]# salt 'nb1' state.highstate
nb1:
----------
          ID: cmd-test
    Function: cmd.run
        Name: touch /tmp/cmdtest.txt
      Result: True
     Comment: Command "touch /tmp/cmdtest.txt" run
     Started: 02:23:07.347360
    Duration: 565.866 ms
     Changes:   
              ----------
              pid:
                  7209
              retcode:
                  0
              stderr:
              stdout:
----------
          ID: cmd-test
    Function: cmd.run
        Name: mkdir /tmp/cmdtest
      Result: True
     Comment: Command "mkdir /tmp/cmdtest" run
     Started: 02:23:07.913505
    Duration: 208.682 ms
     Changes:   
              ----------
              pid:
                  7245
              retcode:
                  0
              stderr:
              stdout:

Summary
------------
Succeeded: 2 (changed=2)
Failed:    0
------------
Total states run:     2
[[email protected] ~]#

(4)验证

[[email protected] ~]# ll /tmp|grep cmd
drwxr-xr-x 2 root root   6 Aug 21 02:23 cmdtest
-rw-r--r-- 1 root root   0 Aug 21 02:23 cmdtest.txt
[[email protected] ~]# 

查看grains的功能

➜ ~ sudo salt "cn1" sys.list_functions pillar 
cn1: 
  - pillar.data 
  - pillar.ext 
  - pillar.fetch 
  - pillar.file_exists 
  - pillar.get 
  - pillar.item 
  - pillar.items 
  - pillar.keys 
  - pillar.ls 
  - pillar.obfuscate 
  - pillar.raw 

Pillar数据跟特定的Minion关联,能够用来传递Minion自身的音信。管理员也得以自定义本人的pillar来治本minion。

安装、配置管理端(master)

1二.二 远程施行脚本

(一)接着编辑此前的 top.sls 文件

[[email protected] ~]# vim /srv/salt/top.sls
[[email protected] ~]# cat /srv/salt/top.sls
base:
  'nb1':
    - cmdtest
  'nb2':
    - shelltest
[[email protected] ~]# 

(2)新建 shelltest.sls 文件

[[email protected] ~]# vim /srv/salt/shelltest.sls
[[email protected] ~]# cat /srv/salt/shelltest.sls
shell-test:
  cmd.script:
    - source: salt://test/1.sh
    - user: root
[[email protected] ~]# 

(叁)新建 一.sh 脚本文本

[[email protected] ~]# vim /srv/salt/test/1.sh
[[email protected] ~]# cat /srv/salt/test/1.sh
#!/bin/bash
touch /tmp/shelltest.txt
if [ -d /tmp/shelltest ]
then
    rm -rf /tmp/shelltest
else
    mkdir /tmp/shelltest
fi
[[email protected] ~]#

(四)实行命令

[[email protected] ~]# salt 'nb2' state.highstate
nb2:
----------
          ID: shell-test
    Function: cmd.script
      Result: True
     Comment: Command 'shell-test' run
     Started: 02:35:33.341722
    Duration: 585.072 ms
     Changes:   
              ----------
              pid:
                  48228
              retcode:
                  0
              stderr:
              stdout:

Summary
------------
Succeeded: 1 (changed=1)
Failed:    0
------------
Total states run:     1
[[email protected] ~]# 

(5)客户端验证

[[email protected] ~]# ll /tmp|grep shell
drwxr-xr-x 2 root root   6 Aug 21 02:35 shelltest
-rw-r--r-- 1 root root   0 Aug 21 02:35 shelltest.txt
[[email protected] ~]# 

通过下面的事例,我们兑现了长途实践脚本;假使大家想一键远程安装 LAMP 大概LNMP,那么只需把本例中的 一.sh 脚本替换来 1键安装的本子就行。

自定义pillar

在master的sls文件中定义,master配置供给钦定pillar的目录。

pillar_roots: 
  base: 
  - /srv/pillar 

➜ pillar git:(master) ✗ pwd
/srv/pillar

➜ pillar git:(master) ✗ cat top.sls 
base:
  '*':
  - data
  - git

➜ pillar git:(master) ✗ cat data/init.sls
roles: webserver
➜ pillar git:(master) ✗ cat git.sls
{% if grains[‘os’] == ‘CentOs’ %}
git: git
{% elif grains[‘os’] == ‘Debian’ %}
git: git-core
{% endif %}

暗许意况下,master配置文件中的全数数据都会加多到pillar中,且对具备的minion可用。若是要禁止那三个暗中同意值,能够设置master文件中的选项:
pillar_opts: False

pillar跟sls同样有友好的top.sls文件作为入口来公司别的的pillar。base中 “×”制定具备minion具有pillar:mongodb、zookeeper、kafka、supervisor, 然后是各种minion组有本身的init.sls。kafka.sls中定义kafka对应的1对信息。

修改完pillar文件后供给用以下的指令刷新以下minion的消息:

➜ pillar git:(master) ✗ sudo salt 'cn1' saltutil.refresh_pillar 
cn1: 
  True 
yum -y install salt-master
service salt-master start

1三.管制职责安插

使用pillar

Target:

#salt使用 -l 选项来使用pillar
➜ pillar git:(master) ✗ sudo salt -l ”roles:webserver” test.ping

sls文件中使用:

#如根据系统环境安装git
➜ salt git:(master) ✗ cat git_env.sls
git:
  pkg.installed:
    - name: {{pillar[‘git’]}}

#或者:
git:
  pkg.installed:
    - name: {{ salt[‘pillar.get’](‘git’, ‘git’) }}

注:需要iptables开启master端4505、4506端口

13.1 建立 cron

(1)编辑 top.sls 文件

[[email protected] ~]# vim /srv/salt/top.sls
[[email protected] ~]# cat /srv/salt/top.sls
base:
  'nb1':
    - crontest
  'nb2':
    - shelltest
[[email protected] ~]#

(2)编辑 crontest.sls 文件

[[email protected] ~]# vim /srv/salt/crontest.sls
[[email protected] ~]# cat /srv/salt/crontest.sls
cron-test:
  cron.present:
    - name: /bin/touch /tmp/111.txt
    - user: root
    - minute: '*'
    - hour: 20
    - daymonth: 1-10
    - month: '3,5'
    - dayweek: '*'
[[email protected] ~]#

注意,*亟待用单引号引起来。当然大家还足以接纳 file.managed 模块来保管 cron,因为系统的 cron都以以安顿文件的样式存在的。

(叁)实践命令

[[email protected] ~]# salt 'nb1' state.highstate
nb1:
----------
          ID: cron-test
    Function: cron.present
        Name: /bin/touch /tmp/111.txt
      Result: True
     Comment: Cron /bin/touch /tmp/111.txt added to root's crontab
     Started: 02:47:51.454886
    Duration: 1478.963 ms
     Changes:   
              ----------
              root:
                  /bin/touch /tmp/111.txt

Summary
------------
Succeeded: 1 (changed=1)
Failed:    0
------------
Total states run:     1
[[email protected] ~]# 

(4)客户端验证

[[email protected] ~]# crontab -l
00      03      *       *       *       ntpdate 192.168.1.81
00      03      *       *       *       ntpdate 192.168.1.81
00      03      *       *       *       ntpdate 192.168.1.81
00      03      *       *       *       ntpdate 192.168.1.81
00      03      *       *       *       ntpdate 192.168.1.160
# Lines below here are managed by Salt, do not edit
# SALT_CRON_IDENTIFIER:/bin/touch /tmp/111.txt
* 20 1-10 3,5 * /bin/touch /tmp/111.txt
[[email protected] ~]# 

管理对象Target

在saltstack系统中,大家的管理对象叫作Target。在Master上我们得以采纳分歧的Target去管理不一样的Minion。那些Target能够是主机名、系统消息、定义的分组、甚至是自定义绑定的靶子。

安装被管理端

13.2 删除 cron

(一)修改 crontest.sls 文件 把 cron.present: 改成 cron.absent: 注意:两个不可能存活,要想删除贰个 cron,那此前的 present 就得替换掉或许去除掉。

[[email protected] ~]# vim /srv/salt/crontest.sls
[[email protected] ~]# cat /srv/salt/crontest.sls
cron-test:
  cron.absent:
    - name: /bin/touch /tmp/111.txt
    - user: root
    - minute: '*'
    - hour: 20
    - daymonth: 1-10
    - month: '3,5'
    - dayweek: '*'
[ro
[email protected] ~]#

(贰)施行命令

[[email protected] ~]# salt 'nb1' state.highstate
nb1:
----------
          ID: cron-test
    Function: cron.absent
        Name: /bin/touch /tmp/111.txt
      Result: True
     Comment: Cron /bin/touch /tmp/111.txt removed from root's crontab
     Started: 02:56:03.583557
    Duration: 29.663 ms
     Changes:   
              ----------
              root:
                  /bin/touch /tmp/111.txt

Summary
------------
Succeeded: 1 (changed=1)
Failed:    0
------------
Total states run:     1
[[email protected] ~]# 

(三)客户端验证

[[email protected] ~]# crontab -l
00      03      *       *       *       ntpdate 192.168.1.81
00      03      *       *       *       ntpdate 192.168.1.81
00      03      *       *       *       ntpdate 192.168.1.81
00      03      *       *       *       ntpdate 192.168.1.81
00      03      *       *       *       ntpdate 192.168.1.160
# Lines below here are managed by Salt, do not edit
[[email protected] ~]#

有啥相称?

所有操作目标参数:

Target Options: 
-E, --pcre                   正则匹配 
-L, --list                   列表匹配 
-G, --grain                  grains 匹配 
--grain-pcre                 grains 加正则匹配 
-N, --nodegroup              组匹配 
-R, --range                  范围匹配 
-C, --compound               综合匹配( 指定多个匹配) 
-I, --pillar                 pillar 值匹配 
-S, --ipcidr                 minions网段地址匹配 
yum -y install salt-minion
sed -i 's@#manster:.*@manster: master_ipaddress@' /etc/salt/minion  #master_ipaddress为管理端IP
echo 10.252.137.141 > /etc/salt/minion_id #个人习惯使用IP,默认主机名
service salt-minion start

1四.Saltstack 常用命令

种种相称的详细表明

  • minion ID
sudo salt ‘cn1’ test.ping
  • 通配符(*)
sudo salt ‘cn1’ test.ping
# 匹配所有的minion 
sudo salt '*' test.ping 

# 匹配ID开头为cn的minion 
sudo salt 'cn*' test.ping 

# 匹配cn1、cn2、cn3、cn4、cn5 
sudo salt 'cn[1-5]' test.ping 

# 匹配web-x, web-y, web-z 
sudo salt 'web-[x-z]' test.ping 
  • 正则表明式
# 如: 匹配ID为assassin-production,assassin-sandbox 
sudo salt -E 'assassin-[production|sandbox]' test.ping 

# 在state中也可以这么用 
base: 
  'assassin-[production|sandbox]' 
    - match: pcre 
    - webserver 
  • 列表相配
# 对一些有特殊要求的minion可以手动指定ID作为Target 
sudo salt -L 'cn1, cn2, cn23' test.ping 
  • grains匹配
# 如 测试所有操作系统为ubuntu的为minion 
sudo salt -G 'os:Ubuntu' test.ping 

# 查看CPU架构是x86_64的minion的cpu个数 
sudo salt -G 'cpuarch:x86_64' grains.item numcpus 


# 在top.sls中使用 
'node_type:web' 
  - match: grain 
  - webserver 
'node_type:mysql' 
  - match: grain 
  - database 
  • pillar匹配
  # pillar匹配跟grains差不多, 不过将grains对象换成pillar 
sudo salt -I 'somekey:specialvalue' test.ping 
  • 组匹配
# 节点分组需要先在top.sls或者master配置文件中定义好。
nodegroups: 
 group1: 'L@foo.domain.com,bar.domain.com,baz.domain.com or bl*.domain.com' 
 group2: 'G@os:Debian and foo.domain.com' 
 group3: 'G@os:Debian and N@group1' 
 group4: 
 - 'G@foo:bar' 
 - 'or' 
 - 'G@foo:baz' 

sudo salt -N group1 test.ping 

# 在top.sls中: 
base: 
  group1: 
  - match: nodegroup 
  - webserver 
  • CIDR匹配
# 指定192.168.1.0/24网段内的minion 
sudo salt -S '192.168.1.0/24' test.ping 
  • 复合相配
salt -C 'G@os:Ubuntu or L@cn1,cn2' test.ping

最后,有时候相称到的minion会大多,借使直接全体推行master可能会挂机。
之所以大家能够分批实践:

# 一次10个minion执行 
sudo salt '*' -b 10 test.ping 

# 一次25%执行 
sudo salt -G 'os:Ubuntu' --batch-size 25% test.ping 

Master与Minion认证

1肆.一拷贝文件到客户端

[[email protected] ~]# salt 'nb1' cp.get_file salt://apache.sls /tmp/cp.txt
nb1:
    /tmp/cp.txt
[[email protected] ~]#

[[email protected] ~]# cat /tmp/cp.txt 
apache-service:
  pkg.installed:
    - names:
      - httpd
      - httpd-devel
  service.running:
    - name: httpd
    - enable: True
[[email protected] ~]# 

针对管理对象Target的操作,Module

  • 查阅全部的module列表
sudo salt "cn1" sys.list_modules  
cn1: 
  - aliases 
  - alternatives 
  - archive 
  - artifactory 
... 
  • 翻开钦命module的具备function
➜ pillar git:(master) ✗ sudo salt "cn1" sys.list_functions cmd 
cn1: 
  - cmd.exec_code 
  - cmd.exec_code_all 
  - cmd.has_exec 
  - cmd.powershell 
  - cmd.retcode 
  - cmd.run 
  - cmd.run_all 
  - cmd.run_bg 
  - cmd.run_chroot 
  - cmd.run_stderr 
  - cmd.run_stdout 
  - cmd.script 
  …
  • 查阅内定module用法
➜ pillar git:(master) ✗ sudo salt "cn1" sys.doc cmd 
cmd.exec_code: 

  Pass in two strings, the first naming the executable language, aka - 
  python2, python3, ruby, perl, lua, etc. the second string containing 
  the code you wish to execute. The stdout will be returned. 

  CLI Example: 

  salt '*' cmd.exec_code ruby 'puts "cheese"' 

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命令accept minion public key,那样在master的/etc/salt/pki/master/minions下的将会存放以minion id命名的 public key,然后master就会对minion发送指令了。
证实命令如下:

1肆.二 拷贝目录到客户端

[[email protected] ~]# salt 'nb1' cp.get_dir salt://test /tmp
nb1:
    - /tmp/test/1.sh
    - /tmp/test/123/newDir/a
[[email protected] ~]# 

[[email protected] ~]# ll /tmp/test/
total 4
drwxr-xr-x 3 root root  20 Aug 21 03:02 123
-rw-r--r-- 1 root root 126 Aug 21 03:02 1.sh
[[email protected] ~]#

布置处理States

salt states是salt模块的强大。主系统使用的意况系统叫SLS系统,SLS代表Saltstack State。States是Saltstack中的配置语言,在平日实行配置管理时须求编写制定大批量的States文件。例如大家须求设置3个包,然后管理3个计划文件,最终有限援助有些服务平常运转。这里就需求大家编辑一些states sls文件去讲述和促成大家想要的效益。

[root@10.252.137.14 ~]# salt-key -L    #查看当前证书签证情况
Accepted Keys:
Unaccepted Keys:
10.252.137.141
Rejected Keys:
[root@10.252.137.14 ~]# salt-key -A -y   #同意签证所有没有接受的签证情况
The following keys are going to be accepted:
Unaccepted Keys:
10.252.137.141
Key for minion 10.252.137.141 accepted.
[root@10.252.137.14 ~]# salt-key -L
Accepted Keys:
10.252.137.141
Unaccepted Keys:
Rejected Keys:

1四.3 显示存活的客户端

[[email protected] ~]# salt-run manage.up
- nb0
- nb1
- nb2
[[email protected] ~]# 

翻开state modules的详实使用

# 1、查看所有states列表
sudo salt ‘cn1’ sys.list_state_modules

# 2、 查看指定state的所有function
sudo salt ‘cn1’ sys.list_state_functions cmd

# 3、查看指定states的用法
sudo salt ‘cn1’ sys.state_doc cmd

# 4、查看指定state指定function的用法
sudo salt ‘cn1’ sys.state_doc cmd.run

SaltStack远程推行

14.四 命令下举行服务端的脚本

[[email protected] ~]# vim /srv/salt/test/shell.sh
[[email protected] ~]# cat /srv/salt/test/shell.sh
#! /bin/bash
echo "hadron.cn" > /tmp/shell.txt
[[email protected] ~]# 

[[email protected] ~]# salt 'nb2' cmd.script salt://test/shell.sh
nb2:
    ----------
    pid:
        86257
    retcode:
        0
    stderr:
    stdout:
[[email protected] ~]# 

[[email protected] ~]# cat /tmp/shell.txt 
hadron.cn
[[email protected] ~]# 

Salt state树

# 在/etc/salt/master中配置file_roots
file_roots: 
  base: 
  - /srv/salt 
[root@10.252.137.14 ~]# salt '*' test.ping
10.252.137.141:
True
[root@10.252.137.14 ~]# salt '*' cmd.run 'ls -al'
10.252.137.141:
total 40
drwx------  4 root root 4096 Sep  7 15:01 .
drwxr-xr-x 22 root root 4096 Sep  3 22:10 ..
-rw-------  1 root root  501 Sep  7 14:49 .bash_history
-rw-r--r--  1 root root 3106 Feb 20  2014 .bashrc
drwx------  2 root root 4096 Jan 30  2015 .cache
drwxr-xr-x  2 root root 4096 Apr 22 13:57 .pip
-rw-r--r--  1 root root  140 Feb 20  2014 .profile
-rw-r--r--  1 root root   64 Apr 22 13:57 .pydistutils.cfg
-rw-------  1 root root 4256 Sep  7 15:01 .viminfo

15.问题

 [[email protected] ~]# salt-master start
[ERROR   ] An extra return was detected from minion nb1, please verify the minion, this could be a replay attack
[ERROR   ] An extra return was detected from minion nb1, please verify the minion, this could be a replay attack

施行贰遍命令,再次回到多个值

 [[email protected] ~]# salt '*' cmd.run   'df -h'
nb1:
    Filesystem           Size  Used Avail Use% Mounted on
    /dev/mapper/cl-root   48G  4.3G   44G   9% /
    devtmpfs             3.9G     0  3.9G   0% /dev
    tmpfs                3.9G   24K  3.9G   1% /dev/shm
    tmpfs                3.9G  385M  3.5G  10% /run
    tmpfs                3.9G     0  3.9G   0% /sys/fs/cgroup
    /dev/sda1           1014M  139M  876M  14% /boot
    /dev/mapper/cl-home   24G   33M   24G   1% /home
    tmpfs                781M     0  781M   0% /run/user/0
nb1:
    Filesystem           Size  Used Avail Use% Mounted on
    /dev/mapper/cl-root   48G  4.3G   44G   9% /
    devtmpfs             3.9G     0  3.9G   0% /dev
    tmpfs                3.9G   24K  3.9G   1% /dev/shm
    tmpfs                3.9G  385M  3.5G  10% /run
    tmpfs                3.9G     0  3.9G   0% /sys/fs/cgroup
    /dev/sda1           1014M  139M  876M  14% /boot
    /dev/mapper/cl-home   24G   33M   24G   1% /home
    tmpfs                781M     0  781M   0% /run/user/0
nb0:
    Filesystem           Size  Used Avail Use% Mounted on
    /dev/mapper/cl-root   48G   27G   22G  55% /
    devtmpfs             3.9G     0  3.9G   0% /dev
    tmpfs                3.9G   16K  3.9G   1% /dev/shm
    tmpfs                3.9G  394M  3.5G  11% /run
    tmpfs                3.9G     0  3.9G   0% /sys/fs/cgroup
    /dev/sda1           1014M  139M  876M  14% /boot
    /dev/mapper/cl-home   24G   33M   24G   1% /home
    tmpfs                781M     0  781M   0% /run/user/0
    /dev/loop0           7.8G  7.8G     0 100% /var/ftp/iso-home
[[email protected] ~]#

难题时有产生的因由在node二节点上再度运维

 [[email protected] ~]# salt-minion start
^C[WARNING ] Stopping the Salt Minion
[WARNING ] Exiting on Ctrl-c
[[email protected] ~]# 

ctrl c终止第一回的salt-minion运转就能够。

Salt state的top文件

top.sls是state系统的输入文件,它在广大布置处理职业中承受钦赐哪些设备调用哪些states.sls文件。top.sls是salt state暗中同意的sls文件,在未做特别制定的时候salt state会暗中同意调用top.sls来实行。如:

sudo salt ‘cn1’ state.hightate

top.sls须求手动创制,地点则是salt state树定义的目录/srv/salt下。

salt试行命令的格式如下:

调试Salt

# 开启debug日志
salt-minion -l debug

# 设置超时
salt ‘*’ state.highstate -t 60
salt ''  [arguments]

简单易行的例证

cat top.sls
base:                       # 匹配状态树的base目录配置
  ‘*’:                        # 匹配minion
    - webserver         # 表示执行base目录下的webserver.sls状态文件或者webserver/init.sls文件

cat webserver.sls
apache:                   # ID声明,跟yum install apache指定的名称一样
  pkg:                      # 状态声明,说明要做什么状态操作,pkg使用系统本地的软件包管理工具
    - installed           # 函数声明,说明该sls文件指定的执行操作函数
  service:                #管理系统守护进程
    - running
    - require:
      - pkg: apache

# 更新所有minion的状态
sudo salt “*” state.highstate

注:这样就可以在所有的minion中安装apache了。

当然也可以不要top.sls,直接指定sls文件来执行
sudo salt ‘cn1’ state.sls webserver

或者使用apply function,apply会根据后面的参数来决定调用state.highstate还是state.sls
sudo salt ‘cn1’ state.apply webserver

target:实行salt命令的靶子,能够使用正则表明式

简易的扩大

加多计划文件和用户
配置apache那样的劳动还供给丰裕任何的故事情节,例如apache的配备文件,运营apache服务的用户和组。

# 目录结构:
ls /srv/salt/apache
init.sls
http.conf

cat init.sls
apache:                   
 pkg:                     
    - installed          
  service:               
    - running
    - watch:
      - pkg: apache
      - file: /etc/httpd/conf/httpd.conf
      - user: apache
  user.present:
    - did: 87
    - gid: 87
    - home: /var/www/html
    - shell: /bin/nologin
    - require:
      - group: apache
group.present:
  - gid: 87
  - require:
    - pkg: apache
/etc/httpd/conf/httpd.conf
  file.managed:
    - source: salt://apache/httpd.conf
    - user: root
    - group: root
    - mode: 644

function:方法,由module提供

自定义module

听他们讲官方网站的传道,自定义module应该存放在/srv/salt/_modules/目录下。同步到minion的不二秘诀有二种:

state.apply
saltutil.sync_modules
saltutil.sync_all

例子:

#encoding = utf8

def test():
    return 'this is a test'

def get_target():
    return __grains__['target']

def get_domain(service):
    dom = __pillar__[service]['domain']
    return dom

def deploy(service,version):
    target = get_target()
    domain = get_domain(service)
    cmd = "gover -s " service " -t " target " -v " str(version) " -d "  domain
    return __salt__['cmd.run'](cmd)

arguments:function的参数

target能够是以下内容:

  1. 正则表明式

    salt -E 'Minion*' test.ping #主机名以Minion开通

  2. 列表相称

    salt -L Minion,Minion1 test.ping

  3. Grians匹配

    salt -G 'os:CentOS' test.ping

os:CentOS(暗中认可存在)是Grains的键值对,数据以yaml保存在minion上,可在minion端直接编辑/etc/salt/grains,yaml格式。可能在master端施行salt '*' grains.setval key "{'sub-key': 'val', 'sub-key二': 'val二'}" ,具体文书档案(命令salt * sys.doc grains查看文书档案)

  1. 组匹配

    salt -N groups test.ping

如,在master新建/etc/salt/master.d/nodegroups.conf ,yaml格式

  1. 复合相配

    salt -C 'G@os:CentOS or L@Minion' test.ping

  2. Pillar值匹配

    salt -I 'key:value' test.ping

/etc/salt/master设置pillar_roots,数据以yaml保存在Master上

  1. CIDR匹配

    salt -S '10.252.137.0/24' test.ping

拾.252.137.0/二肆是3个点名的CID本田UR-V网段

function是module提供的法子

透过上面发号施令可以查阅全体的function:
salt '10.252.137.141' sys.doc cmd

function能够承受参数:

salt '10.252.137.141' cmd.run 'uname -a'

再者补助至关心注重要字参数:

在所有minion上切换到/目录以salt用户运行uname -a命令。
salt '10.252.137.141' cmd.run 'uname -a' cwd=/ user=salt

SaltStack配置管理

states文件

salt states的为主是sls文件,该文件使用YAML语法定义了有的k/v的多寡。

sls文件存放根路线在master配置文件中定义,默感到/srv/salt,该目录在操作系统上不设有,需求手动创立。

在salt中能够通过salt://代替根路线,比如你能够经过salt://top.sls访问/srv/salt/top.sls。

在states中top文件也由master配置文件定义,默以为top.sls,该文件为states的入口文件。

一个简练的sls文件如下:

apache:
 pkg.installed
 service.running
   - require:
     - pkg: apache

证实:此SLS数据确认保障叫做"apache"的软件包(package)已经设置,并且"apache"服务(service)正在运转中。

  • 首先行,被誉为ID表达(ID Declaration)。ID表明评释能够操控的名字。
  • 其次行和第6行是State表明(State Declaration),它们分别选拔了pkg和service states。pkg state通过系统的包管理其管理主要包,service state管理体系服务(daemon)。 在pkg及service列下面是运转的秘技。方法定义包和服务应该咋办。此处是软件包应该被设置,服务应该处于运营中。
  • 第5行使用require。本办法称为”必须指令”(Requisite Statement),评释唯有当apache软件包安装成功时,apache服务才开动起来。

state和方法能够经过点连起来,下面sls文件和底下文件意思同样。

apache:
 pkg.installed
 service.running
   - require:
     - pkg: apache

将上边sls保存为init.sls并放置在sal://apache目录下,结果如下:

/srv/salt
├── apache
│   └── init.sls
└── top.sls

top.sls怎么着定义呢?

master配置文件中定义了二种景况,各个情形都足以定义四个目录,不过要幸免抵触,分别如下:

# file_roots:
#   base:
#     - /srv/salt/
#   dev:
#     - /srv/salt/dev/services
#     - /srv/salt/dev/states
#   prod:
#     - /srv/salt/prod/services
#     - /srv/salt/prod/states

top.sls能够那样定义:

base:
  '*':
   - apache

说明:

率先行,注明使用base情形

其次行,定义target,这里是合作全部

其叁行,注脚使用什么states目录,salt会搜索每种目录下的init.sls文件。

运行states

一旦创造完states并修改完top.sls之后,你能够在master上实施下边发号施令:

[root@10.252.137.14 ~]# salt '*' state.highstate
sk2:
----------
State: - pkg
Name:      httpd
Function:  installed
Result:    True
Comment:   The following packages were installed/updated: httpd.
Changes:
----------
httpd:
----------
new:
2.2.15-29.el6.centos
old:
----------
State: - service
Name:      httpd
Function:  running
Result:    True
Comment:   Service httpd has been enabled, and is running
Changes:
----------
httpd:
True
Summary
------------
Succeeded: 2
Failed:    0
------------
Total:     2

地点命令会触发全部minion从master下载top.sls文件以及中间定3个的states,然后编写翻译、实践。实行完事后,minion会将施行结果的摘要新闻反映给master。

澳门新萄京官方网站 38

本文由澳门新萄京官方网站发布于服务器运维,转载请注明出处:澳门新萄京官方网站立刻入门教程,快捷入门S

关键词: