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.slstop.sls的內容如下:
base:'k8s-role:master':- match: grain- k8s.master'k8s-role:node':- match: grain- k8s.node'etcd-role:node':- match: grain- k8s.etcdminion端/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中實現一些條件判斷。
至此,該狀態配置文件可同時支持state.sls和state.highstate兩種方式。
轉載于:https://www.cnblogs.com/breezey/p/8824610.html
總結
以上是生活随笔為你收集整理的state.sls与state.highstate区别的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: centos7 安装、使用git
- 下一篇: 循环获取枚举值和名称