saltstack(一)简介并安装

了解saltstack

文档

SaltStack是一个服务器基础架构集中化管理平台,具备配置管理远程执行监控等功能,基于Python语言实现,结合轻量级消息队列(ZeroMQ)与Python第三方模块(Pyzmq、PyCrypto、Pyjinjia2、python-msgpack和PyYAML等)构建。
SaltStack是一个分布式远程执行系统,用来在远程节点上执行命令和查询数据。
通过部署SaltStack,我们可以在成千万台服务器上做到批量执行命令,根据不同业务进行配置集中化管理、分发文件、采集服务器数据、操作系统基础及软件包管理等,SaltStack是运维人员提高工作效率、规范业务配置与操作的利器。

原理

SaltStack 采用 C/S模式,server端就是salt的master,client端就是minion,minion与master之间通过ZeroMQ消息队列通信。
minion上线后先与master端联系,把自己的pub key发过去,这时master端通过salt-key -L命令就会看到minion的key,接受该minion-key后,也就是master与minion已经互信。

端口

Master与Minion的连接
salt-master启动时会运行两个端口4505和4506:
4505:他是salt的消息发布,系统底层基于zeromq pub(发布订阅),可以在master的配置文件中publish_port修改参数。
作用:负责下发命令,并且所有的minion都会连接到4505这个端口,可通过lsof -i:4505命令查看,注:可在minion的配置文件修改master参数指定主master。
4506:他是salt消息收集,系统底层基于zeromq REQ/REP(请求回应模型),在master配置文件中ret_port修改参数。
作用:负责接收客户端发送过来的结果。

组件

1、Salt Master:中心管理系统。此系统用于将命令和配置发送到在受管系统上运行的Salt minion。
在这里插入图片描述

2、Salt Minions:被管理的系统。 该系统运行Salt minion,它从Salt master接收命令和配置。
在这里插入图片描述

3、Execution Modules:从命令行针对一个或多个受管系统执行临时命令。 对以下管理场景有帮助:
● 实时监控,状态和盘点
● 一次性命令和脚本
● 部署关键更新
在这里插入图片描述

4、Formulas (States):一种系统配置的声明性或命令式表示。
在这里插入图片描述

5、Grains:系统变量。 Grains是有关底层受管系统的静态信息,包括操作系统,内存和许多其他系统属性。 您还可以为任何系统定义自定义grains。
在这里插入图片描述

6、Pillar:用户定义的变量。 这些安全变量被定义并存储在Salt Master中,然后使用目标“分配”给一个或多个minions。 pilla数据存储诸如端口,文件路径、配置参数和密码之类的值。
在这里插入图片描述

7、Top File:将formulas和pilla数据与Salt minions匹配。
在这里插入图片描述

8、Runners:在Salt master上执行的模块,用于执行支持任务。 Salt runners报告作业状态、连接状态、从外部API读取数据,查询连接的Salt minions等。例如,Orchestrate运行器协调跨多个系统的配置部署。
在这里插入图片描述

9、Returners:将Salt minions返回的数据发送到另一个系统,例如数据库。 Salt Returners可以在Salt minion或Salt master上运行。
在这里插入图片描述

10、Reactor:在SaltStack环境中发生特定事件时触发相应的响应。
在这里插入图片描述

11、Salt SSH:在没有Salt minion的系统上通过SSH运行Salt命令。
在这里插入图片描述

安装

从epel上下载 或 使用epel源
主节点:
yum install salt-master -y 
systemctl start salt-master.service
客户端:
yum install salt-minion -y
vim /etc/salt/minion
	master: 172.25.44.11 	#指向管理端地址
systemctl start salt-minion.service

注意:在服务启动后,在master和minion会分别生成认证文件,所以我们需要进行认证
用salt-key -a hostname进行认证
认证成功后master与minion都会有对方的公钥,就可以进行通信了

命令解释

1.测试连通
salt '*' test.ping
1
'*'表示所有目标机器 test.ping 只是模块里的一个功能,用来测试连通性

2.常用命令结构
salt [options]<目标机><功能> [arguments]

例如:
#对机器node1使用w命令
test 'node1' cmd.run 'w'

3.常用命令
salt-run
该命令执行runner(salt带的或者自定义的,runner以后会讲),通常在master端执行,比如经常用到的manage

salt-run [options] [runner.func]
salt-run manage.status   ##查看所有minion状态
salt-run manage.down     ##查看所有没在线minion
salt-run manged.up       ##查看所有在线minion

salt-key
密钥管理,通常在master端执行

salt-key [options]
salt-key -L              ##查看所有minion-key
salt-key -a <key-name>   ##接受某个minion-key
salt-key -d <key-name>   ##删除某个minion-key
salt-key -A              ##接受所有的minion-key
salt-key -D              ##删除所有的minion-key

salt-call
该命令通常在minion上执行,minion自己执行可执行模块,不是通过master下发job

salt-call [options] <function> [arguments]
salt-call test.ping           ##自己执行test.ping命令
salt-call cmd.run 'ifconfig'  ##自己执行cmd.run函数

salt-cp
分发文件到minion上,不支持目录分发,通常在master运行

salt-cp [options] '<target>' SOURCE DEST
salt-cp '*' testfile.html /tmp
salt-cp 'test*' index.html /tmp/a.html

state.sls
SLS(代表SaLt State文件)是Salt State系统的核心。SLS描述了系统的目标状态,由格式简单的数据构成。这经常被称作配置管理。首先,在master上面定义salt的主目录,默认是在/srv/salt/下面。
'1.YAML
sls采用YAML的格式编写
1.空格和Tabs
在YAML中不要使用Tab
2.缩进
YAML推荐缩进为2个空格,**’ : ’ , ’ - ’**后面缩进1个空格再写
3.数字会解析成数字
如mode: 0644会解析成mode: 644,可用’括住防止mode: ’0644′此情况
4.YAML不允许双简写
5.下划线将会被删除
有出现下划线要用 " " 括起来

2.基本格式
 httpd:
   pkg:
     - installed
第一行被称为标签定义,在这里被定义为安装包的名
第二行被称为状态定义,在这里定义使用module
第三行被称为函数定义,在这里定义使用调用函数'

常用模块

(1)用户管理
创建用户
user.present: - shell: /bin/bash - home: /home/admin - uid: 888

删除用户
user.absent: - purge: True - force: True
#purge类似userdel -r force为用户在线也强制删除

(2)文件管理
上传文件
		  file.managed:
		    - source:salt://nginx/nginx-xxx.xxx.tar.gz
		    - user: root
		    - group:root
		    - mode: 755
		    - backup:minion
		    - template:jinja

追加文件
		file.append:
		  - text:
	        - "exportJAVA_HOME=/usr/local/jdk1.6.0_13"
	        - "exportPATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH"
	        - "exportCLASSPATH=$JAVA_HOME/lib/:$JAVA_HOME/jre/lib:$CLASSPATH"

(3)包管理
yum安装
    pkg.latest:
      - pkgs:
        - aspell
        - ncurses
        - ncurses-devel
        - pcre-devel
        - telnet
        - libcurl
        - libcurl-devel

(4)目录管理
目录覆盖
	  file.recurse:
	    -source: salt://nginx/conf
	    -user: root
	    -group: root
	    -file_mode: 644
	    -dir_mode: 755
	    -template: jinja
		  - backup: minion
		  - makedirs: True
		  - include_empty: True
		  - recurse:
		  - user
		  - group
		  - mode

目录创建
	 file.directory:
	    - user: web
	    - group: web
	    - file_mode:644
	    - dir_mode:755
	    - makedirs:True
	    - include_empty: True
	    - template:jinja
	    - backup:minion

(5)逻辑关系
继承(include)
include:
  - web.apache
...

依赖(require)
依赖某个state,在运行此state前,先运行依赖的state,依赖可以有多个
require:
  - pkg: nginx
...

监控(watch)
在某个state变化时运行此模块,文中的配置,相关文件变化后,立即执行相应操作
- watch:
  - file: /etc/nginx/nginx.conf
  - file: /etc/nginx/fastcgi.conf
  - pkg: nginx 

顺序(order)
优先级比require和watch低,有order指定的state比没有order指定的优先级高,假如一个state模块内安装多个服务,或者其他依赖关系,可以使用。如果想让某个state最后执行,可以使用last。
nginx:
  pkg.installed:
    - order:1



静态数据接口GRAINS

Salt提供了一个接口来获取有关底层系统的信息。这被称为grains接口,因为它向salt呈现了信息的颗粒。收集操作系统、域名、IP地址、内核、操作系统类型、内存和许多其他系统属性的粒度。
grains接口可用于Salt模块和组件,以便在正确的系统上自动使用正确的Salt minion命令。
grains数据是相对静态的,但是如果系统信息发生变化(例如,网络设置更改),或者如果为自定义谷物指定了新值,则谷物数据将刷新。
注意
Grains解析为小写字母。例如,FOO和foo的目标是相同的颗粒。

salt 'node1' grains.list  列出node1所有的静态数据键
salt 'node1' grains.items 列出node1所有的静态数据键与值
salt '*' grains.item os 列出所有机器的os


-G 用于对匹配到的进行操作 (目标选择)

salt -G ‘os:CentOS’ cmd.run ‘echo haha’

自定义grains的3种手段
1.直接在/etc/salt/minion中定义
grains:
   roles:
      - webserver
      - memcache

2./etc/salt/grains
vim /etc/salt/grains
  hehe:321
  haha:654

开发grains

3.用python 写一个python脚本,返回一个字典就可以了
在 /srv/salt/ 下创建一个 _grains 的目录,然后在目录中创建一个.py文件
#!/usr/bin/env python
def my_grains():
    grains = {}
    grains['iaas'] = 'openstack'
    grains['edu'] = 'aron'
    return grains

grains的优先级
1.系统自带
2.grains文件写的
3.minion配置文件写的
4.自己写的

每次修改数据都需要重启服务或刷新grains操作才会生效,这也印证了是静态数据
命令 salt ‘*’ saltutil.sync_grains 用于刷新grains的数据


Pillar

Pillar在salt中是非常重要的组成部分,利用它可以完成很强大的功能,它可以指定一些信息到指定的minion上。不像grains一样是分发到所有Minion上的,它保存的数据可以是动态的。Pillar以sls来写的,格式是键值对。

适用情景:
1.比较敏感的数据,比如密码,key等
2.特殊数据到特定Minion上
3.动态的内容
4.其他数据类型

查看Minion的Pillar信息
salt '*' pillar.items

####查看某个Pillar值
salt '*' pillar.item <key>      #只能看到顶级的
salt '*' pillar.get <key>:<key> #可以取到更小粒度的

#编写pillar数据
指定pillar_roots,默认是/srv/pillar(可通过修改master配置文件修改),建立目录
mkdir /srv/pillar
cd /srv/pillar

#编辑一个pillar数据文件
vim test1.sls
name: 'salt'
 users:
   hadoop: 1000
   redhat: 2000
   ubuntu: 2001

#建立top file指定minion到pillar数据文件
vim top.sls
 base:
   '*':
     - test1

#刷新pillar数据
salt '*' saltutil.refresh_pillar

#测试是否生效
salt '*' pillar.get name
salt '*' pillar.item name


##在state中通过jinja使用pillar数据
vim /srv/salt/user.sls
 {% for user, uid in pillar.get(’users’, {}).items() %}
 {{user}}:
   user.present:
     - uid: {{uid}}
 {% endfor %}

#通过jinja模板配合grains指定pillar数据
vim /srv/pillar/pkg.sls 
pkgs:
 {% if grains[’os_family’] == ’RedHat’ %}
 apache: httpd
 vim: vim-enhanced
 {% elif grains[’os_family’] == ’Debian’ %}
 apache: apache2
 vim: vim
 {% elif grains[’os’] == ’Arch’ %}
 apache: apache
 vim: vim
 {% endif %}

  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值