saltstackノート

11482 ワード

一、saltstackって何?
saltstackは、オープンソース異機種プラットフォームの基礎設定管理ツールです.
二、saltstackは何ができますか.
何百台ものサーバを管理する管理者であれば、次のようなシーンに遭遇しますか?1.各サーバにagentを配備する必要があります.数百台のサーバが1つずつ配備されますか?2.agent構成は変更する必要がありますが、1つの構成も必要ですか?3.0 day脆弱性が爆発し、サーバーバージョンをチェックし、対応パッチをインストールする必要があります.どうすればいいですか?
  • は管理システムを構成し、事前定義された状態のリモートノードを維持することができる(例えば、指定されたパケットがインストールされ、指定されたサービスが実行されていることを確保する).
  • リモート実行システムは、リモートノード(単一のノードであってもよいし、任意のルールで選択されたノードであってもよい)上でコマンドおよびクエリーデータを実行するために使用される.

  • なぜsaltを使うのですか?
  • は簡単で、プロジェクトの大きさを考慮せずに設定とメンテナンスが非常に容易です.構成をほとんど変えずに作業できます.
  • は並列に実行され、コマンドがリモートシステムに送信されるのはシリアルではなく並列であり、安全な暗号化プロトコルを使用し、最小で最も速いネットワーク荷重を使用して、簡単なプログラミングインターフェースを提供する.
  • は柔軟で拡張しやすく、python開発を使用して、簡単なPython APIから呼び出すことができ、またはコマンドラインから呼び出され、使い捨てコマンドを実行するために使用することができ、より大きなアプリケーションの構成部分として使用することができます.

  • 三、saltstack運行方式?
    saltstackの3つの運転方式
  • Local
  • Master/Minion
  • Salt SSH

  • 最も伝統的な運行方式はやはりC/Sモードで、管理側はMasterをインストールして、管理ノードの上でMinionクライアントをインストールされます.主にMaster/Minionの運転方法について説明します.
    四、saltstack基本インストールと構成
    ここではrepoソースを採用し、オンラインでインストールします.公式ドキュメントを参照して、管理側と被管理ノードにyumコマンドを使用してインストールしてください.
      yum install salt-master
      yum install salt-minion
    

    インストールが完了したら、まずmasterを起動します
      service salt-master start
      #  
      /etc/init.d/salt-master start
    

    minionノードを開き、プロファイルを編集
      vim /etc/salt/minion
      #      ,         !
      master: 192.168.252.136 #master ip, dns         。
      id: web137 #     ,          。
    

    minionの起動
      service salt-minion start
    

    マスターに切り替え
      #  minion
      salt-key -L
      #      
      [root@localhost ~]# salt-key #  -L  。
      Accepted Keys:
      Denied Keys:
      Unaccepted Keys:
      web137
      Rejected Keys:
      #  minion
      salt-key -a web137 -y # -a         id  
        
      salt-key -A # -A      ,  ,     -d ,-D   。
      #    
      [root@localhost ~]# salt-key -L
      Accepted Keys:
      web137
      Denied Keys:
      Unaccepted Keys:
      Rejected Keys:
    

    これで、簡単なsaltstack環境が構築されました.
    いくつかの注意点と説明:a)masterは2つのポートとminion通信を使用して、この2つのポートが正常に通信していることを確認します.
  • 4505 publish_portメッセージ配信システムポート
  • 4506 ret_portクライアントとサービス側の通信ポート
  • ファイアウォールを閉じるか、INPUTチェーンテーブルにポートを追加できます.
      #iptables         ,     REJECT ALL  。  
      iptables -I INPUT 5 -p tcp --dport 4505 -j ACCEPT -m comment --comment "salt_publish_port"
      iptables -I INPUT 5 -p tcp --dport 4506 -j ACCEPT -m comment --comment "salt_ret_port"
    

    もちろん、プロファイルでポートをカスタマイズすることもできます.
      #master    
      vim /etc/salt/master
      #      ,    !
      publish_port: 1505
      ret_port: 1506
      #           ,  ,minion       master  。
      #minion    
      vim /etc/salt/minion
      #    
      master_port: 1506 #  master      
    

    b)minionとmaster認証プロセス1.minionは、初回起動時に、/etc/salt/pki/minion/の下で公開鍵と秘密鍵minion.pub(public key)とminion.pem(private key)を自動的に生成し、master 2.masterに公開鍵(minion.pub)を送信する.minionの公開鍵を受信した後、salt-keyコマンドでminionを受け入れ、minion公開鍵を/etc/salt/salt/salt/master/minionsの下に置く.minion idで名前を付けます.このとき、マスターはminionにコマンドを送信できます.自動的に受け入れるように構成することもできます
      #master  
      vim /etc/salt/master
      #    
      auto_accept: True #       
    

    五、saltstack簡単応用
    saltコマンドフォーマット
      salt ''  [  ]
    

    引用符のアクションターゲットは、正規およびワイルドカードを使用してフィルタ、フィルタできます.
  • salt'shell正則'コマンド//ワイルドカード
  • を使用
  • salt-E'prel正規'コマンド//正規表現
  • を使用
  • salt-N$groupコマンド//パケット名を使用してプロファイルでパケット
    #  master  
    vim /etc/salt/master
    #    
    nodegroups:
      group1: '[email protected],bar.domain.com,baz.domain.com and bl*.domain.com'
      group2: 'G@os:Debian and foo.domain.com'
    
  • を作成できます.
  • salt -L 'server_id1,server_id2,server_id 3'コマンド//複数のターゲットid
  • を指定
  • salt-G'osrelease:6.9'コマンド//osバージョン6.9
  • を指定
    例:test.ping、cmd.run
      #        
      salt '*' test.ping
      #test.ping
      [root@localhost ~]# salt '*' test.ping  
      web137:
          True
      mysql138:
          True
    
      #    
      salt '*' cmd.run 'df -Th'
      #cmd.run
      [root@localhost ~]# salt '*' cmd.run 'df -Th'
      mysql138:
        Filesystem           Type   Size  Used Avail Use% Mounted on
        /dev/mapper/VolGroup-lv_root
                             ext4    18G  968M   16G   6% /
        tmpfs                tmpfs  491M   12K  491M   1% /dev/shm
        /dev/sda1            ext4   477M   52M  400M  12% /boot
      web137:
        Filesystem           Type   Size  Used Avail Use% Mounted on
        /dev/mapper/VolGroup-lv_root
                             ext4    18G  968M   16G   6% /
        tmpfs                tmpfs  491M   12K  491M   1% /dev/shm
        /dev/sda1            ext4   477M   52M  400M  12% /boot
    

    どのようなモジュールが利用できるかどうやって知っていますか?どのようにモジュールがどのような方法で使用できるか、どのように使用できるかを知っていますか?
      #         
      salt 'web137' sys.list_modules
      #
      [root@localhost ~]# salt 'web137' sys.list_modules
      web137:
        - acl
        - aliases
        - alternatives
        - archive
        - artifactory
              
    
      #        
      salt 'web137' sys.doc test
      #
      [root@localhost ~]# salt 'web137' sys.doc test
      'test.arg:'
    
        Print out the data passed into the function ``*args`` and ```kwargs``, this
        is used to both test the publication data and cli argument passing, but
        also to display the information available within the publication data.
        Returns {"args": args, "kwargs": kwargs}.
    
        CLI Example:
    
            salt '*' test.arg 1 "two" 3.1 txt="hello" wow='{a: 1, b: "hello"}'
        
    
      'test.arg_repr:'
    
        Print out the data passed into the function ``*args`` and ```kwargs``, this
        is used to both test the publication data and cli argument passing, but
        also to display the information available within the publication data.
        Returns {"args": repr(args), "kwargs": repr(kwargs)}.
    
        CLI Example:
    
            salt '*' test.arg_repr 1 "two" 3.1 txt="hello" wow='{a: 1, b: "hello"}'
            
    

    パッケージのインストール
      #pkg.install
      salt 'web137' pkg.install tree
      #
      [root@localhost ~]# salt 'web137' pkg.install tree
      web137:
        ----------
        tree:
            ----------
            new:
                1.5.3-3.el6
            old:
    

    pkg関数は、ローカルシステムパッケージマネージャを自動的に同じsalt関数にマッピングします.これはpkg.installがRed Hatベースのシステムでyumを使用し、Debianシステムではaptを使用してパッケージをインストールすることを意味する.
    grainsモジュールは、grainsがminion(クライアント)の起動時に収集されたオペレーティングシステムタイプ、NIC ipなどの情報を説明します.
      #      grains     
      [root@localhost ~]# salt 'web137' grains.ls
      web137:
        - SSDs
        - cpu_flags
        - cpu_model
        - cpuarch
        - domain
        - fqdn
        - fqdn_ip4
        - fqdn_ip6
        - gpus
      #      grains       
      [root@localhost ~]# salt 'web137' grains.items
      web137:
        ----------
      SSDs:
      cpu_flags:
          - fpu
          - vme
          - de
          - pse
          - tsc
    
    
      #    minion       
      #  minion  ,    !
      vim /etc/salt/minion
      grains:
        roles:
          - webserver
          - memcache
        deployment: datacenter4
        cabinet: 13
        cab_u: 14-15
    

    これらの情報があれば、リモートでコマンドを実行するときに便利です.grainsのいくつかの指標に従って操作することができます.前述したようにsalt-G'osrelease:6.9'コマンドです.
    pillarモジュールはpillarがgrainsとは異なり、master上で定義され、minion定義のいくつかの情報であることを示しています.重要なデータ(パスワード)のようにpillarに存在したり、変数を定義したりすることができます.
      #      
      vim /etc/salt/master
      #  
      pillar_roots:
        base:
          - /srv/pillar
      #  pillar      ,     
      mkdir -p /srv/pillar
      #       ,    master
      service salt-master restart
      #      top.sls
      vim /srv/pillar/top.sls
      #    
      base:
        'web137': #  minion  
          - web137_info
      #  web137_info.sls  
      vim /srv/pillar/web137_info.sls
      #    ,         !
      conf: /etc/web137.conf
      myname: webserver
      #    pillar  
      salt '*' saltutil.refresh_pillar
      #    
      salt 'web137' pillar.items
      #
      [root@localhost pillar]# salt 'web137' pillar.items
      web137:
          ----------
          conf:
              /etc/web137.conf
          myname:
              webserver
      #      
      salt 'web137' pillar.item conf
      #
      [root@localhost pillar]# salt 'web137' pillar.item conf
      web137:
          ----------
          conf:
              /etc/web137.conf
      #   -I          
      salt -I 'myname:webserver' test.ping
      #
      [root@localhost pillar]# salt -I 'myname:webserver' test.ping
      web137:
          True
    

    その他のその他#リモート転送ファイル、ローカルファイルcopyをノードにroot@localhost:~#salt-cp'./abc.txt/opt/{'ftp 138':{'/opt/abc.txt':True},'web 137':{'/opt/abc.txt':True}}ディスク使用[root@salt-master/]#salt'disk.usage#ネットワークインタフェース[root@salt-master/]#salt''network.interfaces#ファイル圧縮root@localhost:~#salt'archive.gzip/opt/abc.txt#ファイル解凍root@localhost:~#salt'archive.gunzip/opt/abc.txt.gz#クライアントsalt'cp.get_にファイルをコピーfile salt://apache.txt/tmp/cp.txt#クライアントsalt'cp.get_にディレクトリをコピーdir salt://test/tmp#生存クライアントsalt-run manage.up#実行サービス側スクリプトsalt'cmd.scriptを表示salt://test/shell.sh
    六、saltstack高級応用
    1、構成管理インストールapache
      #      
      vim /etc/salt/master
      #      
      file_roots:
        base:
          - /srv/salt
      #  : base、dev(    )、test(    )、prod(    )。
      #    salt
      mkdir -p /srv/salt
      #  top.sls  
      vim /srv/salt/top.sls
      #    
      base:
        'web137':
          - apache
      #  apache.sls  
      vim /srv/salt/apache.sls
      #  ,       !
      apache-service: #   id  
        pkg.installed: #     
        - names: #         - name:httpd
          - httpd #  
          - httpd-devel
    
      file.managed:
        - name: /etc/httpd/conf/httpd.conf #      
        - source: salt://httpd.conf #   ,       /srv/salt/   
        - user: root #      
        - group: root #     
        - mode: 644 #    
    
      service.running: #      
        - name: httpd  #    
        - enable: True  #      
      #
      salt 'web137' state.highstate
      #        
       salt 'web137' state.sls apache #   .sls
    

    2、目次操作
      #  top.sls  
      vim /srv/salt/top.sls
      base:
        'mysql138' :
          - diroper
      #  diroper  
      vim /srv/salt/diroper.sls
      diroper:
        file.recurse:
          - name: /tmp/diroper
          - source: salt://diroper
          - user: root
          - file_mode: 644
          - dir_mode: 755
          - mkdir: True
          - clean: True #              
      #  
      salt 'mysql138' state.highstate
    

    3、リモート実行スクリプト
      #  
      cmdexe:
        - onlyif: test -f /tmp/123.txt
        - names:
          - touch /tmp/cmdtest.txt
          - mkdir /tmp/cmdtest
        - user: root
      #  
      shell-test:
      cmd.script:
        - source: salt://test/1.sh
        - user: root
    

    4、管理crontab#cron-test:cron.present:#cron.present:cron.absentを削除に変更-name:/bin/touch/tmp/11.1 txt-user:root-minute:'#注意アスタリスクは単引用符-hour:20-daymonth:1-10-month:'3,5'-dayweek:''
    七、saltstack開発
      import salt.client 
      client = salt.client.LocalClient()
      ret = client.cmd('*','test.ping')
      print ret
    

    八、総括と参考
  • プロファイルは、キー値ペアの形式であり、スペースに特に注意する必要があります.
  • 以上はlinux環境で導入されており、saltstackはマルチ環境をサポートできますが、masterはwindows環境でのインストールをサポートしていないことに注意してください.
  • ノートの一部には触れていません
  • windows構成、クラウド構成
  • webインタフェース
  • アーキテクチャには、エージェント層に類似したsyndic
  • もある.

    参考サイト
  • saltstack公式ドキュメント
  • 中国SaltStackユーザーグループ
  • saltstack全面紹介
  • 運営メンテナンスネットワーク_Saltstackインストール構成の詳細