すべての幸せと良さ!
私の個人的な所有物は、さまざまなサーバーの小さな動物園ではないことが進化的に判明しました。安価なSupermicroからトップエンド(リリース時)HP Gen 8までです。
しかし、物語はネットワークの敷設方法に関するものではなく、サーバーの構成方法でさえありません。 そうだね docker-composeサービス全体が向上し、喜びます。
HPはかっこいい人で、強力で信頼性の高い詰め物ですが、スーパーマイクロの後の物理学の観点から見ると、実際にはあまり便利ではありません。
Supermicroは安価で便利な人ですが、機能(ILO、ファームウェア、Smartアレイなど)ははるかに少ないです。
それはもっと簡単に見えるかもしれません:拾い上げ、Dockerfileのカップルであるdocker-compose.yamlを作成しました-利益。 しかし、悪魔は詳細にあります..
サーバーに関するプレリュードには理由があります。各サーバーに1ダースまたは2つの仮想マシンがあり、各仮想マシンに1ダースの構成ファイルから数百のサービスがある場合はどうでしょうか。 さらに、独立したサービスが存在するように、コンポーネントの一部を忘れてはなりません。
そして、すべてがうまくいくようです。 しかし、あるサービスの消費者が「なんらかの理由で、今は1週間ほど活気のあるサービスを提供している」というタイプの質問に出くわすと、その驚くべき素晴らしい瞬間が訪れることがあります。
そして、クライアントは忠実であり(サービスは無料です)、悲劇は起こらなかったようですが、予想外の人々の差し迫った嵐と3夜の電話の奇妙な感覚があります。
プログラマー/開発者/管理者の最も重要なスキルは、背中のすぐ下の体の最も柔らかい部分からの信号に時間内に反応する能力であるため、適切な対策を講じ始めました。
しかし、私が問題の原因と考えられる解決策を定式化しようとしなかったら、私も数学エンジニアでもないでしょう。
与えられた
- Dockerとそれなしの両方で開始されたZooサービス
- サービスの数が増加します
- 一部のサービスグループは完全に分離されています(通常、可視性/アクセスを区別するため)
挑戦する
何も落ちないことを確認してください。秋に立ち上がる- 少数のサービスと多数のサービスの両方に可能なソリューションを使用する
- いつ、何が落ちたかを知る。 なるべくクライアントより遅くしてください。
- セットアップに多くの時間を費やさないでください
解決策
まず、restart = alwaysでサービスを開始したいという誘惑は、起動時の遅延がゼロのバグのあるコンテナの痙攣的な記憶によって特徴付けられました。
第二に、喫煙docker-compose v3は、このようなものがあることを示しましたが、よく調べてみると、多くの慣例で動作します。
第三に、Kubernetus and co。の使用は、Smerch SRZOから100メートルの距離の蚊へのショットのように見えました。
いくつかの強いマグカップの後 ローマ コーヒー、領事と領事テンプレートの記憶が頭に浮かびました。
最初は、consulテンプレートは自動更新機能を備えたConsulのデータに基づいた構成の生成として作成されましたが、現在はスーパーバイザーの一種として使用できます。
次のチェーンが形成されました。
- consul-templateはアプリケーションを起動し、
- Consulでサービスとして登録(サービス登録)、
- イベントと変更の監視のために、同じ領事の監視を固定します
虹、ユニコーン、蝶...領事テンプレートが領事に登録できないことに気付くまで。 0_o
問題へのリンク 、 問題2016につながる
しかし、アイデアはまだシンプルでした:
親愛なるマイクロソフトの創業者、私たち全員に怠beであると遺言されましたが、私が彼と議論するのは誰なのか、私は代替ソリューションを探しに行きました。
簡単な解決策がないことが突然判明しました。 スーパーバイザー-pythonをプルします(私はそれに対して何もしませんが、特にサービスの数を考えると、残念です)。 Zabbixおよびその他のZabbixは一種の優れたエージェントですが、重度のエージェントまたは大きな遅延のいずれかです。
#私はプログラマーですので、準備をしてください。 レシピは簡単です:テイクゴー(結果のファイルは小さくて自給自足で、クロスコンパイルは基本的です)、Unixプロセスに関する多くの知識とたくさんのお茶。
タイムライン(D-開始日):
- D + 1つの既製の作業プロトタイプ
- D + 2は見つかったすべてのバグを修正しました
- 同僚の慈悲に与えられたD + 3
- D + 4つの同僚が誤って修正したエラー
- D + 7すべてが書き直されました
...
私たちの日々
再起動の回数、再起動の間隔、Consulでの自動(de)登録、Telegramでの通知を設定できる超軽量のスーパーバイザーが作成されました。
起動パラメータは構成ファイルに保存できます。 ルート部分は別のライブラリとして取り出され、拡張機能を簡単に開発する機能が追加されます。
例
設定するフラグがたくさんあるサービス(/ usr / local / bin / dummyと呼びましょう)があるとしましょう。 それは時々落ちる可能性があります(そのようではなく、そのような生活=()。
ローカルのConsulエージェントに登録して開始します。
monexec run --consul -- /usr/local/bin/dummy -a 1 -b 2 -c 3 --foo bar --foo baz --foo etc
利益! デフォルトでは、monexecは5秒間隔で永久に再起動します。
次に、今後の参考のためにこれを管理者に渡します。 なんとかコメイル・ファウトではなく送信するためのキロメートル発射ライン。
スタートアップスクリプトを生成します(すべて同じ、 --generate
フラグを追加するだけです)。
monexec run --generate --consul -- /usr/local/bin/dummy -a 1 -b 2 -c 3 --foo bar --foo baz --foo etc > dummy.yml
services: - label: stinger-desert command: /usr/local/bin/dummy args: - -a - "1" - -b - "2" - -c - "3" - --foo - bar - --foo - baz - --foo - etc stop_timeout: 5s restart_delay: 5s restart: -1 consul: url: http://localhost:8500 ttl: 3s timeout: 1m0s register: - stinger-desert
これにより、後で使用するための構成ファイルが作成されます。
次のように実行します。
monexec start /path/to/dir/with/dummy
重要! /path/to/dir/with/dummy
はディレクトリであり、ファイルへのパスではありません。 (Dockerfilesに触発された)
それでは、幸せな生活と精神のグラムを追加しましょう。アラートをTelegramに接続します。 これを行うには、ボットを作成 して番号を調べます
services: - label: stinger-desert command: /usr/local/bin/dummy args: - -a - "1" - -b - "2" - -c - "3" - --foo - bar - --foo - baz - --foo - etc stop_timeout: 5s restart_delay: 5s restart: -1 consul: url: http://localhost:8500 ttl: 3s timeout: 1m0s register: - stinger-desert telegram: token: "123456789:AAAAAAAAAAAAAAAAAAAAAA_BBBBBBBBBBBB" services: - "stinger-desert" recipients: - 123456789 template: | *{{.label}}* Service {{.label}} {{.action}} {{if .error}}️ *Error:* {{.error}}{{end}} _time: {{.time}}_ _host: {{.hostname}}_
まとめ
ある人が言ったように、何か新しいものを作成するには、3つの段階があります。
- アイデア
- 実装
- 転記
他の人がそれを使用できない場合、良いか悪いアイデアと実装(あなたが決める)はすべて価値がありません。
文書化されたソースコード 、 ほとんどのプラットフォームのバイナリ を使用および収集するためのガイドを作成しようとしました
皆さんに幸運を!