構成管理の概要

提供:Dev Guides
移動先:案内検索

###序章

より広い主題として、構成管理(CM)は、システムへの変更を体系的に処理して、時間の経過とともに整合性を維持するプロセスを指します。 このプロセスはIT業界で生まれたものではありませんが、この用語はサーバー構成管理を指すために広く使用されています。

自動化は、サーバー構成管理において重要な役割を果たします。 これは、サーバーを望ましい状態にするために使用されるメカニズムであり、以前はツールの特定の言語と機能を使用してスクリプトをプロビジョニングすることで定義されていました。 実際、自動化はサーバーの構成管理の中心であり、そのため、構成管理ツールを自動化ツールまたはIT自動化ツールとも呼ぶのが一般的です。

構成管理ツールによって実装される自動化機能を説明するために使用されるもう1つの一般的な用語は、サーバーオーケストレーションまたは ITオーケストレーションです。これらのツールは通常、中央コントローラーから1台から数百台のサーバーを管理できるためです。マシーン。

市場には多くの構成管理ツールがあります。 Puppet、Ansible、Chef、Saltが人気の選択肢です。 各ツールには独自の特性があり、動作もわずかに異なりますが、それらはすべて同じ目的で駆動されます。つまり、システムの状態がプロビジョニングスクリプトで記述された状態と一致することを確認します。 ##サーバーの構成管理の利点構成管理を使用するには、通常、手動のシステム管理よりも多くの初期計画と労力が必要ですが、最も単純なサーバーインフラストラクチャを除くすべてが、その利点によって改善されます。 いくつか例を挙げると、###新しいサーバーのクイックプロビジョニング新しいサーバーを展開する必要がある場合は常に、構成管理ツールを使用して、プロビジョニングプロセスのすべてではないにしてもほとんどを自動化できます。 自動化により、面倒なタスクを人間よりも迅速かつ正確に実行できるため、プロビジョニングがはるかに迅速かつ効率的になります。 適切で完全なドキュメントがあっても、たとえば、Webサーバーを手動で展開する場合、構成管理/自動化の場合は数分かかるのに対し、数時間かかる場合があります。 ###重大なイベントからの迅速な回復迅速なプロビジョニングには、重大なイベントからの迅速な回復というもう1つの利点があります。 不明な状況が原因でサーバーがオフラインになった場合、システムを適切に監査して実際に何が起こったかを確認するのに数時間かかる場合があります。 このようなシナリオでは、影響を受けるサーバーで詳細な検査が行われている間に、通常、交換用サーバーを展開することがサービスをオンラインに戻す最も安全な方法です。 構成管理と自動化により、これを迅速かつ信頼性の高い方法で実行できます。 ###これ以上スノーフレークサーバーはありません一見、手動のシステム管理はサーバーを展開して迅速に修正する簡単な方法のように思えるかもしれませんが、多くの場合、コストがかかります。 プロセスが自動化されていない場合、時間の経過とともに、サーバーに何がインストールされ、どの変更が行われたかを正確に知ることが非常に困難になる可能性があります。 手動の修正プログラム、構成の微調整、およびソフトウェアの更新により、サーバーが一意のスノーフレークに変わり、管理が難しく、複製がさらに困難になる可能性があります。 構成管理ツールを使用することにより、新しいサーバーを起動したり、既存のサーバーを更新したりするために必要な手順がすべて、プロビジョニングスクリプトに文書化されます。 ###サーバー環境のバージョン管理サーバーのセットアップをプロビジョニングスクリプトのセットに変換すると、ソフトウェアのソースコードに通常使用するツールやワークフローの多くをサーバー環境に適用できるようになります。

Gitなどのバージョン管理ツールを使用して、プロビジョニングに加えられた変更を追跡し、スクリプトのレガシーバージョン用に個別のブランチを維持できます。 バージョン管理を使用して、プロビジョニングスクリプトのコードレビューポリシーを実装することもできます。この場合、変更はプルリクエストとして送信し、プロジェクトリーダーが承認してから承認する必要があります。 この方法により、インフラストラクチャのセットアップに一貫性が追加されます。 ###複製された環境構成管理により、まったく同じソフトウェアと構成で環境を複製することが簡単になります。 これにより、本番サーバー、開発サーバー、およびテストサーバーを使用して、多段階のエコシステムを効果的に構築できます。 同じプロビジョニングスクリプトで構築されたローカル仮想マシンを開発に使用することもできます。 この方法により、アプリケーションを本番環境にデプロイしたり、異なるマシンセットアップ(異なるオペレーティングシステム、ソフトウェアバージョン、構成)の同僚間で共有したりするときに頻繁に発生する環境の不一致によって引き起こされる問題を最小限に抑えることができます。 ##構成管理ツールの概要各CMツールには独自の用語、哲学、エコシステムがありますが、通常、それらは多くの特性を共有し、同様の概念を持っています。

ほとんどの構成管理ツールは、コントローラー/マスターおよびノード/エージェントモデルを使用します。 基本的に、コントローラーは、プロビジョニングスクリプトで定義された一連の命令またはタスクに基づいて、ノードの構成を指示します。

以下に、サーバーのほとんどの構成管理ツールに存在する最も一般的な機能を示します。###自動化フレームワーク各CMツールは、プロビジョニングスクリプトの作成に使用できる特定の構文と一連の機能を提供します。 ほとんどのツールには、言語を従来のプログラミング言語と同様にする機能がありますが、その機能は単純化されています。 変数、ループ、および条件は、より用途の広いプロビジョニングスクリプトの作成を容易にするために提供される一般的な機能です。 ###べき等の動作構成管理ツールは、以前に実行されたタスクの繰り返しを回避するために、リソースの状態を追跡します。 パッケージがすでにインストールされている場合、ツールはそのパッケージを再度インストールしようとはしません。 目的は、プロビジョニングを実行するたびに、システムを複数回実行した場合でも、システムが目的の状態に到達(または維持)することです。 これが、これらのツールがべき等動作を持っていることを特徴付けるものです。 ただし、この動作は必ずしもすべての場合に強制されるわけではありません。 ###システムの事実構成管理ツールは通常、プロビジョニングされるシステムに関する詳細情報を提供します。 このデータは、factsと呼ばれるグローバル変数を介して利用できます。 これには、ネットワークインターフェイス、IPアドレス、オペレーティングシステム、ディストリビューションなどが含まれます。 各ツールは、ファクトの異なるセットを提供します。 これらを使用して、プロビジョニングスクリプトとテンプレートを複数のシステムにより適応させることができます。 ###テンプレートシステムほとんどのCMツールは、構成ファイルとサービスのセットアップを容易にするために使用できる組み込みのテンプレートシステムを提供します。 テンプレートは通常、汎用性を最大化するために使用できる変数、ループ、および条件をサポートします。 たとえば、テンプレートを使用して、Apache内に新しい仮想ホストを簡単にセットアップし、同じテンプレートを複数のサーバーのインストールに再利用できます。 テンプレートには、ハードコードされた静的な値だけではなく、NameServerDocumentRootなど、ホストごとに変更できる値のプレースホルダーを含める必要があります。 ###拡張性プロビジョニングスクリプトは特定のサーバーのニーズと要求に非常に特化できますが、同様のサーバー設定または複数のサーバー間で共有できる設定の一部がある場合が多くあります。 ほとんどのプロビジョニングツールは、プロビジョニング設定の小さなチャンクをモジュールまたはプラグインとして簡単に再利用および共有できる方法を提供します。

サードパーティのモジュールとプラグインは、インターネット上で簡単に見つけることができます。特に、PHPWebサーバーのインストールなどの一般的なサーバー設定の場合はそうです。 CMツールには強力なコミュニティが構築されている傾向があり、ユーザーはカスタム拡張機能を共有することをお勧めします。 他のユーザーが提供する拡張機能を使用すると、時間を大幅に節約できると同時に、選択したツールを使用して他のユーザーが一般的な問題をどのように解決したかを学ぶための優れた方法として役立ちます。 ##構成管理ツールの選択市場には多くのCMツールがあり、それぞれが異なる機能セットと異なる複雑さのレベルを備えています。 人気のある選択肢には、Chef、Ansible、Puppetなどがあります。 最初の課題は、ニーズに最適なツールを選択することです。

選択する前に考慮すべきことがいくつかあります。###インフラストラクチャの複雑さほとんどの構成管理ツールには、コントローラーマシンとそれによって管理されるノードで構成される最小の階層が必要です。 たとえば、Puppetでは、各ノードに agent アプリケーションをインストールし、コントローラーマシンにmasterアプリケーションをインストールする必要があります。 一方、Ansibleは分散型の構造であり、ノードに追加のソフトウェアをインストールする必要はありませんが、プロビジョニングタスクを実行するためにSSHに依存しています。 小規模なプロジェクトの場合、単純化されたインフラストラクチャの方が適しているように見えるかもしれませんが、ツールでは適用されない可能性のあるスケーラビリティやセキュリティなどの側面を考慮することが重要です。

一部のツールには、より多くのコンポーネントと可動部品が含まれている可能性があります。これにより、インフラストラクチャが複雑になり、学習曲線に影響を与え、実装の全体的なコストが増加する可能性があります。 ###学習曲線この記事で前述したように、CMツールは、ドメイン固有言語(DSL)を使用することもあるカスタム構文と、自動化のフレームワークを構成する一連の機能を提供します。 従来のプログラミング言語と同様に、一部のツールでは、習得するためにより高い学習曲線が必要になります。 インフラストラクチャの要件も、ツールの複雑さと、投資収益率を確認できる速度に影響を与える可能性があります。 ###コストほとんどのCMツールは、無料またはオープンソースバージョンを提供し、高度な機能とサービスの有料サブスクリプションを備えています。 一部のツールには他のツールよりも多くの制限があるため、特定のニーズとインフラストラクチャの成長方法によっては、これらのサービスの料金を支払う必要が生じる場合があります。 また、トレーニングは、金銭的な観点からだけでなく、最終的に選択するツールでチームをスピードアップするために必要な時間に関しても、潜在的な追加コストとして考慮する必要があります。 ###高度なツール前述のように、ほとんどのツールは、サポート、拡張機能、高度なツールを含む有料サービスを提供します。 特定のニーズ、インフラストラクチャのサイズ、およびこれらのサービスを使用する必要があるかどうかを分析することが重要です。 たとえば、管理パネルはこれらのツールによって提供される一般的なサービスであり、中央のポイントからすべてのサーバーを管理および監視するプロセスを大幅に容易にすることができます。 そのようなサービスがまだ必要ない場合でも、将来必要になる可能性のあるオプションを検討してください。 ###コミュニティとサポートユーザーは通常、知識と拡張機能(モジュール、プラグイン、プロビジョニングスクリプト)を他のユーザーと共有できるため、強力で歓迎的なコミュニティは、サポートとドキュメント作成に非常に役立ちます。 これは、学習曲線をスピードアップし、有料のサポートやトレーニングで余分なコストを回避するのに役立ちます。 ##人気のあるツールの概要次の表は、現在市場で入手可能な3つの最も人気のある構成管理ツールであるAnsible、Puppet、およびChefの主な違いの概要を示しています。

Ansible 傀儡 シェフ
スクリプト言語 YAML Rubyに基づくカスタムDSL ルビー
インフラストラクチャー コントローラマシンはSSH経由でノードに設定を適用します PuppetマスターはPuppetノードの構成を同期します Chefワークステーションは構成をChefサーバーにプッシュし、そこからChefノードが更新されます
ノード専用のソフトウェアが必要 いいえ はい はい
一元化された制御ポイントを提供します いいえ。 どのコンピューターもコントローラーになることができます はい、パペットマスター経由 はい、ChefServer経由
スクリプト用語 プレイブック/役割 マニフェスト/モジュール レシピ/クックブック
タスク実行順序 一連の 非シーケンシャル 一連の
    1. 次のステップこれまで、サーバーの構成管理がどのように機能するか、および構成管理インフラストラクチャを構築するためのツールを選択する際に考慮すべきことについて説明してきました。 このシリーズの後続のガイドでは、Ansible、Puppet、Chefの3つの一般的な構成管理ツールを実際に体験します。

これらのツールを自分で比較する機会を与えるために、各ツールによって完全に自動化されるべきサーバー設定の簡単な例を使用します。 このセットアップは、Apacheを実行して単純なWebページをホストするUbuntu18.04サーバーで構成されています。 ##結論構成管理は、プロセスを自動化し、システム環境に加えられた変更を追跡するためのフレームワークを提供することにより、時間の経過とともにサーバーの整合性を大幅に向上させることができます。 このシリーズの次のガイドでは、 Ansible をツールとして使用して、構成管理戦略を実際に実装する方法を説明します。