コンテンツにスキップ

Ansible 一括処理実践


ソフトウェア概要

Ansible は Python ベースの自動化運用ツールで、多くの運用ツール(puppet、chef、func、fabric)の利点を統合し、システムの一括設定、プログラムの一括デプロイ、コマンドの一括実行などの機能を実現します。

機能

  1. 導入が簡単で、管理ノードに Ansible 環境を構築するだけで、被管理ノードでの操作は不要です
  2. デフォルトで SSH プロトコルを使用してデバイスを管理します
  3. 一般的な運用操作のモジュールが豊富に用意されており、日常的なほとんどの操作を実行できます
  4. 設定が簡単で、機能が強力、拡張性に優れています
  5. API およびカスタムモジュールをサポートし、Python で簡単に拡張できます
  6. Playbooks を使用して強力な設定、状態管理をカスタマイズできます

基本アーキテクチャ

image.png

  • Ansible:Ansible コアプログラム。
  • HostInventory:Ansible が管理するホスト情報(ポート、パスワード、IP など)を記録します。
  • Playbooks:YAML 形式のファイルで、複数のタスクを1つのファイルに定義し、ホストがどのモジュールを呼び出して機能を実行するかを定義します。
  • CoreModules:コアモジュール。主にコアモジュールを呼び出して管理タスクを実行します。
  • CustomModules:カスタムモジュール。コアモジュールでは実現できない機能を実行します。複数の言語に対応しています。
  • ConnectionPlugins:接続プラグイン。Ansible と Host の通信に使用されます。

タスク実行

Ansible システムによる管理ノードから被管理ノードへの操作方法は、adhocplaybook の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 にログインし、インストールコマンドを実行します。

yum install -y ansible

主要プログラム

  • /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 です。

ssh-keygen

秘密鍵を管理対象ノードに配布します。

ssh-copy-id root@10.0.0.66
ssh-copy-id root@10.0.0.67

ホストインベントリファイル /etc/ansible/hosts を編集し、グループ名とホスト IP を追加します。

[guance]
10.0.0.67
10.0.0.66

接続性を確認します。

ansible guance -m ping

image.png

よく使うモジュール

Shell モジュール

Shell モジュールは、リモートホスト上で shell インタプリタを呼び出してコマンドを実行できます。パイプなど、shell のさまざまな機能をサポートします。

  • 現在のユーザー ID を確認
ansible guance -m shell -a 'id'

image.png

  • 現在システムにログインしているユーザーを確認
ansible guance -m shell -a 'who'

image.png

Copy モジュール

このモジュールは、ファイルをリモートホストにコピーするために使用します。指定した内容でファイルを生成したり、権限を変更したりすることもできます。

  • ansible.cfg ファイルをリモートホストにコピーし、権限を「読み書き」-rw-rw-rw- に指定
ansible guance -m copy -a 'src=/etc/ansible/ansible.cfg dest=/tmp/ansible.cfg mode=666'

image.png

リモートホストの ansible.cfg ファイルを確認

ansible guance -m shell -a 'ls -l /tmp/ansible.cfg'

image.png

  • 内容を指定してファイルを生成
ansible guance -m copy -a 'content="hello world" dest=/tmp/hello mode=666'

image.png

リモートホストのファイルを確認

ansible guance -m shell -a 'cat /tmp/hello'

image.png

File モジュール

このモジュールは、ファイルの属性を設定するために使用します。ファイルの作成、リンクファイルの作成、ファイルの削除などが可能です。

  • /tmp 配下に app ディレクトリを作成
ansible guance -m file -a 'path=/tmp/app state=directory'

image.png

/tmp ディレクトリを確認

ansible guance -m shell -a 'ls -l /tmp'

image.png

  • 先ほど ansible01 からコピーした ansible.cfg ファイルを削除
ansible guance -m file -a 'path=/tmp/ansible.cfg state=absent'

image.png

Fetch モジュール

このモジュールは、リモートホストからファイルを取得(コピー)してローカルに保存するために使用します。

  • リモートホストの /tmp/hello ファイルを /root ディレクトリにプル
ansible guance -m fetch -a 'src=/tmp/hello dest=/root'

image.png

/root ディレクトリ配下に、2つの新しいディレクトリ(リモートホストの IP がディレクトリ名)が作成されていることを確認できます。

yum -y install tree
tree /root

image.png

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)"'

プロセスが起動しているか確認します。

ansible guance -m shell -a 'ps -ef|grep datakit|grep -v grep'

image.png

一括設定

  • 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 を一括再起動します。

ansible guance -m shell -a 'systemctl restart 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 を実行します。

ansible-playbook /etc/ansible/dk_upgrade.yaml

image.png

DataKit のバージョンが最新になっていることを確認します。

ansible guance -m shell -a 'datakit --version'

image.png

cron ジョブを追加します(毎日 02:02 に一括アップグレードを実行)。crontab -e

02 02 * * * ansible-playbook /etc/ansible/dk_upgrade.yaml

フィードバック

このページは役に立ちましたか?