本文へ移動
runlot
セルフホスト要件

要件

最初のパッケージをインストールする前に、セルフホスト環境でお客様に用意していただくもの。マシン・PostgreSQL 18・S3 互換ストア・DNS・証明書です。

マシン

evalsingleha
マシン124 台以上
コントロールプレーン4 vCPU、8 GB RAM、50 GB ディスク同じ同じ
データノードコントロールプレーンと共有常駐プロジェクト 1 つにつき 200 MB の RAM と余裕分、ローカル NVMe同じ。ただしノード 1 台分の予備容量を加える
オペレーティングシステムUbuntu 24.04、Debian 12、RHEL 9 または 10、Rocky 9 または 10 (x86-64)同じ同じ

データノードには glibc 2.38 以降が必要です。Ubuntu 24.04・Debian 13・RHEL 10 は満たしていますが、RHEL 9 は満たしていません。コントロールプレーンは RHEL 9 で動作します。RHEL 9 のノードは、何かが変更される前にインストール前チェックで拒否されます。

1 つのノードが保持できるプロジェクトは、パーク中か実行中かを問わず最大 64 個です。上限を決めているのはハードウェアではなくスロット帯で、各プロジェクトにはそのノード上で固定のポートペアが割り当てられます。ノードの設定にある RUNLOT_MAX_SLOT で上限を引き上げられます。値はコントロールプレーンとすべてのノードで同じにし、最初のインストール前に設定してください。

ノードが復帰するまでの時間

データノードが失われると、そのノード上のすべてのプロジェクトがオブジェクトストアから代替ノードに復元されます。16 コア・62 GB のノードで、すべてのプロジェクトを退避させたあと一斉にリクエストした場合の実測値です。

プロジェクト数全プロジェクトが復帰して応答するまで
5031 秒
10056 秒

曲線は、15 秒の下限に、プロジェクト 1 つあたり約 0.5 秒を加えたものです。これらのプロジェクトは 1 つあたり 10 MB でした。500 MB を保持するプロジェクトは復元にさらに時間がかかり、低速な回線の先にあるオブジェクトストアではその分の時間も加わります。

PostgreSQL 18

コントロールプレーンは、お客様が運用する PostgreSQL にメタデータを保存します。必要な条件は次のとおりです。

  • バージョン 18。 マイグレーションは 16 以降に存在する CREATEROLE のセマンティクスを使用しており、製品は 18 でテストされています。
  • CREATEROLE を持ち、空のデータベースを所有するロール。インストーラーはそのデータベース内にさらに 3 つのロールを作成し、自身をそれらのメンバーにします。
  • コントロールプレーンから到達できること。データノードがこのデータベースに接続することはありません。
CREATE ROLE runlot LOGIN CREATEROLE PASSWORD '…';
CREATE DATABASE runlot_meta OWNER runlot;

runlot-admin preflight cp は、インストールで何かが変更される前に、バージョン・ロール・権限を確認します。

お使いの PostgreSQL が自動フェイルオーバーを行う場合は、先に 運用: メタデータデータベースを復元した場合 をお読みください。コントロールプレーンは、時間をさかのぼったデータベースを検出すると、オペレーターが新しい状態を確認するまでリースの発行を停止します。

S3 互換のオブジェクトストア

バックアップ・アップロードされたファイル・Git のバックアップ・デプロイバンドルは、お客様が運用するストア(MinIO・Ceph RGW・クラウドの S3)の 1 つのバケットに保存されます。コントロールプレーンとすべてのノードには、次のものが必要です。

  • エンドポイント、バケット、そしてそのバケット内で一覧取得・取得・書き込み・削除ができるアクセスキーのペアです。
  • ストアがバケットを仮想ホストとして提供しない場合(MinIO のデフォルト)は、パス形式のアドレス指定を使います。

インストールの前に、両方のマシンについて到達性と PutObject の動作を確認します。

DNS

4 つの名前と、それらに関する、つまずきやすい 2 つの事実です。

名前向き先提供するもの
runlot.acme.exampleコントロールプレーン(お使いの TLS 終端の背後)ダッシュボード・API・運用コンソール
git.acme.exampleコントロールプレーンHTTPS と SSH 経由の Git
*.apps.acme.exampleデータノードデプロイされたすべてのアプリ
*.wire.acme.exampleデータノード、ポート 5433psql の接続
  • *.wire は *.apps とは別のワイルドカードです。 ワイルドカード証明書がカバーするのは 1 ラベルだけなので、*.wire.acme.example は独立したレコードと独立した証明書として用意する必要があります。
  • ポート 5433 は、終端されずにノードへ届く必要があります。 wire フロントは、PostgreSQL のスタートアップパケットにある TLS サーバー名を基に接続を振り分けます。手前で TLS を終端するプロキシがあると、すべての接続が失敗します。HTTP はリバースプロキシを経由できますが、5433 は経由できません。

証明書

お客様のインストール環境では、こちらから証明書を発行することはありません。次の証明書をご用意ください。

  • ダッシュボードと Git の名前用の証明書。コントロールプレーンの手前にある TLS 終端に設定します。
  • *.apps.acme.example 用と *.wire.acme.example 用の証明書。各データノードに設定します。node-front は SIGHUP でファイルを再読み込みするため、更新はファイルの置き換えと systemctl reload を 1 回行うだけで済みます。

ユーザーがプロジェクトに追加するカスタムドメインには、CNAME と、お客様が用意する証明書が必要です。このモードでは、ダッシュボードの案内にもその旨が表示されます。

ポート

ポート対象開放先
8080コントロールプレーンお使いの TLS 終端
8081, 8082コントロールプレーンデータノード(プライベートネットワーク)
9105コントロールプレーンデータノード
80, 443データノードインターネット、またはお使いのリバースプロキシ
5433データノードpsql の接続元すべて
9100, 9103, 9106データノードコントロールプレーンとほかのノード(プライベートネットワーク)
22データノードrunlot-admin upgrade を実行するコントロールプレーン

コントロールプレーンとノードは、プライベートネットワーク上で通信します。ノードは、パブリックアドレスでバックエンドをバインドすることを拒否します。

このページの目次