1.1Ansibleクイックスタート

この記事では、Ansibleの主な機能を簡単に確認します。初心者の場合、詳細の一部が理解できない場合があります。問題ではありません。後で説明します。

環境を整える

Ansibleを使用して複数のマシンをバッチで管理するため、テスト用に複数のマシンを準備し、ここではCentOS7を使用します。

[root@192-168-31-106 ~]# cat /etc/hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.31.106 node1 manager
192.168.31.100 node2 
192.168.31.101 node3 
192.168.31.102 node4 

管理ノードの/ etc / hostsへのIP構成は必要ありません。これは便宜上のものです。

  • 106は管理ノード、つまりAnsibleがインストールされているノードであり、他のノードは管理対象ノード、つまり作業ノードと呼ばれます。
  • Ansibleを管理ノードにインストールする必要があります。インストール手順については前のセクションを参照してください1.0-安装
  • 管理ノードは、パスワードなしで他のマシンにログインするように構成する必要があります。詳細については、https://blog.csdn.net/xys2015/article/details/110442383を参照してください。

構成が完了したら、次のようなすべてをテストすることを忘れないでください。

ssh ${IP_OR_DOMAIN} echo hello

ホストリスト

Ansibleが管理するマシンは、インベントリファイルに書き込む必要があります。単純なホストリスト形式は非常に単純です。IPアドレスを垂直に配置するだけです。デフォルトのホストインベントリファイルは/etc/ansible/hostsです。変更して、使用するものを入力します。IP住所

cp /etc/ansible/hosts /etc/ansible/hosts.bak #查看这个默认文件可以看到一些基础帮助
cat /etc/ansible/hosts
[myservers]
192.168.31.106:22
192.168.31.100:22
192.168.31.101:22
192.168.31.102:22
#myservers是分组名,可根据实际情况填写
#主机清单文件里,#号开头是注释

実稼働環境では、ホストリストファイルは通常、管理のためにgitに配置されます

このために

たとえば、リモートマシンのメモリ使用量を確認する場合は、SSHを使用してこれを行うことができます。

[root@192-168-31-106 ~]# ssh 192.168.31.100 free -h

複数のマシンのメモリ使用量を同時に表示したい場合は、スクリプトを記述してループで実装できます。ここでは詳しく説明しません。Ansibleが同様の関数を実装する方法を見てみましょう。

[root@192-168-31-106 ~]# ansible all -a "free -h"
192.168.31.106 | CHANGED | rc=0 >>
              total        used        free      shared  buff/cache   available
Mem:           3.9G        2.5G        741M        9.1M        651M        1.1G
Swap:            0B          0B          0B
192.168.31.101 | CHANGED | rc=0 >>
              total        used        free      shared  buff/cache   available
Mem:           3.9G        210M        3.5G        8.5M        110M        3.5G
Swap:            0B          0B          0B
192.168.31.102 | CHANGED | rc=0 >>
              total        used        free      shared  buff/cache   available
Mem:           3.9G        210M        3.6G        8.5M        103M        3.5G
Swap:            0B          0B          0B
192.168.31.100 | CHANGED | rc=0 >>
              total        used        free      shared  buff/cache   available
Mem:           3.9G        215M        3.5G        8.5M        103M        3.5G
Swap:            0B          0B          0B

ここではall、ホストのリストに書かれたすべてのマシンを意味特殊な使用法は、デフォルトがされています/etc/ansible/hosts

ターゲットマシンの状態は変わらないことがCHANGEDわかってfree -hいるので、ここにいる全員が理解するのは少し奇妙かもしれません。適切に設計されたAnsible文法は、「べき等」という非常に重要な機能を実現できます。率直に言って、スクリプトは機能を実現できます。また、このスクリプトを繰り返し実行しても、ターゲットの状態は変わりません。たとえば、nginxをインストールするための一連のスクリプトを作成する場合、パッケージのダウンロードとサービスの開始が含まれる場合があります。べき等性の高いスクリプトは、このスクリプトを繰り返し実行すると、システムはnginxがすでに実行されていることを自動的に検出するため、関連するインストール操作は実行されなくなります。関連する背景知識がないと、誰もがこれを理解するのが難しい場合があります。ポイント、そしてあなたは当分の間それを無視することができます

お互いに推論を引き出すことができ、次のコマンドなどの多くのAnsibleゲームプレイをすでに達成できると思います

ansible all -a "df -h"
ansible all -a "cat /etc/hosts"

非常に一般的な命令があり、通常は初めて実行します

ansible all -m ping
ansible myservers -m ping #myservers是我定义的机器分组名称,大家根据情况修改

Ansibleのターゲットマシンへの接続が正常かどうかを検出できます

ここに画像の説明を挿入

プレイブックを探索する

特定の機能を自動化する場合、最も伝統的な解決策は、コマンドのグループを整理するシェルスクリプトを作成することです。Ansibleでは、Playbookと呼ばれるYAMLファイルを使用して、Ansibleコマンドを整然と構造化された方法で整理できます。以下に、Ansibleを使用してマシン上で時間同期サービスを構成する方法を示します

[root@192-168-31-106 ~]# cat ntpupdate.yaml
---
- hosts: all
  tasks:
  - name: Ensure ntpdate (for time synchronization) is installed.
    yum: 
      name: ntpdate 
      state: present 
  - name: Create a cron "*/10 * * * * /usr/sbin/ntpdate -u ntp1.aliyun.com &> /dev/null"
    cron:
      name: "sync_beijing_time"
      minute: "*/10"
      job: "/usr/sbin/ntpdate -u ntp1.aliyun.com &> /dev/null"

この段階でテストを行っています。このファイルがどこに配置されていてもかまいません。

YAMLには、スペースに関する非常に厳しい要件があります。2つのスペースまたは4つのスペースを使用できます。通常、2つのスペースが使用されます(公式ドキュメントの例も2です)。次のコマンドを使用して、文法エラーがあるかどうかを確認できます。

ansible-playbook --syntax-check ntpupdate.yaml

スクリプトによって管理されているマシンを確認してください。

ansible-playbook ntpupdate.yaml --list-hosts

実際にコマンドを実行します。

ansible-playbook ntpupdate.yaml
[root@192-168-31-106 ~]# ansible-playbook ntpupdate.yaml
PLAY [all] *******************************************************************************************************

TASK [Gathering Facts] ********************************************************************************************
ok: [192.168.31.102]
ok: [192.168.31.101]
ok: [192.168.31.106]
ok: [192.168.31.100]

TASK [Ensure ntpdate (for time synchronization) is installed.] *****************************************************
ok: [192.168.31.102]
ok: [192.168.31.100]
changed: [192.168.31.101]
ok: [192.168.31.106]

TASK [Create a cron "*/10 * * * * /usr/sbin/ntpdate -u ntp1.aliyun.com &> /dev/null"] ******************************
changed: [192.168.31.102]
changed: [192.168.31.101]
changed: [192.168.31.106]
changed: [192.168.31.100]

PLAY RECAP ********************************************************************************************************
192.168.31.100             : ok=3    changed=1    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   
192.168.31.101             : ok=3    changed=2    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   
192.168.31.102             : ok=3    changed=1    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   
192.168.31.106             : ok=3    changed=1    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   

ここに画像の説明を挿入

実行観測出力の内容はansible-playbook ntpupdate.yaml数回繰り返すことができます。取得するスクリーンショットは私のものとは異なる場合があります。

  • 緑のOKは、ターゲットマシンが変更を加えていないことを意味します
  • 黄色は、ターゲットマシンが変更されたことを示します(必ずしも実際の変更ではありません)

自由に機械を見つけて実行結果を確認できます

[root@192-168-31-100 ~]# rpm -qa | grep update
geoipupdate-2.5.0-1.el7.x86_64
[root@192-168-31-100 ~]# crontab -l
#Ansible: sync beijing time
*/10 * * * * /usr/sbin/ntpdate -u ntp1.aliyun.com &> /dev/null

誰もがAnsibleのシンプルさとパワーを直感的に感じることができると思います。上記の自動構成時間同期タスクは、シェルスクリプトで記述した場合、まだ少し作業負荷であり、特にシェルスクリプトによって実現されるAnsibleほど単純ではありません。同一の、結果を観察できるなど、そのような機能、作業負荷が大幅に増加します。上記で使用したYUMは、時限タスクをインストールおよび管理します。これは、Ansibleでサポートされるモジュール(モジュール)と呼ばれ、後で説明します。

参照

https://docs.ansible.com/ansible/latest/user_guide/playbooks_intro.html

おすすめ

転載: blog.csdn.net/xys2015/article/details/113784045