要件
最初のパッケージをインストールする前に、セルフホスト環境でお客様に用意していただくもの。マシン・PostgreSQL 18・S3 互換ストア・DNS・証明書です。
マシン
eval | single | ha | |
|---|---|---|---|
| マシン | 1 | 2 | 4 台以上 |
| コントロールプレーン | 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 のノードで、すべてのプロジェクトを退避させたあと一斉にリクエストした場合の実測値です。
| プロジェクト数 | 全プロジェクトが復帰して応答するまで |
|---|---|
| 50 | 31 秒 |
| 100 | 56 秒 |
曲線は、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 | データノード、ポート 5433 | psql の接続 |
*.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 を実行するコントロールプレーン |
コントロールプレーンとノードは、プライベートネットワーク上で通信します。ノードは、パブリックアドレスでバックエンドをバインドすることを拒否します。