日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

state.sls与state.highstate区别

發布時間:2025/3/21 编程问答 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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兩種方式。

    轉載于:https://www.cnblogs.com/breezey/p/8824610.html

    總結

    以上是生活随笔為你收集整理的state.sls与state.highstate区别的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。