こんにちは。ChefやPuppetに似たAnsibleAutomationToolに関する記事へようこそ。まず第一に、Ansibleはインストールが簡単で、構成が簡単で、理解しやすいです。 ITでは、システムとプロセスを非常にシンプルに保つことが非常に重要です。 Ansibleは、Webサーバーとアプリケーションサーバーの構成に役立ち、ファイルのバージョン管理を容易にする構成管理に使用されます。また、Ansibleを使用して、開発、ステージング、および本番環境のさまざまな構成を管理することもできます。また、アプリケーションの展開にも使用されます。複数のグループサーバーとデータベースを処理できる多層アプリケーションの展開を完全に自動化できます。
AnsibleはSSHを使用してサーバーに接続し、SSH経由でクライアントに接続することで構成済みのタスクを実行します。特別なエージェントをセットアップする必要はありません。必要なのはPythonと、ログインしてスクリプトを実行できるユーザーだけです。Ansibleは、インストールされているオペレーティングシステムとパッケージ、実行中の他のサービスなど、マシンに関する事実の収集を開始します。その後、AnsibleはプレイブックをYAMLファイル形式で実行します。 、プレイブックは、複数のタスクを実行できる一連のコマンドです。
前提条件
このチュートリアルでは、CentOS 7にAnsibleをインストールして構成し、その機能を理解するために2つのノードを管理します。
テスト環境では、3つのLinux CentOS 7 VMを使用します。1つはAnsibleサーバーのインストール場所を制御するためのもので、2つはSSH経由でこの制御マシンによって管理されるノードです。 Ansibleを正常にインストールするには、コントロールノードとクライアントノードの両方にPython2.6または2.7がインストールされていることを確認してください。
Ansibleの使用を開始するために、sudo権限を持つrootユーザーまたは非rootユーザーを使用してコントロールサーバーに接続しましょう。
EPELリポジトリのセットアップ
Ansibleパッケージはデフォルトのyumリポジトリでは利用できないため、最初にコントロールサーバーでCentOS7の「epel」リポジトリを有効にする必要があります。
CentOS 7 / RHEL 7でEPELリポジトリを有効にするには、次のように入力します。
# yum install epel-release
Ansibleのインストール
これで、「yum」コマンドを使用してAnsibleをCentOS 7にインストールできます。このコマンドは、「y」キーを選択して必要な依存関係を含めてインストールします。
# yum install ansible
Ansibleを正常にインストールしたら、以下のコマンドを使用して、インストールされているバージョンを確認および確認できます。
# ansible --version
ノードを使用したキーベースのSSH認証
'localhost'からリモートホストへの展開/管理を実行するには、最初にAnsibleサーバーでキーを生成し、公開キーをクライアントノードにコピーする必要があります。 Ansibleサーバーで以下のコマンドを実行して、公開鍵と秘密鍵を生成します。
# ssh-keygen -t rsa -b 4096
SSHキーを生成したら、次のコマンドを使用してリモートサーバーにSSHキーを配置し、リモートサーバーにコピーします。
# ssh-copy-id root@node1_ip
カスタムsshポートを使用している場合は、コマンドの「-p」パラメーターを使用してそのポートに言及します。クライアントノードのパスワードの入力を求められます。クライアントノードの正しいパスワードを入力すると、正常に承認されます。
# ssh-copy-id -p2178 root@node1_ip
The authenticity of host '[72.25.70.83]:2178 ([72.25.70.83]:2178)' can't be established.
ECDSA key fingerprint is 49:8a:9c:D9:35:le:09:3d:5f:31:43:a1:41:94:70:53.
Are you sure you want to continue connecting (yes/no)? yes
/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys
Authorized uses only. All activity may be \ monitored and reported.
[email protected]'s password:
Number of key(s) added: 1
Now try logging into the machine, with: "ssh -p '2178' '[email protected]'"
and check to make sure that only the key(s) you wanted were added.
制御サーバーの公開rsaキーをclinetノードに手動で追加することもできます。これを行うには、クライアントノードにログインし、以下の手順に従います。
まず、「/ root / .ssh / id_rsa.pub」ファイルからキーをコピーし、サーバーまたは認証する他のユーザーのホームディレクトリ内のクライアントノードに保存します。
CentOSの-7 @[root@centos-7 .ssh]# cat id_rsa.pub
ssh-rsa AAAAB3NzaC1yc2EAPNRNS/BVcT7XqHDuSvd8oncAjbNl2ZiYiU22MCNFKN8p/cgcblOZoZS0gjlQHpQLR1wm5hVu7PcxY/JAFX2phKyeZ+dbfQlAQ7HLRaaXWfuonelWgTCcs530bSg6XP3MTDRWjW0ZEFTLaOqVz+Yq2nUP3xRYmRKYNq2PhPRrkoBxnDGlmAsgGDm4gWz2TGE59uYHuXvY2Ys4OPeMFHAp0blR5nJIfVF40RB4uH0U79pp19qZ0vbghEvYUiyD4NMjqG13Ba4YYBQQIphe4GA3OTjBvjVmnmBCWZyDOcO+bWWyyKpabEEZOga3KnsoTw4iQ+d+iUyhPTZOvXaoOFUmrFQo5wWG229/GMJnYe1Qv0D3K3CcAQ== root@centos-7
[root@node2 ~]# vi .ssh/authorized_keys
CentOSの-7 コード> @ ssh-rsa AAAAB3NzaC1yc2EAPNRNS/BVcT7XqHDuSvd8oncAjbNl2ZiYiU22MCNFKN8p/cgcblOZoZS0gjlQHpQLR1wm5hVu7PcxY/JAFX2phKyeZ+dbfQlAQ7HLRaaXWfuonelWgTCcs530bSg6XP3MTDRWjW0ZEFTLaOqVz+Yq2nUP3xRYmRKYNq2PhPRrkoBxnDGlmAsgGDm4gWz2TGE59uYHuXvY2Ys4OPeMFHAp0blR5nJIfVF40RB4uH0U79pp19qZ0vbghEvYUiyD4NMjqG13Ba4YYBQQIphe4GA3OTjBvjVmnmBCWZyDOcO+bWWyyKpabEEZOga3KnsoTw4iQ+d+iUyhPTZOvXaoOFUmrFQo5wWG229/GMJnYe1Qv0D3K3CcAQ== root@centos-7
ファイルを保存して終了すると、rootパスワードを要求せずにcontrollサーバーから両方のクライアントノードにアクセスできます。
[root@centos-7 ~]# ssh -p 2178 root@node1_ip
[root@centos-7 ~]# ssh -p 2178 root@node2_ip
[root@centos-7 .ssh]# ssh -p 2178 [email protected]
Authorized uses only. All activity may be \ monitored and reported.
Last login: Sun Mar 27 21:42:09 2016 from 12.1.0.90
[root@node1 ~]# exit
logout
Connection to 72.25.10.83 closed.
[root@centos-7 .ssh]# ssh -p 2178 [email protected]
The authenticity of host '[72.25.10.84]:2178 ([72.25.10.84]:2178)' can't be established.
ECDSA key fingerprint is 49:8a:3c:85:55:61:79:1d:1f:21:33:s1:s1:fd:g0:53.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '[72.25.10.84]:2178' (ECDSA) to the list of known hosts.
Authorized uses only. All activity may be \ monitored and reported.
Last login: Sun Mar 27 22:03:56 2016 from 12.1.0.90
[root@node2 ~]#
[root@node2 ~]# exit
logout
Connection to 72.25.10.84 closed.
リモートホストのインベントリの作成
Ansibleサーバーとそのクライアントノード間のSSHキー認証を設定した後、「/ etc / ansible / hosts」ファイルを編集して、Ansibleコントロールサーバーでこれらのリモートホストを構成します。このファイルは、システムを管理するためにAnsibleがSSH経由で接続する必要があるリモートホストのインベントリを保持します。
いずれかのエディタを使用してファイルを開き、構成します。
[root@centos-7 ~]# vim /etc/ansible/hosts
ここで、構成ファイルに、ポート「2178」を使用するように両方のクライアントノードを構成しました。デフォルトのsshポートを使用する場合は、ホストIPアドレスを入力するだけです。
ファイルを保存したら、モジュールに対してオプション「-m」を指定して次のansibleコマンドを実行し、Ansibleサーバーからリモートサーバーへの接続を確認します。
# ansible -m ping 72.25.10.83
# ansible -m ping 72.25.10.73
beloコマンドを使用して、構成済みのすべてのホストにpingを実行することもできます。
[root@centos-7 ~]# ansible all -m ping
72.25.10.83 | success >> {
"changed": false,
"ping": "pong"
}
72.25.10.73 | success >> {
"changed": false,
"ping": "pong"
}
リモートコマンドの実行
上記の例では、pingモジュールを使用してリモートホストにpingを実行しました。リモートホストでコマンドを実行するために使用できるさまざまなモジュールがあります。次に、「command」モジュールと「ansible」コマンドを使用して、システムのホスト名情報、空きディスク容量、稼働時間などのリモートマシン情報を次のように取得します。
# ansible -m command -a 'hostnamectl' 72.25.10.83
# ansible -m command -a 'df -h' 72.25.10.83
# ansible -m command -a 'uptime' 72.25.10.83
同様に、ansibleを使用して多くのシェルコマンドを単一のクライアントホストと同様のホストのグループで実行できます。たとえば、ansibleホストインベントリファイルに「web-servers」グループを構成している場合は、コマンドを実行します。このように。
# ansible -m command -a "uptime" web-servers
Ansibleでのプレイブックの作成
プレイブックは、リモートマシンへの構成と展開を管理するために使用されるAnsibleの構成管理スクリプトです。プレイブックには、リモートシステムに実装する一連のポリシーが含まれています。
ファイル名を「httpd.yml」として最初のプレイブックを作成してから、ApacheWebサーバーを実行するようにホストを構成します。ここでは、構成ファイルに示されているように、インフラストラクチャ内のどのマシンを対象とし、どのリモートユーザーがタスクを完了するかを選択します。
[root@centos-7 ~]# vi httpd.yml
---
- hosts: 72.25.10.83
remote_user: root
tasks:
- name: Installing Latest version of Apache
yum: pkg=httpd state=latest
- name: Copying the demo file
template: src=/etc/ansible/index.html dest=/var/www/html
owner=apache group=apache mode=0644
- name: (Enable it on System Boot)
service: name=httpd enabled=yes
notify:
- start apache
handlers:
- name: start apache
service: name=httpd state=started
ファイルを保存して閉じてから、リモートホストのデフォルトのドキュメントルートに配置されるデモHTMLファイルを作成します。
[root@centos-7 ~]# vi /etc/ansible/index.html
Installing Apache by Ansible
Apache Web Server is installed by Ansible
Congratulations, Apache is managed through Ansible
プレイブックの構成について
最初のプレイブックを作成したので、それがどのように機能するかを理解することが重要です。すべてのYAMLファイルは(3つのダッシュ)'---'で始まる必要があります。これは、ドキュメントの開始を示します。その場合、hosts行は、コロンで区切られた1つ以上のグループまたはホストパターンのリストです。ホストと一緒にリモートユーザーアカウントについて言及できます。
---
- hosts: 72.25.10.83
remote_user: root
次に、一連のタスクがあります。各プレイにはタスクのリストが含まれており、次のタスクに進む前に、ホストパターンに一致するすべてのマシンに対して一度に1つずつ順番に実行されます。
tasks:
- name: Installing Latest version of Apache
yum: pkg=httpd state=latest
- name: Copying the demo file
template: src=/etc/ansible/index.html dest=/var/www/html
owner=apache group=apache mode=0644
- name: (Enable it on System Boot)
service: name=httpd enabled=yes
すべてのタスクには、出力に含まれる名前を付ける必要があります。これは私たちのために出力されるので、各タスクステップのかなり良い説明があると便利です。したがって、最初のタスクでは最新バージョンのapacheをインストールし、2番目のタスクではデモhtml(/etc/ansible/index.html)をリモートホストの/ var / www / htmlディレクトリにコピーし、3番目のタスクではapacheサービスの自動開始を有効にします。システムの起動中。
その後、「通知」アクションは、プレイブックのタスクの各ブロックの最後にトリガーされ、複数の異なるタスクによって通知された場合でも1回だけトリガーされます。
notify:
- start apache
「notify」アイテムには「startapache」というアイテムが含まれています。これは、タスク内から呼び出されたときに特定の機能を実行できるハンドラーへの参照です。以下で「startapache」ハンドラーを定義します。
handlers:
- name: start apache
service: name=httpd state=started
ハンドラーは、クライアントシステムで変更が発生したことをタスクから通知された場合にのみ実行されるタスクのリストです。パッケージのインストール後にapacheサービスを開始するハンドラーがあるため。
AnsibleでPlaybookを実行する
プレイブックの構成を設定したら、以下のコマンドを使用してプレイブックを実行できます。
# ansible-playbook -l 72.25.10.83 httpd.yml
この後、ブラウザを開き、ansibleインベントリに記載されているリモートホストのIPアドレスに移動します。
http://your_client_node_ip/
したがって、上記のページが表示された場合は、Ansibleプレイブックを使用してapacheを正常にインストールしたことを意味します。同様に、多くのプレイブックを作成して、複雑なアプリケーションを複数のホストにインストールできます。
結論
Ansibleは非常に興味深く、非常に簡単で軽量です。簡単に5分で起動して実行できます。これで、CentOS 7にAnsibleを正常にインストールし、apacheインストールを自動化するための簡単なプレイブックを作成するための基本的な使用法を学びました。これがタスクの自動化に役立つことを願っています。