web-dev-qa-db-ja.com

オンデマンドのDockerコンテナの起動を実装する

状況:しばらくの間定期的にヒットし、その後長期間使用されないままになる多くの重いDockerConainer。

希望:コンテナをオンデマンドで開始し(systemdがソケットのアクティブ化を通じて開始するように)、一定期間アイドリングした後に停止します。エンドユーザーへのvisibleダウンタイムはありません。

オプション:

  • Kubernetesには、レプリカをスケーリングできるリソースコントローラーがあります。レプリカの数を0に保ち、必要に応じて1に設定することは可能だと思いますが、どうすればそれを実現できますか? ユーザーガイド自動スケーリング制御エージェントと呼ばれるものがあると書かれていますが、これ以上の情報はありません。ユーザー定義のロジックに基づいてリクエストを追跡し、スケーリングするために使用できる、プラグイン可能なプログラム可能なエージェントはありますか?
  • Docker Swarmに解決策がありませんが、間違っている場合は修正してください。
  • Dockerデーモンにアクセスできる選択した言語で記述されたカスタムhttpサーバーを使用します。正しい場所にルーティングする前に、コンテナの存在を確認し、実行されていることを確認します。欠点-一般的な解決策ではなく、notコンテナであるか、デーモンにアクセスできる必要があります。
  • 説明されているようにsystemdを使用します ここ 。上記と同じ欠点、つまり一般的ではなく、ネットワークタスクを自分で処理する必要があります(生成されたコンテナのIPを見つけて、サーバー/プロキシの構成にフィードするなど)。

どんなアイデアでも大歓迎です!

21
xificurC

Kubernetesの組み込み Horizo​​nal Pod Autoscaling(HPA) を使用して、各コンテナの1つのインスタンスから、負荷を処理するために必要な数にスケールアップできますが、0-の組み込み機能はありません。 to-1リクエストの受信時にスケーリングし、広く使用されているソリューションを認識していません。

3
Alex Robinson
  1. Systemdを使用してDockerコンテナを管理できます。 https://developer.atlassian.com/blog/2015/03/docker-systemd-socket-activation/ を参照してください

  2. 少し前に、私はpantheon.ioのops担当者に、dockerでこの種のことをどのように行うかについて話しました。 Kubernetesが出てくる前だったと思います。 Pantheon do drupalホスティング。セットアップ方法では、クライアント用に実行するすべてのサーバーがコンテナ化されますが、説明したように、コンテナは不要になるとなくなります。予約されている唯一のリソース次に、ディスクストレージ以外はホストのソケット番号です。

    それらには、すべての非アクティブなサーバーのソケットをリッスンする非常に単純なデーモンがあります。要求を受信すると、デーモンはそのソケットでの着信接続のリッスンを停止し、必要なコンテナーを開始して、その1つの要求を新しいコンテナーにプロキシします。後続の接続は、コンテナが一定期間アイドル状態になるまでコンテナに直接接続され、リスナーデーモンが再びポートを引き継ぎます。それは彼らが何をしたかについて私が知っているのと同じくらい詳細ですが、あなたはその考えを理解します。

  3. Pantheonが実装したデーモンのようなものを使用して、Dockerデーモンに直接ではなく、Kubernetesにコマンドを送信できると思います。たぶん、動的にコンテナを起動するためのシステムベースのアプローチは、必要に応じてKubernetesと通信することもできます。これらのいずれかを使用すると、コンテナだけでなくポッドを起動できる可能性があります。

0
mc0e