Ansible 一括処理実践¶
ソフトウェア概要¶
Ansible は Python ベースの自動化運用ツールで、多くの運用ツール(puppet、chef、func、fabric)の利点を統合し、システムの一括設定、プログラムの一括デプロイ、コマンドの一括実行などの機能を実現します。
機能¶
- 導入が簡単で、管理ノードに Ansible 環境を構築するだけで、被管理ノードでの操作は不要です
- デフォルトで SSH プロトコルを使用してデバイスを管理します
- 一般的な運用操作のモジュールが豊富に用意されており、日常的なほとんどの操作を実行できます
- 設定が簡単で、機能が強力、拡張性に優れています
- API およびカスタムモジュールをサポートし、Python で簡単に拡張できます
- Playbooks を使用して強力な設定、状態管理をカスタマイズできます
基本アーキテクチャ¶
- Ansible:Ansible コアプログラム。
- HostInventory:Ansible が管理するホスト情報(ポート、パスワード、IP など)を記録します。
- Playbooks:YAML 形式のファイルで、複数のタスクを1つのファイルに定義し、ホストがどのモジュールを呼び出して機能を実行するかを定義します。
- CoreModules:コアモジュール。主にコアモジュールを呼び出して管理タスクを実行します。
- CustomModules:カスタムモジュール。コアモジュールでは実現できない機能を実行します。複数の言語に対応しています。
- ConnectionPlugins:接続プラグイン。Ansible と Host の通信に使用されます。
タスク実行¶
Ansible システムによる管理ノードから被管理ノードへの操作方法は、adhoc と playbook の2種類に分類されます。
-
ad-hoc モード(ピアツーピアモード) 単一のモジュールを使用し、単一コマンドの一括実行をサポートします。ad-hoc コマンドは、保存不要で素早く入力できるコマンドであり、bash におけるシェルコマンドに相当します。
-
playbook モード(プレイブックモード) Ansible の主要な管理方式であり、Ansible の強力な機能の中核です。playbook は複数のタスクの集合により、Web サービスのインストール・デプロイやデータベースサーバーの一括バックアップなど、一連の機能を実行します。playbook は、複数の ad-hoc 操作を組み合わせた設定ファイルと考えると理解しやすいでしょう。
一括処理実践¶
環境準備¶
| IP | システム | ホスト名 | 説明 |
|---|---|---|---|
| 10.0.0.65 | CentOS 7.8 | ansible01 | ansible 管理ノード (dk インストール済み) |
| 10.0.0.66 | CentOS 7.8 | ansible02 | 被管理ノード 1 |
| 10.0.0.67 | CentOS 7.8 | ansible03 | 被管理ノード 2 |
ソフトウェアインストール¶
ansible01 にログインし、インストールコマンドを実行します。
主要プログラム
/usr/bin/ansibleメインプログラム/usr/bin/ansible-doc設定ドキュメント/usr/bin/ansible-playbook自動化タスクのカスタマイズ、プレイブックツール/usr/bin/ansible-pullリモートコマンド実行ツール/usr/bin/ansible-vaultファイル暗号化ツール
主要設定ファイル
/etc/ansible/ansible.cfgメイン設定ファイル/etc/ansible/hostsホストインベントリ(管理対象ホストをこのファイルに記述)/etc/ansible/roles/ロールを格納するディレクトリ
パスワードなしログイン¶
ansible01 にログインし、秘密鍵を生成します。デフォルトのパスは /root/.ssh/id_rsa、/root/.ssh/id_rsa.pub です。
秘密鍵を管理対象ノードに配布します。
ホストインベントリファイル /etc/ansible/hosts を編集し、グループ名とホスト IP を追加します。
接続性を確認します。
よく使うモジュール¶
Shell モジュール¶
Shell モジュールは、リモートホスト上で shell インタプリタを呼び出してコマンドを実行できます。パイプなど、shell のさまざまな機能をサポートします。
- 現在のユーザー ID を確認
- 現在システムにログインしているユーザーを確認
Copy モジュール¶
このモジュールは、ファイルをリモートホストにコピーするために使用します。指定した内容でファイルを生成したり、権限を変更したりすることもできます。
ansible.cfgファイルをリモートホストにコピーし、権限を「読み書き」-rw-rw-rw-に指定
リモートホストの ansible.cfg ファイルを確認
- 内容を指定してファイルを生成
リモートホストのファイルを確認
File モジュール¶
このモジュールは、ファイルの属性を設定するために使用します。ファイルの作成、リンクファイルの作成、ファイルの削除などが可能です。
/tmp配下にappディレクトリを作成
/tmp ディレクトリを確認
- 先ほど ansible01 からコピーした
ansible.cfgファイルを削除
Fetch モジュール¶
このモジュールは、リモートホストからファイルを取得(コピー)してローカルに保存するために使用します。
- リモートホストの
/tmp/helloファイルを/rootディレクトリにプル
/root ディレクトリ配下に、2つの新しいディレクトリ(リモートホストの IP がディレクトリ名)が作成されていることを確認できます。
Guance での活用¶
一括インストール¶
Shell モジュールを使用して DataKit をインストールします(トークンは適宜変更してください)。
ansible guance -m shell -a 'DK_DATAWAY="https://openway.guance.com?token=token" bash -c "$(curl -L https://static.guance.com/datakit/install.sh)"'
プロセスが起動しているか確認します。
一括設定¶
- netstat プラグインを有効化
shell モジュールを使用して、netstat.conf.sample ファイルを netstat.conf としてコピーします。
ansible guance -m shell -a 'cp /usr/local/datakit/conf.d/host/netstat.conf.sample /usr/local/datakit/conf.d/host/netstat.conf'
DataKit を一括再起動します。
一括アップグレード¶
DataKit アップグレード用の YAML ファイル /etc/ansible/dk_upgrade.yaml を作成します。
- hosts: guance
remote_user: root
tasks:
- name: dk version check
shell: datakit --version|grep -i upgrade|wc -l
register: version
- name: dk upgrade
when: version.stdout > "0"
shell: DK_UPGRADE=1 bash -c "$(curl -L https://static.guance.com/datakit/install.sh)"
playbook を実行します。
DataKit のバージョンが最新になっていることを確認します。
cron ジョブを追加します(毎日 02:02 に一括アップグレードを実行)。crontab -e















