saltstack使用指南:saltstack组件之state状态管理

saltstack之state状态管理

1. 状态的概念及如何撰写一条状态
2. 状态配置文件的各个要素
3. 使用requisites对状态进行排序控制

一、状态的概念及如何撰写一条状态

远程执行模块的过程类似于一段shell脚本或python脚本,每次执行都会触发相同的功能。在大量minion运行远程命令非常重要,但是对minion的环境控制,建议还是用状态进行管理更为友好。

状态是对minion的一种描述和定义,管理人员不需要关系任务是如何完成的,只需要关心minion需要达到怎样的一个状态,具体的执行由salt的负责管理状态的模块来完成。

首先我们使用pkg执行模块来完成httpd服务的部署:
[root@salt-slave-node1 modules]# salt '*' pkg.install "httpd"

那么,如何使用state模块来完成httpd的部署呢?

1.修改master的配置文件,指定base环境路径,base环境是必须指定的
[root@salt-master salt]# vi /etc/salt/master
file_roots:
  base:
    - /srv/salt/base

2. 高级状态的使用需要在master配置文件里面打开state_top: top.sls
[root@salt-master salt]# grep -n ^state_top /etc/salt/master 
329:state_top: top.sls

3. 重启salt-master服务
[root@salt-master salt]# /bin/systemctl restart salt-master.service

4. 创建目录     
[root@salt-master salt]# mkdir -p /srv/salt/base/

5. 在base目录下创建top.sls文件,创建web目录及创建apache.sls文件
[root@salt-master salt]# tree
.
└── base
    ├── top.sls
    └── web
        └── apache.sls


[root@salt-master salt]# vi /srv/salt/base/top.sls 
base:
  '*':
    - web.apache

[root@salt-master salt]# vi /srv/salt/base/web/apache.sls 
apache-install:         #id,名字自己去,建议形象店
  pkg.installed:        #pkg是状态模块,installed是模块里面的方法
    - name: httpd       #httpd是方法里面的参数
apache-service:
  service.running:
    - name: httpd
    - enable: True       #设置开机启动

6. 执行状态模块部署服务,状态模块会到base目录下找到top.sls,文件编排告诉每个minion需要干什么
[root@salt-master salt]# salt '*' state.highstate 

[root@salt-master base]# salt '*' cmd.run 'ss -tnulp | grep nginx'
izwz9f8xrvty50quc2gq50z:
    tcp    LISTEN     0      128       *:80                    *:*                   users:(("nginx",pid=21446,fd=6),("nginx",pid=21445,fd=6))
    tcp    LISTEN     0      128      :::80                   :::*                   users:(("nginx",pid=21446,fd=7),("nginx",pid=21445,fd=7))
iZbp150ikdomqe3b32qaubZ:
    tcp    LISTEN     0      128       *:80                    *:*                   users:(("nginx",pid=21881,fd=6),("nginx",pid=21880,fd=6))
    tcp    LISTEN     0      128      :::80                   :::*                   users:(("nginx",pid=21881,fd=7),("nginx

扩展:state.highstate与satte.sls的区别?
1.state.highstate会读取所有环境(包括base环境)的top.sls文件,并且执行top.sls文件内容里面定义的sls文件,不在top.sls文件里面记录的sls则不会被执行;
2.state.sls默认读取base环境,但是它并不会读取top.sls文件。你可以指定state.sls执行哪个sls文件,只要这个sls文件在base环境下存在;
3.state.sls也可以指定读取哪个环境:state.sls salt_env=’prod’xxxx.sls,这个xxxx.sls可以不在top.sls中记录。

二、状态配置文件的各个要素

通过上面的例子,我们理解了状态的概念,并制作了第一个状态文件,下面我们来看下状态文件的构成,以上面的apache.sls文件为例:

[root@salt-master salt]# cat apache.sls 
insatll_httpd:
  pkg.installed:
    - name: httpd

注:
1. YAML是一个强大的标记性语言
2. Salt使用一个YAML的小型子集,映射常用的数据结构,如列表和字典
3. YAML renderer是将YAML数据格式的结构变异成python数据结构给salt使用

三个规则:

1. 规则一:缩进

YAML使用了一个固定的缩进风格来表示数据层结构关系。salt需要每个缩进级别由两个空格组成。不要使用tabs。

2. 规则二:冒号

Python的字典理所当然是简单的键值对,其它语言的用户应该也知道这个数据类型叫哈希表或者关联数组。

3. 规则三:短横杠

用一个短横杠加一个空格来表示列表项。多个项使用同样的缩进级别作为同一列表的一部分。

三、使用requisites对状态进行排序控制

这里,我们用安装JDK+tomcat的例子来阐述saltstack使用requisites对状态是如何进行排序控制的?

requisites:中文意思为必要条件,在salt里面可以理解为依赖某一动作或行为才能出发下一步的操作。使用require可以让各ID之间产生依赖关系,避免无效执行。

ok,废话不多讲了,直接进入主题,我们用state状态模块安装jdk+tomcat来告诉大家其中的奥妙!

1. 修改master配置文件,指定base环境路径,重启salt-master服务
[root@salt-master ~]# vi /etc/salt/master      
file_roots:
  base:
    - /srv/salt/base
[root@salt-master ~]# /bin/systemctl restart salt-master.service

2. 创建目录
[root@salt-master ~]# mkdir /srv/salt/base

3. base目录结构
[root@salt-master ~]# cd /srv/salt/base
[root@salt-master base]# tree
├── jdk
│   ├── files
│   │   └── jdk1.7.0_79.tar.gz
│   └── install.sls
├── tomcat
│   ├── files
│   │   ├── apache-tomcat-7.0.88.tar.gz
│   │   └── catalina.sh
│   └── install.sls
└── top.sls


4.创建top.sls文件
[root@salt-master base]# vi top.sls 
base:
  '*':
    - jdk.install            #jdk表示jdk目录,install表示files目录下的install.sls文件
    - tomcat.install         #同理

5.jdk目录下创建install.sls   
    [root@salt-master jdk]# vi install.sls
    jdk-installl:
      file.managed:
        - name: /usr/local/jdk1.7.0_79.tar.gz
        - source: salt://jdk/files/jdk1.7.0_79.tar.gz
        - user: root
        - group: root
        - mode: 755
      cmd.run:
        - name: cd /usr/local/ && tar axf jdk1.7.0_79.tar.gz && mv jdk1.7.0_79 /usr/local/jdk && chown -R root:root /usr/local/jdk
        - unless: test -d /usr/local/jdk      #unless: 判断是否为false,如果为false则执行cmd.run中的命令
        - requrie:
          - file: jdk-install

    jdk-config:
      file.append:
        - name: /etc/profile
        - text:
          - export JAVA_HOME=/usr/local/jdk
          - export JRE_HOME=$JAVA_HOME/jre
          - export CLASSPATH=$JAVA_HOME/lib:$JRE_HOME/lib
          - export PATH=$PATH:${JAVA_HOME}/bin:${JRE_HOME}/bin

6.tomcat目录下创建install.sls
[root@salt-master tomcat]# vi install.sls 
include:
   - jdk.install

tomcat_install:
  file.managed:
    - name: /usr/local/apache-tomcat-7.0.88.tar.gz
    - source: salt://tomcat/files/apache-tomcat-7.0.88.tar.gz
    - user: root
    - group: root
    - mode: 755
  cmd.run:
    - name: cd /usr/local/ && tar axf apache-tomcat-7.0.88.tar.gz && mv apache-tomcat-7.0.88 /usr/local/tomcat && chown -R root:root /usr/local/tomcat
    - unless: test -d /usr/local/tomcat

tomcat-config:
  file.append:
    - name: /etc/profile
    - text:
      - export TOMCAT_HOME=/usr/local/tomcat
      - export PATH=${TOMCAT_HOME}/bin:$PATH

tomcat-catalina.sh:
  file.managed:
    - name: /usr/local/tomcat/bin/catalina.sh
    - user: root
    - mode: 755
    - source: salt://tomcat/files/catalina.sh
    - require:
      - file: tomcat_install

6. 使用state状态模块进行部署
[root@salt-master base]# salt '*' state.highstate   

注:
1. catalina.sh以及没有添加到files目录下的server.xml文件,用户都可以自己定义其内容。生产环境中,这两个文件可能配置比较复杂,不可能一台台的配置,所以可以提前配置好文件内容。当然,这只是其中一种方法,也可以在salt-master端用file模块发送文件到客户端或者用命令也可以,具体操作自己去找答案吧。
2. 模块之间的依赖关系
    watch: 关注某一事件变化
    watch_in: 被关注自身事件变化
    require: 依赖某一事件发生
    require_in: 被依赖自身事件发生
    unless: 判断是否为false,如果为false则执行。常用在cmd中name的命令。
    onlyif: 判断是否为true,如果为true则执行。
3.在批量安装的时候,建议提前规划好目录结构以及模块之间的依赖关系。
  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

东城绝神

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值