saltstack平台基础
saltstack概述
saltstack是基于python开发的一套C/S架构配置管理工具,
使用SSL证书签方的方式进行认证管理
底层使用ZeroMQ消息队列pub/sub方式通信
号称世界上最快的消息队列ZeroMQ能快速在成千上万台主机上进行各种操作
采用RSA Key方式确认身份,传输采用AES加密,使得它的安全性得到了保证
最主要的两个功能是: 配置管理与远程执行
saltstack不只是一个配置管理工具,还是一个云计算与数据中心架构编排的利器
saltstack已经支持Docker相关模块
在友好地支持各大云平台之后,配合saltstack的Mine实时发现功能可以实现各种云平台业务的自动扩展
saltstack架构——
saltstack基于C/S架构
服务器端称作master,客户端称作minion,可以实现传统处理方式,即客户端发送请求给服务器,服务器收到请求后处理,再将结果返回,
也可以使用消息队列中的发布与订阅(pub/sub)服务模式。
saltstack工作机制——
master和minion都以守护进程的方式运行
mater监听配置文件里定义的ret_port(接受minion请求),和publish-port(发布消息)的端口。
当minion运行时,它会自动链接到配置文件里定义的master地址ret_port端口进行连接认证,
当mater和minion可以正常通信后,就可以进行各种各样的配置管理工作了。
master与minion互信
密钥管理:
salt-key -h
-L:列出密钥
-a:接受一个密钥
-A:接受全部密钥
-D:删除全部密钥
。。。。。
saltstack环境部署
在所有的主机上添加sale源地址,ping主机名要可以通。关闭selinux
在master主机上安装
[root@x ~] yum -y install salt-master(安装master)
[root@x ~] systemctl start salt-master
[root@x ~] systemctl enable salt-master(开机自启)
在所有客户机上安装minion(其他客户机也做相同的操作)
[root@xx ~] yum -y install salt-minion(安装minion)
[root@xx ~] systemctl enable stlt-minion(开机自启)
[root@xx ~] vim /etc/salt/miion
......
master: x.sec.com(master的主机名或者域名)
......
id: xx.sec.com(id指的是本台客户机的主机名或者域名)
[root@xx ~] systemctl start salt-minion(把所有客户机的minion启动)
[root@x~] salt-key -L(在master主机上看到下面的客户机信息说明没问题了)
Accepted Keys:
Denied Keys:
Unaccepted Keys:
x.sec.com
xx.sec.com
xxx.sec.com
Rejected Keys:
[root@x ~] salt-key -A -y(接受秘钥建立互信)
salt命令基础:
salt [options] '<target>' <function> [arguments]
options是指目标主机
target指的是在哪些minion上执行,如果在全部minion上运行,采用通配符*
function一般采用python的 模块.方法 样式
arguments是传递给方法的参数
示例:测试所有主机连通性,在主机上执行任意命令
[root@x ~]# salt '*' test.ping(在所有主机上执行ping)
xxx.sec.com:
True
xxxx.sec.com:
True
xx.sec.com:
True
[root@x ~]# salt '*' cmd.run 'uname -r'(cmd.run 使用任意指令在所有主机上执行uname -r)
xx.sec.com:
3.10.0-693.el7.x86_64
xxx.sec.com:
3.10.0-693.el7.x86_64
xxxx.sec.com:
3.10.0-693.el7.x86_64
匹配方式:
-L:使用列表来匹配
-E:使用正则来匹配
-N:使用组来匹配
-S:使用ip地址来匹配
[root@x ~] salt -L xx.sec.com test.ping(使用列表匹配)
[root@x ~] salt -E "sec.com\d" test.ping(使用正则匹配)
使用分组:
通过配置列表主机名分
[root@x ~] vim /etc/aslt/master
nodegroups:
nginx: 'L@xx.sec.com,xxx.sec.com,xxxx.sec.com'(定义名为nginx的组,L@主机名 L为列表匹配,主机间用“,”逗号隔开)
[root@x ~] salt -N nginx test.ping
通过ip掩码分:
[root@x ~] salt -S "172.16.232.10" test.piung
[root@x ~] salt -S "172.16.232.0.24" test.ping
salt '主机名' sys,list_modules(列出模块,功能和使用方法)
salt '主机名' sys.doc cmd.run(查看模块帮助)
传输文件——master主机传输文件要先创建一个文件夹,master默认的根目录/svr/salt
[root@x ~] mkdir -p /srv/salt/file(创建要分发到节点的文件 testfile)
[root@x file~] salt -N nginx cp.get_file salt://srv/salt/file/xxx /tmp/xxx(执行分发指令,把xxx这个文件放到这个组的tmp下)
拷贝任意文件和目录——file.copy(相当于scp,这里有个坑,文件和文件夹要区分好 ,文件不可以在尾部加/,不然会报错)
[root@x file~] salt -L 'x,xx,xxx'file.cpoy /etc/passwd /var/tpm/passwd(指定主机拷贝文件)
[root@x file~] salt -L 'x,xx,xxx'file.cpoy /etc/selinux /var/tpm/(指定主机拷贝文件夹)
创建用户
[root@x ~] salt '主机名' -N nginx user.add xxx 2000
模块及功能——
列出所有可用模块
[root@x ~]# salt 'xx.sec.com' sys.list_modules(列出所有的模块)
xx.sec.com:
- acl
- aliases
.........
查看模块的所有功能
[root@x ~]# salt 'xx.sec.com' sys.list_functions test(查看tes模块的所有功能)
xx.sec.com:
- cp.get_file
查看模块用法(有点像man帮助)
[root@x ~]# salt 'xx.sec.com' sys.doc test(查看test模块的用法)
test.arg:
Print out the data passed into the function ``*args``and `....
YAML————
YAML:YAML Ain't Markup Language
YMAL的结构通过空格来展示
项目使用 —— 来表示
键值对使用:来表示
master和minion的配置文件均采用YMAL语法
YMAL规则一:
YMAL使用一个固定的缩进风格来表示数据层级结构关系,一般每个缩进级别由两个空格组成,切记不能使用tab,缩进是初学者容易出错的地方之一。
YMAL规则二:
YMAL的键值对采用冒号分隔,冒号后面必须有空格
YMAL键值对对应python的字典
YMAL表示形式:
name: xx.sec.com
或
name:
xx.sec.com
python字典:
{'name': 'xxsec.com'}
python字典可以嵌套:
hosts:
name: xx.sec.com
字典表示形式为:
{
'hosts': {
'name': xx.sec.com
}
}
YMAL规则三:
列表项使用一个短横杠加一个空格
- xx.sec.com
- xxx.sec.com
- xxxx.sec.com
列表可以作为一个键值对的value
pkg-http:
- http
- php
python语法:
{'pkg-http': ['http', 'php']}
Grains组件——
Grains是saltstack最重要的组件之一,存储minion端的基本信息,这些信息一般都是静态的,如CPU,内核,操作系统等,
Grains存储在minion本地,管理员可以在minion端进行Grains值的修改,如增加,删除等。
Grains基础应用
获取minion端所有的Grains信息
[root@x ~]# salt 'xx.sec.com' grains.items
xx.sec.com:
----------
SSDs:
biosreleasedate:
05/19/2017
biosversion:
通过grains.item获取minion端的fqdn信息
[root@x ~]# salt 'xx.sec.com' grains.item fqdn
xx.sec.com:
----------
fqdn:
xx
匹配minion端OS(操作系统)为centos的执行uptime命令
[root@x ~]# salt -G 'os:centos' cmd.run 'uptime'
xxx.sec.com:
19:02:11 up 10:03, 1 user, load average: 0.00, 0.01, 0.05
xx.sec.com:
19:02:11 up 10:03, 1 user, load average: 0.00, 0.01, 0.05
xxxx.sec.com:
19:02:12 up 10:03, 1 user, load average: 0.00, 0.01, 0.05
通过minion定义grains
定义角色:
[root@xx ~]# vim /etc/salt/minion
grains:
server:(定义属性)
- webserver(定义为web服务器)
- dbserver(再定义为数据库服务器)
[root@xx ~]# systemctl restart salt-minion.service(重启服务)
[root@xxx ~]# vim /etc/salt/minion
grains:
server:(定义属性)
- webserver(定义为web服务器)
[root@xx ~]# systemctl restart salt-minion.service(重启服务)
查看角色信息:
[root@x ~]# salt 'xx.sec.com' grains.item webanddb(查看属性为server的主机)
xx.sec.com:
----------
webanddb:
- webserver
- dbserver
[root@x ~]# salt -G 'server:webserver' grains.item test.ping(查看属性为server且定义为webserver的主机)
xx.sec.com:
----------
test.ping:
xxx.sec.com:
----------
test.ping:
Pillar组件——
Pillar也是saltstack最重要的组件之一,作用是定义与被控主机相关的任何数据,定义好的数据可以被其他组件使用
存储在master端,存放需要提供给minion的信息,常用于敏感信息,每个minion只能访问master分配给自己的Pillar信息,
用于经常动态变化的信息。
配置Pillar
Pillar需要一个pillar_roots来维护Pillar的配置,默认pillar_roots为/srv/pillar
Pillar_roots在master配置文件中定义
试例:
[root@x ~]# vim /etc/salt/master
pillar_roots:
base:(环境名)
- /srv/pillar
[root@x ~]# mkdir /srv/pillar
[root@x ~]# systemctl restart salt-master.service
[root@x pillar]# salt '*' pillar.items(查看pillar数据是空的)
xxx.sec.com:
----------
xxxx.sec.com:
----------
xx.sec.com:
----------
pillar数据文件
pillar执行时需要一个名为top.sls的入口文件,通过top.sls文件作为入口,组织其他的pillar文件
sls文件采用YAML格式
试例:
[root@x ~]# cd /srv/pillar/
[root@x pillar]# vim top.sls
base: (与pillar_roots定义的环境名一致)
'xx.sec.com':(过滤目标)
- data(用于包含data.sls)
[root@x pillar]# vim data.sls
appname: website(定义一个website)
flow:
maxconn: 3000(定义最大并发3000)
maxmem: 6G(定义最大6G内存)
同步pillar数据——
将Pillar数据同步至minion——
[root@x pillar]# salt '*' saltutil.refresh_pillar
xxxx.sec.com:
True
xx.sec.com:
True
xxx.sec.com:
True
获取Pillar全部数据——
[root@x pillar]# salt '*' pillar.items
xxxx.sec.com:
----------
xxx.sec.com:
----------
xx.sec.com:
----------
appname:
website
flow:
----------
maxconn:
3000
maxmem:
6G
获取指定数据——
[root@x pillar]# salt '*' pillar.item appname
xx.sec.com:
----------
appname:
website
根据Pillar值匹配minion——
[root@x pillar]# salt -I 'appname:website' test.ping
xx.sec.com:
True
复杂Pillar数据
更为复杂的Pillar数据可以放到目录的sls文件中
[root@x pillar]# vim top.sls
base:
'xx.sec.com':
- data
'xxx.sec.com'
- users
[root@x pillar]# mkdir users(它会去找一个users的文件夹,如存在,则会找名为init.sls的文件,如没有init.sls的文件,则会找users的文件)
[root@x users]# vim init.sls
users:
xx: 2000(添加xx uid为2000)
xxx: 20001
xxxx: 20002
[root@x pillar]# salt '*' saltutil.refresh_pillar(同步数据)
Jinjia基础——
Jinjia是基于python的模板引擎,在saltstack中我们使用yaml_jinja渲染器来根据模板生产对应的配置文件
对于不同的操作系统或者不同的情况,通过jinjia可以让配置文件或者操作形成一种模板的编写方式。
jinjia使用步骤——
在state文件中使用"- template: jinjia"声明
在模板文件中使用变量"{{ name }}"申明,name为变量,自己定义
在state文件中使用"- defautls: name: value"声明
使用变量
变量的基本格式为:{{变量}}
一级字典变量格式为:{{ pill['appname'] }}
二级字典变量格式为:{{ pillar['flow']['maxconn'] }}
判断语句:对grains的os值进行判断,根据不同的系统对Apache的值进行不同的设定,这样Apache就相当于是可以随机应变的值
{% if grains['os'] =='CentOS' %}
apache: httpd
{% elif grains['os'] =='Debian' %}
apache: apache2
{% endif %}
循环语句:在state中使用pillar数据,值通过jinjia来访问Pillar即可,多个值通过循环逐个获取
{% fof user, uid in pillar.get('users',{}).items() %}
{{users}}:
user.present;
- uid: {{uid}}
{% endfor %}
saltstack平台基础的更多相关文章
- winform快速开发平台 -> 基础组件之分页控件
一个项目控件主要由及部分的常用组件,当然本次介绍的是通用分页控件. 处理思想:我们在处理分页过程中主要是针对数据库操作. 一般情况主要是传递一些开始位置,当前页数,和数据总页数以及相关关联的业务逻辑. ...
- 第一篇:微信公众平台开发实战Java版之了解微信公众平台基础知识以及资料准备
相信很多人或多或少听说了微信公众平台的火热.但是开发还是有一点门槛,鉴于挺多朋友问我怎么开发,问多了,自己平时也进行以下总结.所以下面给大家分享一下我的经验: 微信公众号是什么? 官网的介绍:再小的个 ...
- 开发指南专题十一:JEECG微云高速开发平台--基础用户权限
版权声明:本文为博主原创文章.未经博主同意不得转载. https://blog.csdn.net/zhangdaiscott/article/details/26580037 开发指南专题 ...
- 专题开发十二:JEECG微云高速开发平台-基础用户权限
专题开发十二:JEECG微云高速开发平台-基础用户权限 11.3.4自己定义button权限 Jeecg中.眼下button权限设置,是通过对平台自己封装的button标签(<t:dgFun ...
- .Net 分布式云平台基础服务建设说明概要
1) 背景 建设云平台的基础框架,用于支持各类云服务的业务的构建及发展. 2) 基础服务 根据目前对业务的理解和发展方向,总结抽象出以下几个基础服务,如图所示 3) 概要说明 基础服务的发展会根 ...
- saltstack之基础入门系列文章简介
使用saltstack已有一段时间,最近由于各种原因,特来整理了saltstack基础入门系列文章,已备后续不断查阅(俗话说好记性不如烂笔头),也算是使用此工具的一个总结.saltstack的前六篇文 ...
- Force.com平台基础--前言
云计算平台 云计算模式有三种:(下面介绍来自百科) 1. SaaS:提供给客户的服务是运营商运行在云计算基础设施上的应用程序,用户可以在各种设备上通过客户端界面访问,如浏览器.消费者不需要管理或控制任 ...
- 微信公众平台——基础配置——服务器配置:PHP版
在自己的服务器上新建一个空白php文件,输入以下任一版本的代码,如下: 版本一: <?php $token = "dige1994"; $signature = $_GET[ ...
- 基于Docker&Kubernetes构建PaaS平台基础知识梳理
点击上方"开源Linux",选择"设为星标" 回复"学习"获取独家整理的学习资料! 基于Docker&Kubernetes构建Paa ...
随机推荐
- transfrom-runtime文档
transfrom-runtime文档 babel只会默认对句法进行转换,而那些方法,api不会转换,要转就要使用polyfill和transform,这里介绍transform,关于polyfill ...
- HTML篇
要内容 web标准 浏览器介绍 开发工具介绍 HTML介绍 HTML颜色介绍 HTML规范 HTML结构详解 一.web标准 web准备介绍: w3c:万维网联盟组织,用来制定web标准的机构(组织) ...
- 基于Halcon的一维条码识别技巧
Bar Code 条形码 1.clear_all_bar_code_models 清除所有条形码模型释放内存clear_all_bar_code_models( : : : )2.clear_b ...
- SEO网站title应该怎么写
第一:具有独特性 在你的网站中,也许有成千上万的页面,首页-分类-无数的文章页面,这些都有固定的标题,他们的标题最好不要相同.有的时候也许不是`站长们故意的,但是在使用编辑软件的时候,经常 会出现很多 ...
- django -- url 的 name 属性
在html的form中使用给url定义的name值,可以在修改url时不用在修改form的src. urls.py from django.conf.urls import url from myte ...
- telnet测试端口是否正常打开
点击计算机的开始菜单-->运行 ,输入CMD命令,然后确定.打开cmd命令行. 输入telnet测试端口命令: telnet IP 端口 或者 telnet 域名 端口 回车 如果端口关 ...
- localtime 的性能问题及其替代者
在系统从redhat5升到redhat6的过程中,服务的性能差了很多.经过定位发现是程序中频繁调用localtime/localtime_r所致. 而调用localtime_r 的实现中,对时区进行了 ...
- 自定义type
- 仿函数(二、stl中常用仿函数)
提到C++ STL,首先被人想到的是它的三大组件:Containers, Iterators, Algorithms,即容器,迭代器和算法.容器为用户提供了常用的数据结构,算法大多是独立于容器的常用的 ...
- 基于size的优化
----------------------siwuxie095 基于 size 的优化 在 union( p , q ...