状況:しばらくの間定期的にヒットし、その後長期間使用されないままになる多くの重いDockerConainer。
希望:コンテナをオンデマンドで開始し(systemdがソケットのアクティブ化を通じて開始するように)、一定期間アイドリングした後に停止します。エンドユーザーへのvisibleダウンタイムはありません。
オプション:
どんなアイデアでも大歓迎です!
Kubernetesの組み込み Horizonal Pod Autoscaling(HPA) を使用して、各コンテナの1つのインスタンスから、負荷を処理するために必要な数にスケールアップできますが、0-の組み込み機能はありません。 to-1リクエストの受信時にスケーリングし、広く使用されているソリューションを認識していません。
Systemdを使用してDockerコンテナを管理できます。 https://developer.atlassian.com/blog/2015/03/docker-systemd-socket-activation/ を参照してください
少し前に、私はpantheon.ioのops担当者に、dockerでこの種のことをどのように行うかについて話しました。 Kubernetesが出てくる前だったと思います。 Pantheon do drupalホスティング。セットアップ方法では、クライアント用に実行するすべてのサーバーがコンテナ化されますが、説明したように、コンテナは不要になるとなくなります。予約されている唯一のリソース次に、ディスクストレージ以外はホストのソケット番号です。
それらには、すべての非アクティブなサーバーのソケットをリッスンする非常に単純なデーモンがあります。要求を受信すると、デーモンはそのソケットでの着信接続のリッスンを停止し、必要なコンテナーを開始して、その1つの要求を新しいコンテナーにプロキシします。後続の接続は、コンテナが一定期間アイドル状態になるまでコンテナに直接接続され、リスナーデーモンが再びポートを引き継ぎます。それは彼らが何をしたかについて私が知っているのと同じくらい詳細ですが、あなたはその考えを理解します。
Pantheonが実装したデーモンのようなものを使用して、Dockerデーモンに直接ではなく、Kubernetesにコマンドを送信できると思います。たぶん、動的にコンテナを起動するためのシステムベースのアプローチは、必要に応じてKubernetesと通信することもできます。これらのいずれかを使用すると、コンテナだけでなくポッドを起動できる可能性があります。