多数のサーバーと仮想マシン、および一定の展開でさらに多くのコードを使用すると、必然的にこの巨大な経済全体を管理する上で問題が発生します。 継続的インテグレーションを整理するためのツールは多数あります。 私たちのリストには、すでにGIT、Jenkins、Chef、Proxmox、Graylog2がすでに含まれています。 今日は、スクリプトを使用してルーチンタスクを自動化する別の便利なツール、
rundeckについて説明します。 この記事は、設定の例を含む詳細なマニュアルではなく、トピックに関する考察です。
Rundeckは、システム管理者がスクリプトサーバーを整理し、ルーチン作業とテンプレート作業を自動化できるようにするオープンソースプロジェクトです。 実際、これはすべてのドアの鍵です。 これにより、任意の数のノードでスクリプトまたはシェルコマンドを実行し、それらの実行を制御し、成功したかどうかにかかわらず各アクションについて詳細に管理者に伝えることができます。 Rundeckは、既に使用されているすべてのツールを組み合わせ、それらの間の透過的な相互作用を整理することができます。
機能:
-パラメーターを使用したコマンドとスクリプトの分散実行、
-ノード(デフォルトではSSH)と対話するためのいくつかのメカニズムのサポート、およびプラグインの形式で独自の機能を作成する機能、
-スクリプトはいくつかのステップで説明できますが、
-構成用のグラフィカル管理インターフェイスとコンソールユーティリティ、
-アクセス権の分離、LDAP / ADとの統合、
-スクリプトとチームの履歴と監査、
-他の継続的統合ツールとの統合-ジェンキンス、シェフ、
-API
-リモートホストからURLですべてのパラメーターと設定を取得する機能。
アーキテクチャ:
サーバーであり、javaです。 ここでは、ユーザーのすべてのロジック、認証、アクセス権、コンソール管理ユーティリティ、およびWebベースの管理インターフェイス(あまり便利ではありませんが)、
-スクリプト、監査結果、すべてのログはデータベースに保存されます。
-ノードとの相互作用のために、sshはキーによって使用されます。 この場合、逆SSHノードサーバー接続は必要ありません。
それはほとんどどこでも動作します:
-Linux、
-Windows XP、サーバー以降、
-Mac OS X 10.4以降。
インストールと設定は簡単で、すべての設定はファイルに保存されます。
ユースケース、シェフとの統合。 問題と解決策。
シェフについての少し叙情的な余談。 レシピ、ノード、環境-これらはすべて理論上問題なく動作します。 問題は実際の生産で始まります。 システムコンポーネントの接続性は予想外に高く、一部のモジュールは他のモジュールに非常に依存しています。 ジオクラスターおよび分散データセンターでは、多くの要因を考慮する必要があります。 ネットワーク速度、異なる地理的ポイントからのノードへのアクセス速度、タイムゾーン。 多数のユーザーに対して、新しい機能が特定の地域および特定の時間にのみ表示される場合、分割展開を使用できます。
そのような現実では、シェフはすでに保存を停止し、より多くの損害を与えます。 レシピが多すぎます。 ますますミスを犯す可能性のある場所。 レシピには、レシピよりも多くのオプション、環境、およびフラグがあります。 長くて長いテーブルを開始する必要があります。そこでは、軍事作戦のスキームをマルチカラーのフェルトペンで説明します。 どこで、どこで、いつ展開したか、そしてその理由。 それにもかかわらず、間違った方法で分割すると、シェフも自動化する必要があり、管理する必要があるという理解に至りました。
レシピには、コンポーネントの高い接続性を克服するための多くのロジックがありました。 ノードはアップストリームからオフになり、コードを準備してデプロイを開始します。 特定のステップでは、たとえば新しいコードのデータのインデックスを再作成するなど、別のモジュールの状態を変更する必要があります。 インデックスの再作成後、すぐにもう1つのノードを配置し、分割テストの準備をします。 この時点で、最初のノードは展開を完了して最終テストに合格し、その後、アップストリームに含まれます。 この場合、データベースはすでに準備ができているはずです。百万のトランザクションが同時に何かを更新しています。 これらはすべてほぼ同時に、ほぼ同期的に行う必要があります。 シェフはできるように見えますが、それは不便であり、レシピであまりにも多くのロジックを使用する必要があります。 信号、共通の属性、フラグを交換し、各段階で、隣人がどの状態にあり、次に何をすべきかを理解します。
Rundeckを提供するもの。
1.プロジェクトを作成する
2.すべてのレシピとともに、シェフからすべてのノードをインポートします。 このための
既製のツールがあります。
3.すべてを自分で行うシナリオを作成し、展開中に接続が切断されないようにします。 オン、オフ、同期、チェックを開始し、各ステップについて管理者に報告します。
4.利益。
これを行うには、キー認証を構成する必要があります。 非特権ユーザーが何をどのように行うべきかを理解し、sudoを構成します。 または、chrootで押し込みます。 さて、あらゆる言語でたくさんの魔法のスクリプトを書いてください。 Perl、python、bash、php)))また、失敗したステップの後、スクリプトの実行を停止することもできます。 スクリプトは好きなように書くことができます。 それはすべて、想像力とあなたが直面している課題にかかっています。
Rundeckは2つのモードで動作します。 タスクは、一度にすべてのノードで並行して実行することも、1つで終了して順番に実行することもできます。
ノード指向
1. NodeAステップ#1
2.「ステップ#2
3.「ステップ#3
4. NodeBステップ#1
5.「ステップ#2
6.「ステップ#3
ステップ指向
1. NodeAステップ#1
2. NodeB "
3. NodeAステップ#2
4. NodeB "
5. NodeAステップ#1
6. NodeB "
Rundeckは、引数を指定してコマンドとスクリプトを実行できます。これらは、他の設定と同様に、リモートURLから取得できます。 また、APIを使用すると、webUIを開かずに必要なものだけを制御できます。 また、ここではあまり便利ではありません。
このソリューションの大きな利点は、システム全体の状態をいつでも個別に監視できることです。 また、1つのポイントから強制的に変更することもできます。 メガトンのサーバーでsshする必要はありません。
マイナス-シリーズの別のコンポーネントは、監視を監視し、展開を展開し、システム展開を展開します。 複雑化はほとんど常に悪いです。 システム全体とコンポーネントのレイアウトを個別に明確に理解する必要があります。 そうでなければ、解雇でさえ罰の不十分な尺度になるような奇跡を台本する機会があります。 また、セキュリティスキームを明確かつ明確に構築する必要があります。 そして、許可する必要があるものだけをユーザーに許可します。 すべてのドアの鍵は便利ですが、「私たちは超科学者であり、強力な爆弾を思いついたということは起こりません。 しかし、彼女が間違ったるうきに落ちたら...」
参照資料
-
シェフ-
ランデッキ