saltstack来敲门

image.png

官方求助手册:

https://docs.saltstack.com/en/latest/topics/execution/remote_execution.html

eg:模块的帮助文档

image.png

image.png

使用saltstack自带的rpo源安装saltstack

saltstack也有api。可以和运维平台组合起来;

yum install https://repo.saltstack.com/yum/redhat/salt-repo-latest.el7.noarch.rpm 
yum install salt-master
yum install salt-minion
修改配置文件
[root@salt-matser salt]# grep ^master /etc/salt/minion
master: 10.108.15.204

systemctl restart salt-minion
systemctl restart salt-master
systemctl enable salt-minion
systemctl enable salt-master

[root@salt-matser pki]# cat /etc/salt/minion_id 

salt-matse

salt根据minion_id 进行资源的编排

认证:

salt-key -A                           #添加全部未认证的keys


salt的正则使用的---》讲究主机名的设计

dns的域名解析不能解析下划线可以解析横线

eg:

[root@salt-matser pki]# salt '*' test.ping

salt-matser:

    True

zabbix:

    True

eg:

salt 'salt*' cmd.run 'cd /tmp;wget http://10.108.15.43/PKG.tar'


yaml语法三板斧没学好的时刻就是噩梦开始的地方

刚开始的时候master的配置文件除了打击你的积极性之外没有任何作用

vim /etc/salt/master     #打开下面的注释

file_roots: 

  base:

    - /srv/salt

mkdir -p /srv/salt/web      #配置文件目录的创建

重启master

[root@salt-matser salt]# cat /srv/salt/web/apache.sls 

apache-install:

  pkg.installed:

    - names:

      - httpd

      - httpd-devel

apache-service:

  service.running:

    - name: httpd

    - enable: True

    - reload: True


输出如下:

[root@salt-matser salt]# salt '*' state.sls web.apache

salt-matser:

----------

          ID: apache-install   #apache.sls中的ID

    Function: pkg.installed  #方法是调用pkg.installed

        Name: httpd

      Result: True

     Comment: All specified packages are already installed

     Started: 20:14:01.204544

    Duration: 1878.253 ms

     Changes:   

----------

          ID: apache-install

    Function: pkg.installed

        Name: httpd-devel

      Result: True

     Comment: The following packages were installed/updated: httpd-devel

     Started: 20:14:03.083152

    Duration: 11834.305 ms

     Changes:                                   #由于已经安装了apache所以对apache进行更新

              ----------

              apr-devel:

                  ----------

                  new:

                      1.4.8-3.el7_4.1

                  old:

              apr-util-devel:

                  ----------

                  new:

                      1.5.2-6.el7

                  old:

              cyrus-sasl:

                  ----------

#统计执行的结果

Summary for salt-matser    

------------

Succeeded: 3 (changed=1)

Failed:    0

  • NB的入口文件:top文件,可以指定特定的主机执行特定的动作
    vim top.sls

base:

  'salt*':    #指定主机名中带有salt的主机

    - web.apache    #执行web.apache的方法


[root@salt-matser salt]# cat top.sls 

base:

  'salt*':

    - web.apache

[root@salt-matser salt]# salt '*' state.highstate


[root@salt-matser salt]# salt '*' state.highstate test=ture  #先测试和sed -i一样的道理且尽量不要使用'*'


自此以后我们后续所有的安装部署都是saltstack来写的。运维过上了幸福快乐的日子。使用salt做配置管理就要始终以saltstack为准




grains


[root@salt-matser salt]# salt 'salt*' grains.ls  #键值对
salt-matser:
    - SSDs
    - biosreleasedate
    - biosversion
    - cpu_flags
    - cpu_model

[root@salt-matser salt]# salt 'salt*' grains.items  #主机的信息(dns,sn,ip,mac,cpu信息,os,是否是vm)
salt-matser:
    ----------
    SSDs:
    biosreleasedate:
        04/14/2014
    biosversion:
        6.00
    cpu_flags:
        - fpu
        - vme
        - de

[root@salt-matser salt]# salt '*' grains.item os  fqdn_ip4  #查看主机的OS和IP信息
zabbix:
    ----------
    fqdn_ip4:
        - 10.108.15.231
    os:
        CentOS
salt-matser:
    ----------
    fqdn_ip4:
        - 10.108.15.204
    os:
        CentOS


topfirl和-G都可以做目标选择
[root@salt-matser salt]# salt -G os:CentOS cmd.run 'w' #  -G:代表使用Grains收集,使用w命令,查看os是centos的登录信息

grains的用法:

1.收集底层系统信息

2、远程执行里面匹配minion

3、top.sls里面匹配minion #写配置文件自定义grains,增加配置的灵活度,

eg:

[root@salt-matser salt]# cat /srv/salt/top.sls 

base:

  'web:nginx':

    - match: grain

    - apache

4、grains的二次开发

[root@server1 salt]# pwd

/srv/salt

[root@salt-matser salt]# mkdir _grains;cd _grains/

[root@salt-matser _grains]# vim grains.py

[root@salt-matser _grains]# cat grains.py 

#!/usr/bin/env python

def my_grains():

        grains = {} #初始化字典

        grains['APP'] = '571XA' #key-value

        grains['DB'] = '571XA'

        return grains #返回字典

[root@salt-matser _grains]# salt '*' saltutil.sync_grains #推送到minion上

推送到minion的位置如下:

[root@salt-matser salt]# ls  minion/files/base/_grains/

grains.py

[root@salt-matser salt]# pwd

/var/cache/salt

#查看

[root@salt-matser _grains]# salt '*' grains.item APP

salt-matser:

    ----------

    APP:

        571XA

zabbix:

    ----------

    APP:

        571XA

granis的优先级系统自带的最高,自己写的最低


pillar

[root@salt-matser _grains]# vim /etc/salt/master

[root@salt-matser _grains]# grep '^[a-z]' /etc/salt/master  #修改配置文件

file_roots:

pillar_roots:

[root@salt-matser _grains]# mkdir /srv/pillar

[root@salt-matser _grains]# mkdir -p /srv/pillar/web

[root@salt-matser _grains]# vim /srv/pillar/web/apache.sls

[root@salt-matser _grains]# cat /srv/pillar/web/apache.sls

#使用jinja模板

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

apache: httpd

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

apache: apache2

{% endif %


[root@salt-matser web]# cat package.sls 

zabbix:

    package-name: zabbix

    version: 2.2.4

[root@salt-matser web]# cat ../top.sls 

base:

  '*':

    - web.apache

    - web.package


#修改完pillar的时候需要刷新

[root@salt-matser pillar]# salt '*' saltutil.refresh_pillar

获取:

[root@salt-matser web]# salt '*' pillar.items zabbix

salt-matser:

    ----------

    zabbix:

        ----------

        package-name:

            zabbix

        version:

            2.2.4

zabbix:

    ----------

    zabbix:

        ----------

        package-name:

            zabbix

        version:

            2.2.4

自此以后:jinja模板+各种for循环实现自动化安装zabbix和openstack

grains在游戏运维中的应用:salt -G目标选择

Grains静态数据系统(当重新启动的时候进行收集一次)信息查询

Pillar动态数据系统


salt的远程执行

cmd.run是比较危险的什么都可以执行,可以使用自己写的模块

通配符:

salt 'SSS-[571XA|571XF]-APP0?' test.ping

列表:

salt -L 'salt-matser,zabbix' test.ping

也可以进行分组


100台机器要重启的话每次只重启5台  -b 5


可以自己写saltstack的模块

查看所有的arp表

salt '*' network.arp

拷贝文件:

[root@salt-matser web]# salt-cp '*' /opt/zabbix/v12.3 /tmp

检查是否拷贝

[root@salt-matser web]# salt '*' cmd.run 'ls /tmp'


salt '*' service.available sshd

salt '*' service.reload httpd

返回tcp状态

salt '*' network.active_tcp



官方求助使用:

image.png


image.png


配置管理:对比配置管理学习在官方文档中有详细的介绍

配置管理(一种编排)为什么是状态管理?

SLS表示系统将会是什么样的一种状态,而且是以一种很简单的格式来包含这些数据。这经常也被叫做配置管理

比如你使用配置文件安装一个软件就进入一个新的状态

eg:状态是不能回滚的,你安装一个软件再把它卸载对系统是有影响的


/etc/http/conf/http.conf:

  file.managed:

    - source: salt://apache/http.conf

    - user: root

    - group: root

    - mode: 644

salt配置管理进行场地版本发布

在minion上安装软件就需要你先在master上安装此软件然后拷贝配置文件

排错

检查日志:

cat /var/log/salt/minion

master的日志改为debug模式