Ansibleは、UnixライクおよびMicrosoftWindowsオペレーティングシステム向けのオープンソースソフトウェアプロビジョニングおよび構成管理ツールです。
Puppet、Chef、CFEngineとは異なり、サーバーソフトウェアは1台のマシンにインストールされ、クライアントマシンはエージェントソフトウェアを介して管理されます。 Ansibleでは、ノードはSSH経由でノード(Ansibleサーバー)を制御することによって管理されるため、管理対象ノード(クライアントサーバー)マシンで実行されるエージェントソフトウェアはありません。
Ansibleは、SSHを使用して数百のノードでソフトウェアの展開、構成管理を実行できます。通常、操作全体は1つのコマンドansibleで実行されます。ただし、場合によっては、展開のために複数のコマンドを実行する必要があります。
このガイドは、CentOS 8 / RHEL8にAnsibleをインストールするのに役立ちます。
環境
ホスト名 | IPアドレス | OS | 目的 |
---|---|---|---|
server.itzgeek.local | 192.168.0.10 | CentOS 8 / RHEL 8 | 制御機 |
node1.itzgeek.local | 192.168.0.20 | CentOS 8 | 管理対象ノード1 |
node2.itzgeek.local | 192.168.0.30 | CentOS 7 | 管理対象ノード2 |
CentOS 8 /RHEL8にAnsibleをインストールする
セットアップ制御ノード
Ansibleをインストールするには、CentOS8とRHEL8でそれぞれEPELとAnsibleリポジトリを有効にする必要があります。
### CentOS 8 ### yum install -y epel-release ### RHEL 8 ### subscription-manager repos --enable ansible-2.9-for-rhel-8-x86_64-rpms
yumコマンドでAnsibleをインストールします。
yum install -y ansible
Ansibleをインストールしたら、以下のコマンドを実行してAnsibleのバージョンを確認します。
ansible --version
出力:
ansible 2.8.5 config file = /etc/ansible/ansible.cfg configured module search path = ['/root/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules'] ansible python module location = /usr/lib/python3.6/site-packages/ansible executable location = /usr/bin/ansible python version = 3.6.8 (default, May 21 2019, 23:51:36) [GCC 8.2.1 20180905 (Red Hat 8.2.1-3)]
管理対象ノードのセットアップ
クライアントマシンには、少なくともPython 2(バージョン2.6以降)またはPython 3(バージョン3.5以降)が必要です。
### CentOS 8 / RHEL 8 ### yum install -y platform-python ### CentOS 7 / RHEL 7 ### yum install -y python
SELinux
管理対象ノードでSELinuxを有効にしている場合は、Ansibleでコピー/ファイル/テンプレート関連の機能を使用する前に、以下のパッケージをノードにインストールする必要があります。
### CentOS 8 / RHEL 8 ### yum install -y python3-libselinux ### CentOS 7 / RHEL 7 ### yum install -y libselinux-python
SSH認証
前述のように、Ansibleはリモート通信にネイティブOpenSSHを使用します。 Ansibleは、管理対象ノードでコマンドを実行するためのパスワードなし認証とパスワード認証の両方をサポートしています。
ここでは、このデモで、ansible制御ノード(root)と管理対象ノード(root)の間でパスワードなしの通信を使用しました。ただし、パスワード認証でAnsibleを使用する方法を説明します。
SSHキー認証(パスワードなし認証)
ssh認証に関しては、デフォルトでは、sshキー(パスワードなしの認証)を使用してリモートマシンで認証します。
読む :CentOS 8 /RHEL8でSSHパスワードレスログインを設定する方法
読む :CentOS 7 /RHEL7でSSHパスワードレスログインを設定する方法
ご存知のとおり、ノードで実行するソフトウェアのプロビジョニングまたは構成の変更には、root権限またはrootと同等の権限(sudo)が必要です。したがって、簡単にするために、Ansibleサーバーのrootユーザーとノードのrootユーザーの間にパスワードなしの通信を設定します。パスワード認証は、オプション–ask-passを指定することにより、必要に応じて使用することもできます。このオプションでは、制御マシンへのsshpassが必要です。
yum install -y sshpass
Ansibleインベントリを作成する
/ etc / ansible / hostsファイルは、AnsibleがSSH / Winrm(Windows)を介して接続して管理するリモートホストのインベントリを保持します。現時点では、リモートLinuxノードの構成を管理する方法のみを説明します。
インベントリファイルを編集します。
vi /etc/ansible/hosts
1つ以上のリモートシステムのIPアドレスまたはホスト名をその中に入れます。 [GROUP_NAME]でサーバーをグループ化できます。ここでは、両方のマシンをデモサーバーグループに追加しました。
グループは、特定の用途のシステムを分類するために使用されます。グループを指定しない場合、グループ化されていないホストとして機能します。
[demoservers] 192.168.0.20 192.168.0.30
Ansible接続を確認する
制御マシンからのping(モジュール)を使用して、ノードの接続を確認しましょう。これを行うには、オプション-m(モジュールのロード)とall(すべてのサーバー)またはdemoservers(ノードのグループ)を指定したコマンドansibleを使用します。
このpingモジュールは、Ansible接続の問題のトラブルシューティングによく使用されます。# All servers - If you use passwordless authentication. Current logged in user on Ansible server and remote node's user are same ansible -m ping all # All servers - If you use passwordless authentication and the remote user is different from logged in user on Ansible server ansible -m ping -u raj all # All servers - If you use password authentication and the remote user is different from logged in user on Ansible server ansible -m ping all -u raj --ask-pass # Only demoservers group - If you use passwordless authentication. Current logged in user on Ansible server and remote node's user are same ansible -m ping demoservers
出力:
192.168.1.20 | SUCCESS => { "changed": false, "ping": "pong" } 192.168.1.30 | SUCCESS => { "changed": false, "ping": "pong" }
上記の例では、pingモジュールをansibleコマンドで使用して、パスワードなしおよびパスワード認証を使用してリモートホストのすべてまたはグループにpingを実行する方法を確認しました。
同様に、ansibleコマンドでさまざまなモジュールを使用できます。利用可能なモジュールはここにあります。
ノードでコマンドを実行
今回は、コマンドモジュールとansibleコマンドを使用して、リモートマシン情報を取得します。
以下のコマンドは、制御ノードと管理対象ノードの間でパスワードなしの通信があることを前提に記述されています。コマンドを実行するためにデモサーバーグループを使用しています。ホスト名を確認
最初の例では、コマンドモジュールを使用してhostnameコマンドを実行し、リモートノードのホスト名を一度に取得します。
ansible -m command -a "hostname" demoservers
出力:
192.168.1.30 | SUCCESS | rc=0 >> node2.itzgeek.local 192.168.1.20 | SUCCESS | rc=0 >> node1.itzgeek.local
稼働時間を確認
ノードの稼働時間を確認します。
ansible -m command -a "uptime" demoservers
出力:
192.168.1.30 | SUCCESS | rc=0 >> 16:36:45 up 56 min, 3 users, load average: 0.00, 0.00, 0.00 192.168.1.20 | SUCCESS | rc=0 >> 16:36:45 up 1:09, 2 users, load average: 0.05, 0.04, 0.05
リモートファイルの読み取り
特定のファイルの内容を表示することもできます。
ansible -m command -a "cat /etc/hosts" demoservers
出力:
192.168.1.30 | SUCCESS | rc=0 >> # This file is managed by man:systemd-resolved(8). Do not edit. # # This is a dynamic resolv.conf file for connecting local clients to the # internal DNS stub resolver of systemd-resolved. This file lists all # configured search domains. # # Run "systemd-resolve --status" to see details about the uplink DNS servers # currently in use. # # Third party programs must not access this file directly, but only through the # symlink at /etc/resolv.conf. To manage man:resolv.conf(5) in a different way, # replace this symlink by a static file or a different symlink. # # See man:systemd-resolved.service(8) for details about the supported modes of # operation for /etc/resolv.conf. nameserver 127.0.0.53 192.168.1.20 | SUCCESS | rc=0 >> # Generated by NetworkManager search itzgeek.local nameserver 8.8.8.8 nameserver 192.168.1.1
ファイル出力のリダイレクト
リダイレクションを使用して、出力(Ansibleサーバー上)を任意のファイルに保存することもできます。
ansible -m command -a "cat /etc/resolv.conf" demoservers > /tmp/ouput_file cat /tmp/ouput_file
ノードで構成を変更する
lineinfileモジュールを使用して、リモートノード上のファイルを編集できます。たとえば、ネームサーバーを追加するには、次のコマンドを使用できます。
ansible -m lineinfile -a "path=/etc/resolv.conf line=nameserver 8.8.4.4" demoservers
以下のコマンドを使用して、変更を検証できます。
ansible -m command -a "cat /etc/resolv.conf | grep -i nameserver" demoservers
結論
それで全部です。これで、CentOS 8 / RHEL8にAnsibleが正常にインストールされました。 タスクを自動化するためのAnsibleプレイブックの作成に進むことができます。