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平台基础的更多相关文章

  1. winform快速开发平台 -> 基础组件之分页控件

    一个项目控件主要由及部分的常用组件,当然本次介绍的是通用分页控件. 处理思想:我们在处理分页过程中主要是针对数据库操作. 一般情况主要是传递一些开始位置,当前页数,和数据总页数以及相关关联的业务逻辑. ...

  2. 第一篇:微信公众平台开发实战Java版之了解微信公众平台基础知识以及资料准备

    相信很多人或多或少听说了微信公众平台的火热.但是开发还是有一点门槛,鉴于挺多朋友问我怎么开发,问多了,自己平时也进行以下总结.所以下面给大家分享一下我的经验: 微信公众号是什么? 官网的介绍:再小的个 ...

  3. 开发指南专题十一:JEECG微云高速开发平台--基础用户权限

    版权声明:本文为博主原创文章.未经博主同意不得转载. https://blog.csdn.net/zhangdaiscott/article/details/26580037     开发指南专题 ...

  4. 专题开发十二:JEECG微云高速开发平台-基础用户权限

      专题开发十二:JEECG微云高速开发平台-基础用户权限 11.3.4自己定义button权限 Jeecg中.眼下button权限设置,是通过对平台自己封装的button标签(<t:dgFun ...

  5. .Net 分布式云平台基础服务建设说明概要

    1)  背景 建设云平台的基础框架,用于支持各类云服务的业务的构建及发展. 2)  基础服务 根据目前对业务的理解和发展方向,总结抽象出以下几个基础服务,如图所示 3)  概要说明 基础服务的发展会根 ...

  6. saltstack之基础入门系列文章简介

    使用saltstack已有一段时间,最近由于各种原因,特来整理了saltstack基础入门系列文章,已备后续不断查阅(俗话说好记性不如烂笔头),也算是使用此工具的一个总结.saltstack的前六篇文 ...

  7. Force.com平台基础--前言

    云计算平台 云计算模式有三种:(下面介绍来自百科) 1. SaaS:提供给客户的服务是运营商运行在云计算基础设施上的应用程序,用户可以在各种设备上通过客户端界面访问,如浏览器.消费者不需要管理或控制任 ...

  8. 微信公众平台——基础配置——服务器配置:PHP版

    在自己的服务器上新建一个空白php文件,输入以下任一版本的代码,如下: 版本一: <?php $token = "dige1994"; $signature = $_GET[ ...

  9. 基于Docker&Kubernetes构建PaaS平台基础知识梳理

    点击上方"开源Linux",选择"设为星标" 回复"学习"获取独家整理的学习资料! 基于Docker&Kubernetes构建Paa ...

随机推荐

  1. transfrom-runtime文档

    transfrom-runtime文档 babel只会默认对句法进行转换,而那些方法,api不会转换,要转就要使用polyfill和transform,这里介绍transform,关于polyfill ...

  2. HTML篇

    要内容 web标准 浏览器介绍 开发工具介绍 HTML介绍 HTML颜色介绍 HTML规范 HTML结构详解 一.web标准 web准备介绍: w3c:万维网联盟组织,用来制定web标准的机构(组织) ...

  3. 基于Halcon的一维条码识别技巧

    Bar Code 条形码 1.clear_all_bar_code_models    清除所有条形码模型释放内存clear_all_bar_code_models( : : : )2.clear_b ...

  4. SEO网站title应该怎么写

    第一:具有独特性 在你的网站中,也许有成千上万的页面,首页-分类-无数的文章页面,这些都有固定的标题,他们的标题最好不要相同.有的时候也许不是`站长们故意的,但是在使用编辑软件的时候,经常 会出现很多 ...

  5. django -- url 的 name 属性

    在html的form中使用给url定义的name值,可以在修改url时不用在修改form的src. urls.py from django.conf.urls import url from myte ...

  6. telnet测试端口是否正常打开

    点击计算机的开始菜单-->运行 ,输入CMD命令,然后确定.打开cmd命令行.   输入telnet测试端口命令: telnet IP 端口 或者 telnet 域名 端口 回车   如果端口关 ...

  7. localtime 的性能问题及其替代者

    在系统从redhat5升到redhat6的过程中,服务的性能差了很多.经过定位发现是程序中频繁调用localtime/localtime_r所致. 而调用localtime_r 的实现中,对时区进行了 ...

  8. 自定义type

  9. 仿函数(二、stl中常用仿函数)

    提到C++ STL,首先被人想到的是它的三大组件:Containers, Iterators, Algorithms,即容器,迭代器和算法.容器为用户提供了常用的数据结构,算法大多是独立于容器的常用的 ...

  10. 基于size的优化

    ----------------------siwuxie095                                 基于 size 的优化         在 union( p , q ...