Nanocl の概要
Nanocl は、ご自身のインフラストラクチャでコンテナと仮想マシンのワークロードを実行する、移植性の高いオープンソースのプラットフォームです。宣言的な Statefile で Cargo、仮想マシン、ジョブ、シークレット、コントローラーのリソースを定義すると、Nanocl デーモンがそれらのオブジェクトとローカルのランタイムを同期します。
名前は nano cloud の略です。大規模なコントロールプレーンを必要とせずに、クラウドのワークロードに役立つ基本機能を提供することを目指しています。
Nanocl が提供する機能
- 名前付きのアプリケーションコンテナを Cargo にまとめ、レプリケーション、順序付きの初期化コンテナ、Docker 互換の設定を利用できます。
- ヘルス状態に基づくワークロードの準備状態の確認、再起動、履歴、制御された更新。
- HTTP API と
nanoclCLI によるコンテナと仮想マシンのライフサイクル管理。 ncproxyとncdnsによる動的な HTTP、ストリーム、DNS のルール。- シークレット、ジョブ、メトリクス、Statefile のテンプレート化、状態のバックアップ。
Nanocl 0.18 は主に単一ノードでの運用を想定したシステムです。自動的な複数ノードのスケジューリング、自動スケーリング、クラスター全体の高可用性、サービスメッシュは備えていません。名前付きの Docker ネットワークはノードのローカルにあり、Nanocl の名前空間が所有するものではありません。
Nanocl のアーキテクチャ
nanocl クライアントは nanocld に API リクエストを送信します。デーモンは望ましい状態と観測した状態を nstore に保存し、Docker のプロセスを管理して、プロキシと DNS のコントローラーが利用するイベントを発行します。
デフォルトのインストールには、次の要素が含まれます。
- nanocld / ndaemon — API とワークロードのコントローラー。
- nstore — CockroachDB を利用した、永続的なコントロールプレーンの状態。
- nmetrics —
metrsdのホストメトリクスサービス。 - ncproxy — 同じサービスコンテナ内に Nginx のデータプレーンを組み込んだプロキシコントローラー。独立して運用する
nproxyサービスはありません。 - ncdns — 同じサービスコンテナ内に dnsmasq のデータプレーンを組み込んだ DNS コントローラー。独立して運用する
ndnsサービスはありません。 - ncvpnkit — Docker Desktop 環境にのみインストールされるネットワークコントローラー。
単一ノードの簡略化した構成:

図では、それぞれの Cargo をプロセスのグループとして示しています。0.18 では、1 つの Cargo レプリカに複数の名前付きアプリケーションコンテナと、必要に応じて内部ネットワークサンドボックスを含められます。
基本オブジェクト
Cargo
Cargo は、1 つ以上の名前付きアプリケーションコンテナ、任意の初期化コンテナ、レプリカ数を持つ永続的なコンテナワークロードです。複数コンテナの Cargo を参照してください。
仮想マシン
仮想マシンは管理対象のランタイムコンテナ内で QEMU を実行し、ローカルのディスクイメージの絶対パスを使用します。ランタイムの起動前に、任意の初期化コンテナでイメージを準備できます。
ジョブ
Job は、有限のコンテナタスクです。Cargo のアプリケーションコンテナと異なり、処理が完了したら終了することを想定しています。
リソース
Resource はコントローラーを通じて Nanocl を拡張します。デフォルトの ncproxy と ncdns のコントローラーは、プロキシと DNS のルールリソースを利用します。
シークレット
Secret は環境変数、レジストリ、TLS のデータを保持します。Cargo レベルのシークレットはすべてのコンテナに継承され、コンテナレベルのシークレットはその名前付きコンテナにだけ適用されます。