ansibleベース(1)

7360 ワード

目次
  • 一、基礎概念
  • 二、基本操作
  • 取付
  • 公開鍵
  • をプッシュする.
  • ホスト構成表
  • を定義する
  • ad-hoc(リモート実行コマンド)

  • 私は張賀と申します.合格したLINUX运維技師は、LINUXの学習と研究に専念し、ある中型企業のウェブサイト运維の仕事を担当し、仏学とランニングが好きだった.個人ブログ:転送陣筆者微信:zhanghe15069028807、非誠勿擾.
    一、基礎概念
    ansibleって何?
    ansibleはsshプロトコルを呼び出して一括構成と管理を行うソフトウェアである.
    なぜansibleを使うのですか?
    もし私たちが2台のホストしか持っていないならば、ansibleを使う必要はありませんが、もし私たちが50台以上のホストを持っているならば、統一的に配置を修正するには、1台の変更作業量が大きすぎて、私たちはこの時ansibleツールを使って、50台のホストを統一的に接続して配置を修正することができて、1回の操作だけを必要として、重複性の操作を減らすことができます.メンテナンススタッフの効率が大幅に向上しました.
    ansibleは何ができますか?
  • 一括コマンド実行
  • 一括同期プロファイル
  • 一括コード配置
  • ansibleの特徴と優位性
  • 制御側にansibleソフトウェアをインストールするだけで、制御側はsshが正常に動作することを保証し、サービスを開始する必要はありません.
  • は、構成を変更した後、再読み込みする必要がなく、すぐに有効になります.
  • モジュールはansibleのコマンドに相当し、playbookはスクリプトに相当する.

  • ansibleのアーキテクチャ構成
  • host inventory:ホストリスト
  • playbook:タスクシナリオ
  • core modules:コアモジュール
  • commection plugin:接続プラグイン
  • ansibleの実行フロー
  • ansibleはplaybookのシナリオを読み取り、シナリオにはどのホストに対してどのタスクを実行するかが記録されます.
  • ansibleは、ホストリストを介して実行するホストを見つけ、特定のモジュール(異なる機能に相当するコマンド)
  • を呼び出す.
  • その後、接続プラグインを介して対応するホストに接続してタスクリストを発行する.
  • 最後に、制御されたエンドホストは、送信されたタスク解析コストshellコマンドを実行する.

  • どうやってansibleを使いますか?
    どのようにansibleを使うかについては、この節の主な内容です.
    ansibleと同じタイプのツールで有名なのはsalstackです
    二、基本操作
    インストール
    インストール前にepelソースを準備するには、次の手順に従います.
    yum -y install ansible
    ansible --version
    ansible 2.9.1

    公開鍵のプッシュ
    ansibleのデフォルトは、制御されたエンドに接続するために公開鍵を使用します.ansibleを使用する前に、ansibleの公開鍵を3台の制御されたエンドにプッシュします.
    制御側の数が少ない場合は、公開鍵を手動でプッシュできます.制御側の数が多い場合は、スクリプトを使用して公開鍵をプッシュします.現在の管理側には3台のホストがあります
  • 192.168.80.62
  • 192.168.80.63
  • 192.168.80.64

  • 公開鍵を手動でプッシュするには、次の手順に従います.
  • マスタ端子ansibleはssh-keygenによって一対の鍵を生成し、ホームディレクトリに自動的に格納される.ssh/authorized_keysファイル下
  • その後、ssh-copy-idによって公開鍵を制御側にアップロードすると、目的のユーザホームディレクトリの下に自動的に保存される.ssh/
  • .
    //    ,    
    [root@ansible ~]# ssh-keygen   
    Generating public/private rsa key pair.
    Enter file in which to save the key (/root/.ssh/id_rsa): 
    Created directory '/root/.ssh'.
    Enter passphrase (empty for no passphrase): 
    Enter same passphrase again: 
    Your identification has been saved in /root/.ssh/id_rsa.
    Your public key has been saved in /root/.ssh/id_rsa.pub.
    The key fingerprint is:
    SHA256:GS0Cof8VpoMGy9QfS9ICN1ZFrpwWHo5ED9zrPYBSZlo root@ansible
    The key's randomart image is:
    +---[RSA 2048]----+
    |  ..O+.oo        |
    |   BE*.. .       |
    |  +*=.O.* .      |
    | oo=.@o@ =       |
    |  o.=.%oS        |
    |   . o.oo        |
    |      .  .       |
    |                 |
    |                 |
    +----[SHA256]-----+
    
    //       
    [root@ansible .ssh]# ls
    id_rsa  id_rsa.pub
    
    //        ,     yes       
    [root@ansible ~]# ssh-copy-id 192.168.80.62 

    スクリプトが公開鍵をプッシュするには、次の手順に従います.
    //        IP     ,       
    [root@ansible ~]# cat host
    192.168.80.62 cba-123
    192.168.80.63 cba-123
    192.168.80.64 cba-123
    
    [root@ansible ~]# vim push_pub_key.sh 
    #!/bin/bash
    #       expect
    expect () {
    /usr/bin/expect </dev/null
            expect
            echo "key already send!"
        else
            expect
            echo "key already send!!"
        fi
    done

    この章はansibleですので、shellのスクリプトについてはあまり説明しません.具体的な説明を見たい場合は、私のブログのリンクをクリックして、ドアを転送してください.
    ホスト構成表の定義
    ホストリストの定義とは、ansibleプログラムに、どのホストのIPに接続するかを教え、ホスト名、サポートグループを使用することもできます.
    [root@ansible ~]# vim /etc/ansible/hosts
    [test]
    192.168.80.62
    192.168.80.63
    192.168.80.64
    //  test    
    [root@ansible ~]# ansible test --list-host
      hosts (3):
        192.168.80.62
        192.168.80.63
        192.168.80.64
        
    //      
    [root@ansible ~]# ansible all --list-host
      hosts (3):
        192.168.80.62
        192.168.80.63
        192.168.80.64

    公開鍵をプッシュし、ホストリストを定義し、使用できるかどうかをテストします.pingモジュールを使用します.このモジュールはネットワーク内のpingではなく、ansibleと制御されたエンドとの接続性をテストするだけです.
    //ansible       ,-m     ,      ping  ,    ,     。
    [root@ansible ~]# ansible test -m ping
    192.168.80.62 | SUCCESS => {
        "ansible_facts": {
            "discovered_interpreter_python": "/usr/bin/python"
        }, 
        "changed": false, 
        "ping": "pong"
    }
    192.168.80.63 | SUCCESS => {
        "ansible_facts": {
            "discovered_interpreter_python": "/usr/bin/python"
        }, 
        "changed": false, 
        "ping": "pong"
    }
    192.168.80.64 | SUCCESS => {
        "ansible_facts": {
            "discovered_interpreter_python": "/usr/bin/python"
        }, 
        "changed": false, 
        "ping": "pong"
    }
  • 緑色代表被管理ホストが変更されていない
  • 黄色は、管理ホストによって発見された変更
  • を表す.
  • 赤は障害を表し、プロンプトの原因
  • を参照してください.
    ad-hoc(リモート実行コマンド)
    ad-hocとは?
    実はリモートでホストリストの中のホストに対してコマンドを実行して、これらのコマンドは一時的に実行して、実行が終わったら終わりで、保存しません.
    ad-hocの使用シーン
    たとえば、複数のマシンでプロセスが開始されたかどうかを確認します.
    ad-hocのフォーマット
    ansible -m -a
    モジュールは書かなくてもよく、デフォルトはcommandで、ansible test -m command -a 'hostname'のように以下のフォーマットに簡単に書くことができます.
    //ansible       ,-a        ,          
    [root@ansible ~]# ansible test -a 'hostname'
    192.168.80.64 | CHANGED | rc=0 >>
    backup
    
    192.168.80.63 | CHANGED | rc=0 >>
    nfs
    
    192.168.80.62 | CHANGED | rc=0 >>
    nginx

    ad-hocの欠点はパイプと&記号があまりサポートされていないことです.
    // command          ,  
    [root@ansible ~]# ansible test -a 'df -h | head -2'
    192.168.80.64 | FAILED | rc=1 >>
    df: invalid option -- '2'
    Try 'df --help' for more information.non-zero return code
    
    192.168.80.62 | FAILED | rc=1 >>
    df: invalid option -- '2'
    Try 'df --help' for more information.non-zero return code
    
    192.168.80.63 | FAILED | rc=1 >>
    df: invalid option -- '2'
    Try 'df --help' for more information.non-zero return code
    
    //  shell     
    [root@ansible ~]# ansible test -m shell -a 'df -h | head -2'
    192.168.80.62 | CHANGED | rc=0 >>
    Filesystem               Size  Used Avail Use% Mounted on
    /dev/mapper/centos-root   45G  1.7G   44G   4% /
    
    192.168.80.63 | CHANGED | rc=0 >>
    Filesystem               Size  Used Avail Use% Mounted on
    /dev/mapper/centos-root   45G  1.7G   44G   4% /
    
    192.168.80.64 | CHANGED | rc=0 >>
    Filesystem               Size  Used Avail Use% Mounted on
    /dev/mapper/centos-root   45G  1.7G   44G   4% /

    shellモジュールは万能で、何でも実行できます.では、私たちはいっそshellモジュールだけを勉強すればいいのではないでしょうか.どうして他のモジュールを勉強しなければなりませんか.shellモジュールは、相手がどんな状態であっても、命令を一度相手に実行しなければならないため、他のモジュールは、相手の現在の状態が何であるかを判断し、相手の状態が私たちが望んでいる場合は実行しない.そうでなければ、実行する.
    [root@ansible ~]# ansible test -m shell -a 'yum -y install vim'

    上記のコマンドは、何度実行しても黄色が表示されますが、黄色は相手が変更されたことを表しています.実は最初に変更されたのは初めてで、後ろは重複しています.理屈では、最初以外は緑を表示するべきですが、shellモジュールでは相手の状態を判断することはできません.私たちは専門のインストールモジュールを使用すると、結果は私たちが望んでいるものになります.制御側がvimをインストールしている場合は、インストールは実行されず、変更されずに緑が表示されます.次のようになります.
    [root@web1 ~]# ansible-doc yum    #          yum     
    EXAMPLES:
    
    - name: install the latest version of Apache   #     apache             
      yum:
        name: httpd    #   httpd
        state: latest  #   latest(  ),absent(  ),present(  )
        
    [root@ansible ~]# ansible test -m yum -a 'name=vim state=present'