state.sls与state.highstate区别
最近编写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中实现一些条件判断。
- 修改top.sls文件如下:
base:
node_type:kubernetes:
- match: grain
- k8s
- 添加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 %}
- 修改minion端
/etc/salt/grains,内容如下:
node_type:
- kubernetes
k8s_role:
- k8s_node: True
- k8s_master: True
至此,该状态配置文件可同时支持state.sls和state.highstate两种方式。
state.sls与state.highstate区别的更多相关文章
- 自动化运维工具SaltStack - 多环境(使用记录【state.sls 与 state.highstate】)
转自:https://segmentfault.com/a/1190000000513137 今天在进行 saltstack 多环境的时候,遇到一个问题,最终得到解决,好记性不如烂笔头,记录. 首先, ...
- saltstack/salt的state.sls的使用
SLS(代表SaLt State文件)是Salt State系统的核心.SLS描述了系统的目标状态,由格式简单的数据构成.这经常被称作配置管理 首先,在master上面定义salt的主目录,默认是在/ ...
- state.sls web.apache
[root@master01 web]# salt 'node02' state.sls web.apache node02: ---------- ID: apache-inst ...
- salt state.sls windows 传输文件
salt 安装 - 传输文件 一.master -- minion linux 下 master 拷贝到 minion 上 1.cp.get_file 拷贝文件 # salt '172.16.3. ...
- Flink状态专题:keyed state和Operator state
众所周知,flink是有状态的计算.所以学习flink不可不知状态. 正好最近公司有个需求,要用到flink的状态计算,需求是这样的,收集数据库新增的数据. ...
- [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 ...
- [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 ...
- [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 ...
- [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 ...
随机推荐
- 欢迎来怼--第三十六次Scrum会议
一.小组信息 队名:欢迎来怼 小组成员 队长:田继平 成员:李圆圆,葛美义,王伟东,姜珊,邵朔,阚博文 小组照片 二.开会信息 时间:2017/12/1 11:35~11:55,总计20min. 地点 ...
- python中数据分析常用函数整理
一. apply函数 作用:对 DataFrame 的某行/列应用函数之后,Apply 返回一些值.函数既可以使用默认的,也可以自定义.注意:在第二个输出中应用 head() 函数,因为它包含了很多行 ...
- Tomcat提高并发
Centos7环境下Tomcat 启动慢的解决方案1.增加熵值(本质增加random)安装软件 >> Yum –y install rng-tools 启动熵服务 >> Sys ...
- Leetcode题库——34.在排序数组中国查找元素的第一个和最后一个位置
@author: ZZQ @software: PyCharm @file: searchRange.py @time: 2018/11/12 19:19 要求:给定一个按照升序排列的整数数组 num ...
- HDU 4336 Card Collector 期望dp+状压
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=4336 Card Collector Time Limit: 2000/1000 MS (Java/O ...
- Virtualbox+Ubuntu安装,VERR_VMX_MSR_ALL_VMX_DISABLED解决
学习链接:基于VirtualBox虚拟机安装Ubuntu图文教程--娄老师 启动虚拟机遇到的问题:BIOS中VT-x在所有CPU模式下被禁用(VERR_VMX_MSR_ALL_VMX_DISABLED ...
- express框架实现承载静态页面的能力
我们知道nodejs本身不具有一个web容器的作用,不像tomcat或者IIS这样的服务器一样天然具有web容器承载静态动态页面的能力,如果要原生实现的话需要自己通过路由配置,比较麻烦,而expres ...
- iOS App之间常用的五种通信方式及适用场景总结
iOS系统是相对封闭的系统,App各自在各自的沙盒(sandbox)中运行,每个App都只能读取iPhone上iOS系统为该应用程序程序创建的文件夹AppData下的内容,不能随意跨越自己的沙盒去访问 ...
- 配置高可用集群(实验) corosyne+pacemaker
环境准备: 一准备三个虚拟机,把/etc/hosts/文件配置好 192.168.43.9 node0 ...
- Error: Unable to access jarfile D:\Apache\apache-jmeter-3.0\bin\ApacheJMete.jar
双击jmeter.bat后,在cmd窗口显示Error: Unable to access jarfile D:\Apache\apache-jmeter-3.0\bin\ApacheJMete.ja ...