Ansible は、単一または複数のマシンを同時に構成するのに役立つ Python 言語で書かれた構成管理ツールで、広く使用されています。 Ansible は以下のタスクに使用できます。
- 単一または複数のノードのゼロからの構成
- デプロイメント
- 構成の変更
- パッチ
- サービス管理
- その他多数
Ansible が広く使用されている理由はそのシンプルさによるものです。 AnsibleのコードはYAML言語で書かれており、リモートマシンにエージェントをインストールする必要がありません。 Ansible はポート 22 (SSH) を使用してリモート マシンに接続し、必要な変更を行います。
22 番ポートでリモート マシンに接続できる任意のマシンは、制御ノードになることができます。 制御ノードはAnsibleをインストールできる場所であり、管理ノードは制御ノードによって管理されるようになります。
Controller ノードへの Ansible のインストールを見てみましょう。
CentOS 7 に Ansible をインストールします。
$sudo yum install python3 -y
Centos 7にAnsibleをインストールするには、まず、CentOS 7のEPELリポジトリがインストールされていることを確認します。 以下のコマンドを実行し、epelリポジトリをインストールします。
$sudo yum install epel-release
以下のupdateコマンドを実行して、システムのパッケージインデックスを更新します。
$sudo yum update -y
リポジトリがインストールされたら、yumパッケージマネージャを使用してAnsibleをインストールします。 以下のコマンドを実行し、Ansibleをインストールします。
$sudo yum install ansible -y
Ansible が正しくインストールされているか、またそのバージョンを確認します。
$ansible -v
CentOS8にAnsibleをインストールする:
CentOS 8のインストール手順を見てみましょう。 CentOS 8にpythonをインストールします。
$sudo dnf install python3
pythonがインストールされたら、以下のコマンドを実行してEPELレポをインストールします。
$sudo dnf install epel-release -y
以下のupdateコマンドを実行してシステムパッケージのインデックスを更新します。
$sudo dnf install ansible -y
Ansible が正しくインストールされているか、またそのバージョンを確認します。
$ansible -v
UbuntuにAnsibleをインストールする:
Python は現在、ほとんどのLinuxディストリビューションでデフォルトパッケージとして提供されています。 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 がインストールされているので、任意のOSで以下のコマンドを実行してAnsible をインストールしましょう。
$sudo pip3 install ansible
Ansible が正しくインストールされているか、またそのバージョンを確認します。
$ansible -v
Ansible Controller Hosts の設定:
他のノードとの通信を開始する前に、まず “hosts” ファイルをセットアップする必要があります。 このファイルには、管理対象ノードのすべての IP またはホスト名が含まれます。
Note: 管理対象ノードに接続するために hosts ファイルを使用する必要は必ずしもありません。
root 権限で以下のコマンドを実行してファイルを作成します (ファイルがない場合):
$sudo touch /etc/ansible/hosts
ファイルに書き込む前に、サンプル hosts ファイルを見て理解しましょう:
alias ansible_ssh_host=your_node_server_ip
hosts ファイルは上記の文法に従わなければなりません。 各パラメータを見てみましょう。
: このパラメータはグループを作成します。 group_nameパラメーターの下にあるすべての管理ノードIPアドレスまたはホスト名は、同じグループに分類されます。 たとえば、インフラストラクチャに複数のWebサーバーがある場合、すべてのIPアドレスまたは管理ノードのホスト名をここに追加できます。
alias: このパラメーターは、管理ノードサーバーを識別するためのエイリアスを与えるために使用されます。 たとえば、インフラストラクチャに複数の Web サーバーがある場合、エイリアスとして host1、host2、host3 を指定することができます。 エイリアスを与える主な利点は、1 つのサーバーの構成を変更するために Ansible コマンドを実行するとき、エイリアスを使用してサーバー上で必要なタスクを識別して実行できることです。 このパラメーターは、エイリアスを管理ノード IP アドレスまたはホスト名に向けます。
Ansible で管理されるノードとして CentOS 8 を使用することにします。 前述のとおり、Ansible はリモートホストの 22 ポートを使用して接続します。
ここでは、CentOS の管理ノード サーバーの IP アドレスを 192.168.0.2、192.168.0.3、および 192.168.0.4 とします。
Ansible コントローラ ノードと管理ノードが通信するには、SSH ポートであるポート 22 で管理ノードにアクセスできるかどうかを確認する必要があります。 以下のコマンドを実行し、コントローラから3つの管理対象ノードに1つずつ接続を確認します。
$ssh [email protected]
$ssh [email protected]
$ssh [email protected]
すべてのノードのルートユーザのパスワードの入力を求められますので、パスワードを入力してください。 Ansibleコントローラと管理ノード間でパスワードレス認証が設定されている場合、Ansibleは非常にスムーズに動作します。 Ansibleコマンドのパラメータを変更することで、パスワード認証も動作するようになります。
Ansible コントローラと管理ノード間で ssh 接続を設定したので、すべての管理ノードに接続するために hosts ファイルを設定しましょう。 前述したように、1つのグループに複数のノードサーバーのエイリアスを追加することができます。 今回は、3つのノードを追加し、それぞれhost1, host2, host3としてエイリアスを割り当てます。 管理ノードの詳細をすべて追加した後、hostsファイルは以下のようになります。 以下のコマンドを実行して、先ほど作成したhostsファイルを編集してください。
root権限で以下のコマンドを実行してファイルを開きます。
$sudo vi /etc/ansible/hosts
hosts ファイルに以下の設定を追加してみましょう。
Ansible コントローラから管理ノードに接続してみましょう。
$ansible -m ping node_servers
上記のコマンドは、ping モジュールを使用して、上記の hosts ファイルで定義した “node_servers” グループに接続するものです。
さまざまな理由でエラーが発生する可能性があります。
- Ansible は、デフォルトで、あなたがユーザー名を提供しなかった場合、現在のユーザー名を使用して管理ノードに接続しようとします。
- ssh port 22 is not open for connection on managed nodes.そのユーザがノードサーバに存在しない場合、以下のエラーが表示されます。 (前述の通り、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
}
Ansible に、特に “node_servers” グループ内の管理ノードに james ユーザで接続するように指示します。 以下に示すように 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グループには常にjamesユーザーを使用するようになります。
管理対象ノードの接続を確認する:
ホストの設定と、管理対象ノードに正常に接続できる十分な設定詳細が得られたので、前に実行したのと同じコマンドを試してみましょう。
$ansible -m ping servers
Ansible はこのような出力を返します。
host1 | SUCCESS => {
"changed": false,
"ping": "pong"
}
host2 | SUCCESS => {
"changed": false,
"ping": "pong"
}
host3 | SUCCESS => { “changed”: false, “ping”: “pong”}
これは、Ansible がその管理ノードに接続されていることを確認するための基本的なテストです。
結論です。
Managed ノードに CentOS オペレーティング システムを使用する必要はありません。 CentOS、RedHat、Ubuntu、およびその他の Linux ディストリビューションで、上記で使用したのと同じテスト構成を使用できます。