Ansibleは、Python言語で記述された広く使用されている構成管理ツールであり、単一または複数のマシンを同時に構成するのに役立ちます。 Ansibleを使用して以下のタスクを実行できます
- 単一または複数のノードを最初から構成する
- 展開
- 構成の変更
- パッチ適用
- サービス管理
- その他
Ansibleは、その単純さから広く使用されています。 AnsibleコードもYAML言語で記述されており、リモートマシンにエージェントをインストールする必要はありません。 Ansibleはポート22(SSH)を使用してリモートマシンに接続し、必要な変更を加えます。
22ポートでリモートマシンに接続できるすべてのマシンは、制御ノードになることができます。制御ノードは、Ansibleをインストールできる場所であり、管理対象ノードは制御ノードによって管理されます。
コントローラノードへのAnsibleのインストールを見てみましょう。
CentOS 7にAnsibleをインストールする:
PythonはAnsibleをインストールするための唯一の前提条件なので、以下のコマンドを実行してPythonをインストールしましょう。
$sudo yum install python3 -y
CentOS 7にAnsibleをインストールするには、まずCentOS7EPELリポジトリがインストールされていることを確認します。以下のコマンドを実行して、epelリポジトリをインストールします。
$sudo yum install epel-release
以下のupdateコマンドを実行して、システムパッケージインデックスを更新します。
$sudo yum update -y
リポジトリがインストールされたら、yumパッケージマネージャーを使用してAnsibleをインストールします。以下のコマンドを実行してAnsibleをインストールします。
$sudo yum install ansible -y
Ansibleが正しくインストールされているかどうかとそのバージョンを確認します。
$ansible -v
CentOS 8にAnsibleをインストールします:
CentOS8のインストール手順を見てみましょう。CentOS8にPythonをインストールしましょう。
$sudo dnf install python3
Pythonをインストールしたら、次のコマンドを実行してEPELリポジトリをインストールしましょう。
$sudo dnf install epel-release -y
以下のupdateコマンドを実行して、システムパッケージインデックスを更新します。
$sudo dnf update -y
これで、Ansibleをインストールする準備が整いました。以下のコマンドを実行してAnsibleをインストールします。
$sudo dnf install ansible -y
Ansibleが正しくインストールされているかどうかとそのバージョンを確認します。
$ansible -v
UbuntuにAnsibleをインストールする:
現在、ほとんどのLinuxディストリビューションではPythonがデフォルトのパッケージです。 pythonがインストールされていない場合は、以下のコマンドを実行してpythonパッケージをインストールします。
$sudo apt-get install python3
UbuntuにAnsibleをインストールするには、まず以下のコマンドを実行してリポジトリをインストールしましょう。
$sudo apt-add-repository ppa:ansible/ansible
以下のupdateコマンドを実行して、システムパッケージインデックスを更新します。
$sudo apt-get update -y
次に、Ansibleをインストールします。
$sudo apt-get install -y ansible
Ansibleが正しくインストールされているかどうかとそのバージョンを確認します。
$ansible -v
CentOS、Debian、UbuntuにPython PIPを使用してAnsibleをインストールします:
使用しているオペレーティングシステムに関係なく、Pythonパッケージインストーラーを使用してAnsibleをインストールできます。以下のコマンドを実行してpython3-pipをインストールしましょう。
CentOS 7以下の場合:
$sudo yum install python3 python3-pip -y
CentOS 8の場合:
$sudo dnf install python3 python3-pip -y
UbuntuとDebianの場合:
$sudo apt-get install python3 python3-pip
Pythonとpipがインストールされているので、任意のオペレーティングシステムで以下のコマンドを実行してAnsibleをインストールしましょう。
$sudo pip3 install ansible
Ansibleが正しくインストールされているかどうかとそのバージョンを確認します。
$ansible -v
Ansibleコントローラーホストの構成:
他のノードとの通信を開始する前に、まず「hosts」ファイルを設定する必要があります。このファイルには、管理対象ノードのすべてのIPまたはホスト名が含まれます。
注 :管理対象ノードに接続するためにhostsファイルを使用する必要は必ずしもありません。ただし、毎回、すべてのコマンドを実行するときに、管理対象ノードサーバーのIPまたはホスト名を使用する必要があります。
次のコマンドを実行して、root権限でファイルを作成します(まだ存在しない場合)。
$sudo touch /etc/ansible/hosts
ファイルに書き込む前に、サンプルのhostsファイルを見て理解しましょう:
[group_name]
alias ansible_ssh_host=your_node_server_ip
ホストファイルは上記の構文に従う必要があります。各パラメータを見てみましょう。
[group_name] :このパラメーターはグループを作成します。 group_nameパラメーターの下にあるすべての管理対象ノードのIPアドレスまたはホスト名は、同じグループに分類されます。たとえば、インフラストラクチャに複数のウェブサーバーがある場合、ここに管理対象ノードのすべてのIPアドレスまたはホスト名を追加できます。
エイリアス :このパラメーターは、管理対象ノードサーバーに管理対象ノードサーバーを識別するためのエイリアスを与えるために使用されます。たとえば、インフラストラクチャに複数のWebサーバーがある場合、エイリアスとしてhost1、host2、host3を指定できます。エイリアスを指定する主な利点は、Ansibleコマンドを実行して単一サーバーの構成を変更する場合、エイリアスを使用してサーバー上で必要なタスクを識別して実行できることです。
ansible_ssh_host =your_node_server_ip :このパラメータは、エイリアスが管理対象ノードのIPアドレスまたはホスト名を指すようにします。
CentOS8をAnsibleの制御ノードとして使用します。上記のように、Ansibleはリモートホストの22ポートを使用して接続します。
CentOS管理対象ノードサーバーのIPアドレスは192.168.0.2、192.168.0.3、192.168.0.4であると想定します。
Ansibleコントローラーノードが管理対象ノードと通信できるようにするには、SSHポートであるポート22で管理対象ノードにアクセスできることを確認する必要があります。以下のコマンドを実行して、コントローラーからの3つの管理対象ノードすべての接続を1つずつ確認します。
$ssh [email protected]192.168.0.2
$ssh [email protected]192.168.0.3
$ssh [email protected]192.168.0.4
すべてのノードのrootユーザーのパスワードの入力を求められます。 Ansibleコントローラーと管理対象ノードの間にパスワードなしの認証が構成されている場合、Ansibleは非常にスムーズに機能します。 Ansibleコマンドのさまざまなパラメータを使用すると、パスワード認証も機能します。
Ansibleコントローラーと管理対象ノード間のssh接続を構成したので、すべての管理対象ノードに接続するようにhostsファイルを構成しましょう。前述のように、1つのグループに複数のノードサーバーエイリアスを追加できます。この場合、3つのノードすべてを追加し、エイリアスをそれぞれhost1、host2、およびhost3として割り当てます。すべての管理対象ノードの詳細を追加すると、hostsファイルは次のようになります。以下のコマンドを実行して、前に作成したhostsファイルを編集します。
次のコマンドを実行して、root権限でファイルを開きます。
$sudo vi /etc/ansible/hosts
下記の設定をhostsファイルに追加しましょう。
[node_servers]
host1 ansible_ssh_host=192.168.0.2
host2 ansible_ssh_host=192.168.0.3
host3 ansible_ssh_host=192.168.0.4
ここでは、 node_serversというグループにすべての管理対象ノードのIPとエイリアスを追加しました。 。
今すぐAnsibleコントローラーから管理対象ノードに接続してみましょう。
$ansible -m ping node_servers
上記のコマンドは、モジュールpingを使用して、上記のhostsファイルで定義した「node_servers」グループに接続しています。
さまざまな理由でエラーが発生する可能性があります。
- Ansibleは、デフォルトで、現在のユーザー名を指定していない場合は、現在のユーザー名を使用して管理対象ノードに接続しようとします。そのユーザーがノードサーバーに存在しない場合は、以下のエラーが発生します。
- 管理対象ノードでsshポート22が接続用に開いていない場合。 (前述のように、Ansibleはsshポートに接続します)
- hostsファイルのIPが正しくない場合。
上記の条件のいずれかが失敗した場合、以下のエラーが発生します。
host1 | UNREACHABLE! => {>
"changed": false,
"msg": "Failed to connect to the host via ssh.",
"unreachable": true
}
host2 | UNREACHABLE! => {>
"changed": false,
"msg": "Failed to connect to the host via ssh.",
"unreachable": true
}
host3 | UNREACHABLE! => {>
"changed": false,
"msg": "Failed to connect to the host via ssh.",
"unreachable": true
}
「node_servers」グループの管理対象ノードにjamesユーザーで接続する必要があることをAnsibleに具体的に伝えましょう。以下のようにgroup_varsディレクトリを作成します。
$sudo mkdir /etc/ansible/group_vars
このディレクトリ内のファイルは、Ansibleプレイブックで使用できる変数を構成するために特に使用されます。
以下のコマンドを実行して、セットアップ用の変数ファイルを作成しましょう。
$sudo vim /etc/ansible/group_vars/node_servers.yml
ファイルに以下のコードを追加します:
---
ansible_ssh_user: james
YMLファイルは常に最初の行の「---」で始まります。終了したら、このファイルを保存して閉じましょう。これで、Ansibleは常にジェームスを使用します コマンドの実行に使用している現在のユーザーに関係なく、node_serversグループのユーザー。
管理対象ノードの接続を確認します:
ホストがセットアップされ、管理対象ノードに正常に接続できるように十分な構成の詳細が設定されたので、前に実行したのと同じコマンドを試すことができます。
$ansible -m ping servers
Ansibleは次のような出力を返します:
host1 | SUCCESS => {
"changed": false,
"ping": "pong"
}
host2 | SUCCESS => {
"changed": false,
"ping": "pong"
}
host3 | SUCCESS => {
"changed":false、
"ping": "pong"
}
これは、Ansibleが管理対象ノードに接続していることを確認するための基本的なテストです。
結論:
管理対象ノードにCentOSオペレーティングシステムを使用する必要はありません。上記でCentOS、RedHat、Ubuntu、およびその他のLinuxディストリビューションに使用したものと同じテスト構成を使用できます。