最近编写kubernetes的saltstack状态配置文件,在github上找到一个开源的salt文件,根据自己的需要,完成修改之后。执行部署测试

大致目录结构如下:

|————k8s
| |____node.sls
| |____master.sls
| |____etcd.sls
| |____modules
| | |____kubelet.sls
| | |____docker.sls
| | |____quagga.sls
| | |____kube-proxy.sls
| | |____api-server.sls
| | |____scheduler.sls
| | |____cfssl.sls
| | |____controller-manager.sls
| | |____etcd.sls
|____top.sls

top.sls的内容如下:

base:
'k8s-role:master':
- match: grain
- k8s.master
'k8s-role:node':
- match: grain
- k8s.node
'etcd-role:node':
- match: grain
- k8s.etcd

minion端/etc/salt/grains配置如下:

k8s-role:
- master

在执行salt "*" state.highstate时,部署正常执行,然而在执行salt "*" state.sls k8s时,却抛出如下异常:

yanwei-ubuntu:
Data failed to compile:
----------
No matching sls found for 'k8s' in env 'base'
ERROR: Minions returned with non-zero exit code

但是由于我们线上salt文件过多,而且平时都是通过state.sls的方式来实现服务配置与部署,直接执行state.highstate的话,风险太大。

到此时才开始正视state.sls与state.highstate的区别,并尝试把上面的配置修改为同时支持两种方式的发布。

在网上查找state.sls与state.highstate的区别大致如下:

  • state.highstate会读取所有环境(包括base环境)的top.sls文件,并且执行top.sls文件内容里面定义的sls文件,不在top.sls文件里面记录的sls则不会被执行;
  • state.sls默认读取base环境,但是它并不会读取top.sls文件。你可以指定state.sls执行哪个sls文件,只要这个sls文件在base环境下存在;
  • state.sls也可以指定读取哪个环境:state.sls salt_env='prod' xxx.sls,这个xxx.sls可以不在top.sls中记录。
  • state.sls执行的xxx.sls会被下发到minion端,而state.highstate则不会

其实这些都不是重点,我认为重点在于state.sls执行指定模块的前提是,该模块存在init.sls文件。

既然如此,我们要让上面的状态配置文件同时支持state.sls和state.highstate的话,首先需要在k8s模块中添加init.sls文件,因为并不是每一个节点都会执行k8s中所有模块,所以还需要在init.sls中实现一些条件判断。

  1. 修改top.sls文件如下:
base:
node_type:kubernetes:
- match: grain
- k8s
  1. 添加init.sls文件,内容如下:
{% set k8s_master = salt['grains.get']('k8s_role:k8s_master',False) %}
{% set k8s_node = salt['grains.get']('k8s_role:k8s_node',False) %}
{% set k8s_etcd = salt['grains.get']('k8s_role:k8s_etcd',False) %}
include:
- k8s.modules.docker
{% if k8s_master %}
- k8s.master
{% endif %}
{% if k8s_node %}
- k8s.node
{% endif %}
{% if k8s_etcd %}
- k8s.etcd
{% endif %}
  1. 修改minion端/etc/salt/grains,内容如下:
node_type:
- kubernetes
k8s_role:
- k8s_node: True
- k8s_master: True

至此,该状态配置文件可同时支持state.sls和state.highstate两种方式。

state.sls与state.highstate区别的更多相关文章

  1. 自动化运维工具SaltStack - 多环境(使用记录【state.sls 与 state.highstate】)

    转自:https://segmentfault.com/a/1190000000513137 今天在进行 saltstack 多环境的时候,遇到一个问题,最终得到解决,好记性不如烂笔头,记录. 首先, ...

  2. saltstack/salt的state.sls的使用

    SLS(代表SaLt State文件)是Salt State系统的核心.SLS描述了系统的目标状态,由格式简单的数据构成.这经常被称作配置管理 首先,在master上面定义salt的主目录,默认是在/ ...

  3. state.sls web.apache

    [root@master01 web]# salt 'node02' state.sls web.apache node02: ----------           ID: apache-inst ...

  4. salt state.sls windows 传输文件

    salt 安装 - 传输文件  一.master  -- minion linux 下 master 拷贝到 minion 上 1.cp.get_file 拷贝文件 # salt '172.16.3. ...

  5. Flink状态专题:keyed state和Operator state

            众所周知,flink是有状态的计算.所以学习flink不可不知状态.         正好最近公司有个需求,要用到flink的状态计算,需求是这样的,收集数据库新增的数据.       ...

  6. [Functional Programming] Introduction to State, thinking in State

    Recently, I am learning Working with ADT. Got some extra thought about State Monad. Basiclly how to ...

  7. [Functional Programming ADT] Initialize Redux Application State Using The State ADT

    Not only will we need to give our initial state to a Redux store, we will also need to be able to re ...

  8. [Functional Programming Moand] Update The State Of A State Monad (put)

    Stateful computations require the ability for their state to change overtime. We take a look on one ...

  9. [Functional Programming] Transition State based on Existing State using the State ADT (liftState, composeK)

    While sometimes outside input can have influence on how a given stateful transaction transitions, th ...

随机推荐

  1. 2017年10月WEB前端开发实习生面试题总结

    从大一开始学习前端,今年大三,10月份开始投简历,陆续收到很多家公司的面试,目前为止的面试通过率是百分之百,总结下面试题. 不定期更新中... 百度第一次 一面 1.AJAX流程 2.promise简 ...

  2. Classifier

    1.视频:https://morvanzhou.github.io/tutorials/machine-learning/keras/2-2-classifier/ 2.敲了代码,但是运行结果不懂,明 ...

  3. NABCD模型分析

    1.N——need需求 目前,学习英语是所有学生会面临的问题.提高词汇量对学习英语是十分必要的,尤其是对大学生来说对手机的使用特别频繁,我们提高英语词汇量也应该把手机更好的利用起来,利用自己对手机的使 ...

  4. spring 原理

    1.spring原理 内部最核心的就是IOC了,动态注入,让一个对象的创建不用new了,可以自动的生产,这其实就是利用java里的反射,反射其实就是在运行时动态的去创建.调用对象,Spring就是在运 ...

  5. Sdn - 基础题试水

    ## sdn - 初步分析基于OpenFlow的SDN网络控制功能 题目要求: 1.下发流表项实现 h1 和 h2,h2 和 h3 不能互通.h1 和 h3 可互通. 2.结合捕获的 SDN 相关协议 ...

  6. android assets下rar文件解压到sd卡

    参考的 http://hzy3774.iteye.com/blog/1704419   不过只能解压zip文件  最多也就能解压1M多把 ,我1.5M的可以,4M的不行 还有...之前傻逼的把raw和 ...

  7. 关于JoptionPane提示框

    import java.util.*; import javax.swing.JOptionPane; import javax.swing.UIManager; public class Main ...

  8. Software Defined Networking(Week 2, part 1)

    History of SDN 1.1 - 1.2 本节讨论从上世纪八十年代时到现在为止出现的SDN的思想和发展历史.了解历史,可以明白技术后面的成因以及一些原则,并从架构上去大致掌握.了解一些主旨. ...

  9. 团队作业4——第一次项目冲刺(Alpha版本)2017.11.14

    1.当天站立式会议照片 本次会议在5号公寓1楼召开,本次会议内容:①:熟悉每个人想做的模块.②:根据老师的要求将项目划分成一系列小任务.③:选择项目的开发模式:jsp+servlet+javabean ...

  10. 补发9.28“天天向上”团队Scrum站立会议

    组长:王森 组员:张金生 张政 栾骄阳 时间:2016.09.28 地点:612寝 组员 已完成 未完成 王森 搭建初步原型 完善原型 张金生 更新UI设计 生成应用界面原型 张政 初步设计框架图 完 ...