この記事では、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