構成管理システムは、管理者と運用チームが多数のサーバーを簡単に制御できるように設計されています。それらを使用すると、中央の場所から自動化された方法で多くの異なるシステムを制御できます。
ChefやPuppetなど、Linuxシステムで利用できる一般的な構成管理システムは多数ありますが、これらのシステムは通常、多くの人が望んでいる、または必要としているよりも複雑です。 [Ansible](https://www.ansible.com/)は、開始に必要なオーバーヘッドが少ないため、これらのオプションの優れた代替手段です。
このチュートリアルでは、Ubuntu 18.04サーバーにAnsibleをインストールする方法について説明し、ソフトウェアの使用方法に関する基本的な知識を紹介します。
Ansibleは、Ansibleコンポーネントがインストールおよび構成されたクライアントコンピューターを構成することによって機能します。
通常のSSHチャネルを介して通信し、リモートコンピューターから情報を取得し、コマンドを発行し、ファイルをコピーします。したがって、Ansibleシステムでは、クライアントコンピューターに他のソフトウェアをインストールする必要はありません。
これは、Ansibleがサーバー管理を簡素化する方法です。 SSHポートを公開するサーバーは、ライフサイクルのどの段階にあるかに関係なく、Ansibleの構成の傘下に置くことができます。つまり、SSHを介して管理できるすべてのコンピューターは、Ansibleを介して管理することもできます。
Ansibleはモジュラーアプローチを採用しており、メインシステムの機能を使用して特定のシナリオを処理するように簡単に拡張できます。モジュールは任意の言語で記述でき、標準のJSONで通信できます。
構成ファイルは、その表現力と一般的なマークアップ言語との類似性のために、主にYAMLデータシリアル化形式で記述されています。 Ansibleは、コマンドラインツールまたはその構成スクリプト(プレイブックと呼ばれる)を介してホストと対話できます。
このチュートリアルに従うには、次のものが必要です。
sudo
権限で構成された基本的なファイアウォールが必要です。このチュートリアルの例では3つのAnsibleホストを指定していますが、示されているコマンドと構成は任意の数のクライアントに合わせて調整できることに注意してください。〜/ .ssh / id_rsa
)に保存できます。サーバーをお持ちでない学生は[こちら](https://cloud.tencent.com/product/cvm?from=10680)から購入できますが、個人的には無料のTencent Cloud [Developer Lab](https://cloud.tencent.com/developer/labs?from=10680)を使用して実験し、[サーバーを購入]( https://cloud.tencent.com/product/cvm?from=10680)。
さまざまなサーバーを管理する方法としてAnsibleの使用を開始するには、少なくとも1台のコンピューターにAnsibleソフトウェアをインストールする必要があります。
最新バージョンのAnsiblefor Ubuntuを入手するには、プロジェクトのPPA(Personal Package Archive)をシステムに追加します。ただし、この操作を実行する前に、まずパッケージインデックスを更新し、 software-properties-common
パッケージをインストールする必要があります。このソフトウェアは、これと他の独立したソフトウェアリポジトリをより簡単に管理できます。
sudo apt update
sudo apt install software-properties-common
次に、次のコマンドを入力してAnsiblePPAを追加します。
sudo apt-add-repository ppa:ansible/ansible
ENTER
を押してPPAの追加を受け入れます。
次に、システムのパッケージインデックスを再度更新して、PPAで使用可能なパッケージを認識できるようにします。
sudo apt update
この更新後、Ansibleソフトウェアをインストールできます。
sudo apt install ansible
これで、Ansibleサーバーには、ホストの管理に必要なすべてのソフトウェアが含まれています。
前述のように、Ansibleは主にSSHを介してクライアントコンピューターと通信します。もちろん、パスワードベースのSSH認証を処理できますが、SSHキーを使用すると作業が簡単になります。
Ansibleサーバーで、 cat
コマンドを使用して、root以外のユーザーのSSH公開鍵ファイルの内容を端末の出力に出力します。
cat ~/.ssh/id_rsa.pub
生成された出力をクリップボードにコピーしてから、新しいターミナルを開き、SSHを使用してAnsibleホストの1つに接続します。
ssh sammy@ansible_host_ip
クライアントコンピューターの** root **ユーザーに切り替えます。
su -
** root **ユーザーとして、 〜/ .ssh
ディレクトリで authorized_keys
を開きます。
nano ~/.ssh/authorized_keys
ファイルに、AnsibleサーバーユーザーのSSHキーを貼り付け、ファイルを保存してエディターを閉じます( CTRL + X
、 Y
を押してから、 ENTER
を押します)。次に、 exit
コマンドを実行して、ホストの非ルートユーザーに戻ります。
exit
最後に、Ansibleは / usr / bin / python
にあるpythonインタープリターを使用してモジュールを実行するため、Ansibleが通信できるようにホストにPython2をインストールする必要があります。次のコマンドを実行して、ホストのパッケージインデックスを更新し、 python
パッケージをインストールします。
sudo apt update
sudo apt install python
この後、 exit
コマンドを再度実行して、クライアントとの接続を閉じることができます。
exit
Ansibleサーバーコントロールを使用するサーバーごとに、このプロセスを繰り返します。次に、Ansibleの hosts
ファイルを使用してこれらのホストに接続するようにAnsibleサーバーを構成します。
Ansibleは、 hosts
ファイルを介して認識しているすべてのサーバーを追跡します。他のコンピューターとの通信を開始する前に、まずこのファイルを設定する必要があります。
以下に示すように、 sudo
権限でファイルを開きます。
sudo nano /etc/ansible/hosts
ファイル内には、コメントアウトされた(前に #
が付いた)構成例が多数表示されます。各ホストにリストされているホストはすでに構成されているため、これらの例は実際には機能しません。ただし、将来、より複雑なシナリオを実装する場合は、これらの例をファイルに保存して、構成に役立てます。
` ホストのファイルは非常に柔軟性があり、いくつかの異なる方法で構成できます。使用する構文は次のとおりです。
[ group_name]
alias ansible_ssh_host=your_server_ip
この例では、 group_name
は、単語を使用してその下にリストされているサーバーを参照できるようにする組織タグですが、 alias
は単に特定のサーバーの名前を参照します。
したがって、このシナリオでは、Ansibleを使用して3つのサーバーを制御することを想定しています。この時点で、Ansibleサーバーから次のように入力してこれらのサーバーにアクセスできます。
ssh root@ansible_host_ip
パスワードを正しく設定している場合は、パスワードの入力を求められることはありません。デモンストレーションの目的で、ホストのIPアドレスは 203.0.113.1
、 203.0.113.2
、および 203.0.113.3
であると想定します。これらを個別に host1
、 host2
、 host3
として、または servers
という名前のグループとして参照できるように設定します。
これは、この目的のために hosts
ファイルに追加する必要があるブロックです。
[ servers]
host1 ansible_ssh_host=203.0.113.1
host2 ansible_ssh_host=203.0.113.2
host3 ansible_ssh_host=203.0.113.3
ホストは複数のグループに属することができ、グループはそのすべてのメンバーのパラメーターを構成できます。今すぐ試してみましょう。
現在の設定では、Ansibleを使用してこれらのホストのいずれかに接続しようとすると、コマンドは失敗します(rootとして実行していない場合)。これは、SSHキーがリモートシステムの** root **ユーザーに埋め込まれており、Ansibleがデフォルトで現在のユーザーとして接続しようとするためです。接続を試みると、次のエラーが発生します。
host1 | UNREACHABLE!=>{"changed":false,"msg":"Failed to connect to the host via ssh.","unreachable":true}
Ansibleサーバーでは、** sammy **という名前のユーザーを使用しています。 Ansibleは、 ssh sammy @ server
を使用して各ホストに接続しようとします。 ** sammy **ユーザーもリモートシステムにいない場合、これは機能しません。
「server」グループ内のすべてのサーバーにrootユーザーとして接続するように指示するファイルを作成できます。
このために、Ansible構成構造に group_vars
という名前のディレクトリを作成します。このフォルダーには、構成するグループごとにYAML形式のファイルを作成できます。
sudo mkdir /etc/ansible/group_vars
sudo nano /etc/ansible/group_vars/servers
ここに設定を入れることができます。 YAMLファイルは「---」で始まるので、この部分を忘れないようにしてください。
---
ansible_ssh_user: root
完了したら、このファイルを保存して閉じます。
グループの関連付けに関係なく、各サーバーの構成の詳細を指定する場合は、これらの詳細をファイル / etc / ansible / group_vars / all
に入れることができます。 / etc / ansible / host_vars
ディレクトリにエイリアスで名前が付けられたファイルを作成することにより、各ホストを構成できます。
ホストをセットアップし、ホストに正常に接続するための十分な構成の詳細が得られたので、最初のコマンドを試すことができます。
次のコマンドを入力して、構成したすべてのサーバーにpingを実行します。
ansible -m ping all
host1 | SUCCESS =>{"changed":false,"ping":"pong"}
host3 | SUCCESS =>{"changed":false,"ping":"pong"}
host2 | SUCCESS =>{"changed":false,"ping":"pong"}
これは、Ansibleがすべてのホストに接続されていることを確認するための基本的なテストです。
all
はすべてのホストを意味します。グループは簡単に指定できます。
ansible -m ping servers
単一のホストを指定することもできます。
ansible -m ping host1
複数のホストをコロンで区切ることで指定できます。
ansible -m ping host1:host2
- m ping
コマンドの一部は、Ansibleが「ping」モジュールを使用するための命令です。これらは基本的に、リモートホストで実行できるコマンドです。 pingモジュールは、Linuxの通常のpingユーティリティのようにさまざまな方法で動作しますが、Ansible接続をチェックします。
pingモジュールは実際にはパラメータを受け入れませんが、別のコマンドを試して、どのように機能するかを確認できます。 -a
と入力して、スクリプトにパラメーターを渡します。
「シェル」モジュールを使用すると、端末コマンドをリモートホストに送信して、結果を取得できます。たとえば、host1マシンのメモリ使用量を調べるには、次を使用できます。
ansible -m shell -a 'free -m' host1
host1 | SUCCESS | rc=0>>
total used free shared buffers cached
Mem:3954227372601493-/+ buffers/cache:1193834
Swap:000
このようにして、Ansibleサーバーが構成され、ホストとの通信と制御を正常に行うことができます。
このチュートリアルでは、Ansibleを構成し、各ホストと通信できることを確認しました。また、 ansible
コマンドを使用して、簡単なタスクをリモートで実行します。
Ansibleのインストールと構成に関連するチュートリアルの詳細については、[Tencent Cloud + Community](https://cloud.tencent.com/developer?from=10680)にアクセスして詳細を確認してください。
参照:「Ubuntu18.04にAnsibleをインストールして構成する方法」
Recommended Posts