DUICUO

オープンソースの IT 構成管理ツールである Ansible をご紹介します。

I. Ansibleの開発と起源

Ansibleは、ITプロフェッショナルがサービスの導入と構成管理に広く利用しているオープンソースのIT構成管理ツールです。構成ファイルは一般的なYAML形式を採用しているため、比較的容易に習得できます。SaltStackとは異なり、Ansibleはエージェントを必要とせず、コントロールパネルのみを備えています。このツールは使いやすく非常に強力で、日常業務で発生する多くの面倒なサービスのインストールと構成の問題を解決します。

Ansibleの最初のバージョンは0.0.1で、2012年3月9日にMichael DeHaanによってリリースされました。その後、バージョン2.9まで進化しました。注目度、スター数、フォーク数においてチャートのトップに君臨しており、強力なSaltStackでさえ2位にランクインしています。

マイケル・デハーンは、構成管理とアーキテクチャ設計の豊富な経験を有し、以前はRed Hatで勤務し、主にCobbleの開発に携わっていました。PuppetやChefといった様々な自動化ツールを試した後、彼はそれらの長所を組み合わせた独自の自動化ツールを開発することを決意しました。こうして誕生したのが、分かりやすくユーザーフレンドリーで、広く普及している自動化ツール、Ansibleです。

II. Ansible が必要な理由

前述のように、Ansibleは主にサービスの展開と構成管理における自動化シナリオに利用されています。しかし、時間の経過とともに、プロジェクト数が増加し、チームが拡大し、さまざまな社内開発アプリケーションやサードパーティのオープンソースミドルウェアサービスが急増しました。これにより、管理が相対的に困難になり、従来の運用・保守タスクを手動で行うだけでは不十分になります。変更にかなりの時間がかかり、開発速度が低下し、作業効率が大幅に低下します。信頼性が高く効率的な展開と管理は、企業にとって大きな課題となっていることは明らかです。そのため、効率的で信頼性の高いサービスの展開および管理ツールが不可欠です。DockerコンテナやKubernetesコンテナオーケストレーションシステムが広く普及する以前から、多くの人がCI/CDにJenkins + Ansibleを使用していました。

III. Ansibleの主な機能

  • リモート コマンドのバッチ実行: コマンドは任意の数のホストで同時に実行できます。
  • ソフトウェア サービスのバッチ構成: これにより、サービスの自動展開、構成、および管理が可能になります。
  • 高度な IT タスクのオーケストレーション: Ansible は YAML を使用して、完全なインフラストラクチャを展開および維持するための完全な Playbook を作成できます。

IV. Ansibleの関連機能

Ansible はモジュールごとに動作し、バッチでデプロイする機能はありません。Ansible 自体はフレームワークのみを提供します。

  • Ansible は Python で開発されており、エージェントがなく、管理対象ノードにクライアントをインストールする必要はありません。
  • モジュール化: モジュール操作に基づいて、特定のタスクを完了するために特定のモジュールが呼び出されます。
  • SSH プロトコルに基づいています。
  • 3 つの主要コンポーネントは、Paramiko、PyYAML、Jinja2 です。
  • べき等性: タスクを 1 回実行すると、n 回実行した場合と同じ効果が得られ、繰り返し実行しても予期しない状況は発生しません。
  • バッチ タスクは、コマンドライン アドホック メソッドを使用して実行することも、YAML ファイルを使用して Playbook スクリプトをカスタマイズしてバッチ タスクを実装することもできます。
  • ロールを使用してバッチタスクを整理できます。

V. Ansibleの利点

  • 習得が簡単で軽量: 制御対象ノードにエージェントをインストールする必要がなく、バッチ操作はオペレータ マシンでのみ実行できます (前提条件: パスワードなしのログインを構成する必要があります)。
  • 柔軟な操作: 多数のモジュールがあり、コマンドラインアドホックまたはプレイブック方式を使用してバッチタスクを実行できます。
  • 高い移植性: Playbook は YAML ファイルに基づいて記述でき、ロジックが適切に行われていれば、複数のオペレーティング システムで使用できます。
  • べき等性: タスクを 1 回実行すると、n 回実行した場合と同じ効果が得られ、繰り返し実行しても予期しない状況は発生しません。
  • 通常ユーザーに対する sudo 権限昇格をサポートします。

しかし、物事には二面性があります。SSHは優れたプロトコルですが、管理対象のマシン数が多い場合は実行速度が遅くなることがあります。このような場合、速度の問題を軽減するには、最適化とタスクのバッチ処理が必要です。

VI. Ansibleアーキテクチャ

Ansible は次のコア ツールで構成されています。

  • INVENTORY: /etc/anaible/hosts 内の Ansible 管理対象ホストのリスト。
  • モジュール: Ansible がコマンドを実行するための機能モジュール。ほとんどは組み込みのコアモジュールですが、カスタムモジュールを定義することもできます。
  • プラグイン: 接続タイプ プラグイン、ループ プラグイン、変数プラグイン、フィルター プラグインなどのモジュール機能を補足します。
  • APL: サードパーティ プログラムで使用されるアプリケーション プログラミング インターフェイス。

日常業務で最も頻繁に使用される2つのコンポーネントは、インベントリとモジュールです。通常、インベントリはプロジェクトの要件に基づいてカスタマイズし、デフォルトの/etc/anaible/hostsファイルには配置しません。

次の点を全員に思い出させることが重要です。

Ansibleのアップデート後、以前のメソッドの多くは一定期間後、あるいは特定のバージョンで完全に廃止されます。これは、KubernetesにおけるAPIの廃止と似ています。ただし、古いバージョンで提供されていたメソッドを新しいバージョンで使用すると、Playbookの実行時に警告が表示されます。警告に基づいて、対応するバージョンの使用方法については公式ドキュメントを参照してください。

Ansible 公式ウェブサイト: https://docs.ansible.com/。