saltstackの日常使用(一)

10396 ワード

詳細な注意:http://www.mknight.cn/
インストール
yum install salt-master
or
yum install salt-minion
起動
systemctl start salt-master
or
/etc/init.d/salt-master start
基本コマンド
salt-key
salt-keyコマンドはマスター上のすべての鍵を管理するために使用されます。マスターの鍵を一覧表示します。
salt-key -L
salt-key-aは一つのminionの認証を受ける。
salt-key -a minion.saltstack.com
未検証の鍵をすべて受け入れる
salt-key -A
test.pingは一つのminionが正常に接続されているか確認します。
salt '*' test.ping
すべてのminionsを指す目標です。test.pingは、minion実行test.ping関数を教えます。このコマンドを実行した結果、マスターがすべてのminionsにステップ・pingを並行して実行するように指示し、結果を返します。これは本物のICMP pingではなく、簡単な関数でTrueに戻ります。test.pingを使って、一つのminionが正常に接続されているかを確認します。
disk.usage
salt '*' disk.usage
network.interfaces
salt '*' network.interfaces
cmd.run
cmd.runを使ってリモートでコマンドを実行して、cmdはモジュールで、runはcmdモジュールの一つの方法です。
salt '*' cmd.run 'df -h'
ホームを見る
salt '*' cmd.run "grep salt /etc/hosts"
mq:
    192.168.1.31 salt
owncloud:
    192.168.1.31    salt
docker:
    192.168.1.31 salt
dev.db:
    192.168.1.31 salt
ロット修正hosts
salt '*' cmd.run "sed -i 's/192.168.1.30/192.168.1.31/' /etc/hosts"
pkg
pkg関数は、ローカルシステムのパケットマネージャを自動的に同じsalt関数にマッピングします。これは、pkg.installがRed Hatシステムに基づいてyumを使用し、Debianシステムにはapptを使用してパッケージをインストールするという意味です。
 salt 'salt-minion' pkg.install vim
ホストにマッチ
  • 普通マッチング
  •      '*'
          'minion_id'
    
  • 正則マッチングは-Eを使用し、--pcreは正則マッチング
  • を行う。
    salt -E '^stack-node\w+'  cmd.run "free -m"
    
    結果を返します
    stack-node01:
    
                     total       used       free     shared    buffers     cached
    
        Mem:          1877        377       1499          0         27        223
    
        -/+ buffers/cache:        126       1751
    
        Swap:         4095          0       4095
    
    stack-node02:
    
                     total       used       free     shared    buffers     cached
    
        Mem:          1877        377       1499          0         28        223
    
        -/+ buffers/cache:        125       1751
    
        Swap:         4095          0       4095
    
  • リストマッチング-L,--listは、ホストIDリストとしてフィルタリングされ、フォームはPythonのリストと似ています。すなわち、異なるホストID名はカンマ区切り
  • を使用しています。
    [root@stack-master ~]# salt -L 'stack-node01,stack-node02'  cmd.run "free -m"
    
    stack-node02:
    
                     total       used       free     shared    buffers     cached
    
        Mem:          1877        376       1501          0         28        223
    
        -/+ buffers/cache:        123       1753
    
        Swap:         4095          0       4095
    
    stack-node01:
    
                     total       used       free     shared    buffers     cached
    
        Mem:          1877        378       1499          0         28        223
    
        -/+ buffers/cache:        126       1751
    
        Swap:         4095          0       4095
    
  • IPマッチング-S,--ipcidrは、制御されたホストのIPアドレスまたはIPサブネットワークに基づいて
  • とマッチングする。
    [root@stack-master ~]# salt -S 172.16.202.0/24  cmd.run "free -m"
    
    stack-master:
    
                     total       used       free     shared    buffers     cached
    
        Mem:          1877        676       1201          0         30        225
    
        -/+ buffers/cache:        420       1457
    
        Swap:         4095          0       4095
    
    stack-node01:
    
                     total       used       free     shared    buffers     cached
    
        Mem:          1877        378       1498          0         28        223
    
        -/+ buffers/cache:        126       1751
    
        Swap:         4095          0       4095
    
    stack-node02:
    
                     total       used       free     shared    buffers     cached
    
        Mem:          1877        376       1500          0         28        223
    
        -/+ buffers/cache:        123       1753
    
        Swap:         4095          0       4095
    
    設定管理
    SLS(SaLt Stateファイルを表す)は、Salt Stateシステムの中核である。SLSは、システムの目標状態を記述し、シンプルなフォーマットのデータから構成される。これはしばしば配置管理と呼ばれる。
    top.slas
    top.slasは配置管理の入口ファイルです。すべてはここから始まります。masterホストでデフォルトは/srv/salt/ディレクトリ.top.ssはデフォルトでbaseタグから解析実行します。次のレベルは操作の目標です。正則、grainモジュール、またはグループ名でマッチングできます。次のレベルは実行するstateファイルです。拡張子は含まれません。作成/srv/salt/top.sms
    #    
    base:
      '*':
        - webserver
    #   
    base:
      group1:
        - match: nodegroup
        - webserver
    #grain  ,    - match: grain
    base:
      'os:Fedora':
        - match: grain
        - webserver
    
    top.slasファイルを準備して、stateファイルを作成します。
    #/srv/salt/webserver.sls
    apache:                 #     
      pkg:                  # state declaration
        - installed         # function declaration
    
  • 第一行は(ID declaration)タグ定義と呼ばれ、ここではインストールパッケージの名前として定義されている。注意:異なる発行版のパッケージの名前は違っています。例えば、fedoraの中でhttpdというカバンのDebian/Ubuntuの中でapache 2
  • といいます。
  • 第二行は状態定義と呼ばれ、ここで定義して使用する(pkg state module)
  • 第3行は関数定義と呼ばれ、ここではinstalled関数
  • を使用することを定義します。
    最後に、端末でコマンドを実行して結果を見ることができます。
    salt '*' state.highstate
    
    または添付のtest=Trueパラメータテスト実行
    salt '*' state.highstate -v test=True
    
    マスタがターゲットホストに対して命令を出してstate.highstatemモジュールを実行します。ターゲットホストはまずtop.slasをダウンロードして解析し、top.sms内のマッチングルール内の定義に従ってモジュールをダウンロードし、解析し、実行し、結果をmasterにフィードバックします。
    SLSファイル
    なお、上記の例では、SLSファイルwebserver.slasを略してwebserverと呼ぶ。SLSファイルの名前空間には、以下のようないくつかの基本的なルールがある。
    1、SLSファイルの拡張子.slasは省略される。(例えば.webserver.slasがwebserverになる)2、サブディレクトリがより良い組織になることができ、各サブディレクトリは一つの点で表されます。(例えば、webserver/init.slasを単にwebserverと呼ぶことができる)4、もし一つのディレクトリの下に同時にwebserver.slasとwebserver/init.smsが存在するならば、webserver/init.slasは無視され、SLSファイルの参照webserverはwebserver.slasの例だけ参照されます。
    apache/init.sls
    apache/httpd.conf
    ssh/init.sls
    ssh/server.sls
    ssh/banner
    ssh/ssh_config
    ssh/sshd_config
    
    これらのディレクトリを参照するserver.slasを作成します。
    server:
      - apache
      - ssh
      - ...
    
    stateの階層関係
    include
    includeはあるstateファイル/srv/salt/apache.slasを含みます。
    apache:
      pkg:
        - installed
      service:
        - running
        - require:
          - pkg: apache
    
    includeを使って、新しく書く必要がなくて、stateファイルがあります。
    include:
      apache
    
    exted
    extedとincludeは共同で使用して、作用は修正して、あるいは拡張して引用するstateファイルのあるフィールド/srv/salt/apaache.ssです。
    apache:
      pkg:
        - installed
      service:
        - running
        - require:
          - pkg: apache
    
    extedデフォルトは、参照ファイルのあるフィールドの属性を置き換えるものです。簡単に言えば、先にロードして、部分フィールドを変更します。例/srv/salt/apaache-change.slas。
    include:
      - apache
    extend:
      apache
        pkg:
          - name: vim
          - installed
    
    extedとwatch、またはrequireを結合して使うと、あるフィールドの属性が拡張されます。例:/srv/salt/apaache-custom.ss
    include:
      - apache
    extend:
      apache
        service:
          - watch:
            - file: /etc/redis.conf
    
    stateの論理関係リスト
    match:       ,   match: grain match: nodegroup
    require:     state,    state ,      state,       
    watch:    state        
    order:     require watch , order   state   order       
    
    stateの論理関係例
    require:あるstateに依存して、このstateを実行する前に、先に依存のstateを実行して、依存は複数あります。まず依存を確認して、他のものを実行します。
    httpd:                                  # maps to "name"
      pkg:
        - installed
      file:                                # maps to State module  filename
        - managed:                          # maps to the managed function in the file State module
        - name: /etc/httpd/conf/httpd.conf  # one of many options passed to the manage function
        - source: salt://httpd/httpd.conf
        - require:
          - pkg: httpd
    
    ウォッチ:あるstateが変化した時にこのモジュールを実行します。ウォッチはrequire機能を備えているほか、状態に注目する機能が追加されました。前提条件に変化があるかどうかを確認します。
    redis:
      pkg:
        - latest
      file.managed:
        - source: salt://redis/redis.conf
        - name: /etc/redis.conf
        - require:
          - pkg: redis
      service.running:
        - enable: True
        - watch:
          - file: /etc/redis.conf
          - pkg: redis
    
    order:requireとwatchより優先度が低いです。orderが指定しているstateはorderが指定していないより優先度が高いです。
    vim:
      pkg.installed:
        - order: 1
    
    あるstateの最後の運行をしたいですが、lastを使ってもいいです。
    環境変数
    例:
    file_roots:
      base:
        - /srv/salt/
      dev:
        - /srv/salt/dev/services
        - /srv/salt/dev/states
       prod:
         - /srv/salt/prod/services
         - /srv/salt/prod/states
    
    state.slasのデフォルトの動作環境はbase環境ですが、top.slas(top.slasは運転環境と運転が必要なslasを定義しています)は読み込まれていません。state.smsの公式文書については以下のように説明します。
    salt.modules.state.sls(mods, saltenv='base', test=None, exclude=None, queue=False, env=None,**kwargs)
    
    ここでsaltenvとは運行環境を指し、デフォルトはベース環境です。
    state.highstate:これは全体のすべての環境であり、すべての状態が有効です。各環境のtop.slasを読み取り、すべてのsmsに有効です。
    state.smsはどの環境を読み込むかを指定できます。
    state.sls  salt_env='prod' xxxx.sls
    
    このxxxxx.slasはtop.slasに記録しなくてもいいです。
    テンプレート
    テンプレートを使用して、slasファイルをPythonのループ、判定などのロジックを使用できるように簡単にすることができます。例:
    {% for item in ['tmp','test'] %}
    /opt/{{ item }}:
      file.directory:
        - user: root
        - group: root
        - mode: 755
        - makedirs: True
    {% endfor %}
    
    httpd:
      pkg.managed:
    {% if grains['os'] == 'Ubuntu' %}
        - name: apache2
    {% elif grains['os'] == 'CentOS' %}
        - name: httpd
    {% endif %}
        - installed
    
    使用する手順は簡単です。1.File状態はtemplateパラメータ-templateを使用します。テンプレートファイルの中で{名前}3.File状態モジュールを使って変数リストを指定します。
    - defaults:
      PORT:8080
    
    例:
    [root@linux-node1 base]# cd /srv/salt/base/
    [root@linux-node1 base]# vim dns.sls
    /etc/resolv.conf:
      file.managed:
        - source: salt://files/resolv.conf
        - user: root
        - group: root
        - mode: 644
        - template: jinja
        - defaults:
          DNS_SERVER: 10.0.0.2
    [root@linux-node1 base]# vim files/resolv.conf
    ###hehe
    nameserver {{ DNS_SERVER }}
    [root@linux-node1 base]# salt '*' state.highstate
    
    構文
    YAML文法
    ルール1:インデント
    YAMLは固定的なインデントスタイルを使ってデータ層の構造関係を表しています。Saltstackは各インデントレベルは2つのスペースで構成されています。必ずtabキーを使用してはいけません。
    ルール二:コロン
    YAML:mykey:mymyvalueは各コロンの後ろに必ずスペースがあります。(コロンで終わるとスペースがいらないです。ファイルのパスを示すテンプレートはスペースが必要ではありません。)
    ルール三:短横線
    リスト項目を表示するには、短いバーを使ってスペースを追加します。複数の項目は同じインデントレベルを使って同じリストの一部として使用します。
    my_dictionary:
      - list_value_one
      - list_value_two
      - list_value_three
    
    詳細な注意:http://www.mknight.cn/