Snap Store Proxy: 大規模なUbuntuクラスター管理で帯域幅を節約する秘策

Ubuntu tutorial - IT technology blog
Ubuntu tutorial - IT technology blog

“Snap Update”が帯域幅の悪夢になるとき

Webサーバーの管理でもK8sクラスターの運用でも、DockerやLXDをインストールする際にSnapは馴染みのあるツールです。しかし、大規模なデプロイメントにおいては、インターネット帯域幅を猛烈に消費するという致命的な弱点があります。

計算してみましょう。50台のサーバーがあるシステムで、Dockerが200MBのアップデートをリリースしたとします。50台すべてのマシンが一斉にCanonicalのサーバーから10GBのデータを「取得」しようとします。その結果、オフィスの回線はボトルネックになり、進捗バーが亀のように遅いのを眺めることになります。どのマシンが最新版で、どれが旧バージョンのままかを把握するのも非常に煩雑です。

以前、30ノードのUbuntuを使用するエッジコンピューティングプロジェクトの管理者だった際、パッケージのダウンロード時のタイムアウトエラーの処理だけで丸一週間を費やしたことがあります。その時, Snap Store Proxyがこの問題を根本から解決してくれました。外部へのインターネットトラフィックを最大90%削減し、一瞬で中央管理を可能にしてくれます。

Snap Store Proxyの仕組み

簡単に言えば, Snap Store Proxyはローカルネットワーク内に設置される一時的な保管庫(キャッシュ)の役割を果たします。各クライアントマシンが個別にインターネットからデータをダウンロードする代わりに、まずプロキシに問い合わせます。プロキシにキャッシュがあれば、LANの速度(インターネットの低速な回線ではなく、通常1Gbpsなど)で即座に返されます。キャッシュがない場合は、プロキシが一度だけダウンロードし、それを他のマシンに配布します。

もう一つの非常に価値のある機能は「Validation Sets」です。この機能により、システム全体でソフトウェアのバージョンを固定でき、すべてのサーバーがテスト済みの正しいバージョンを実行していることを保証できます。

必要なハードウェア構成

クリーンなUbuntuサーバー(22.04または24.04 LTSを推奨)を使用することをお勧めします。それほど高いスペックは必要ありませんが、ディスク容量には注意が必要です。

  • CPU: 2コア
  • RAM: 4GB
  • Disk: キャッシュするSnapの数に応じて40GB〜100GBを推奨
  • OS: Ubuntu Server

Snap Store Proxyのデプロイ手順

ステップ1:プロキシパッケージのインストール

まず、システムを更新して snap-store-proxy パッケージをインストールします。

sudo apt update && sudo apt upgrade -y
sudo snap install snap-store-proxy

インストールが完了したら、次のコマンドでサービスが安定して動作しているか確認します。:

snap-store-proxy status

ステップ2:Canonicalへの登録

プロキシを動作させるには、Ubuntu Oneアカウントを介してCanonicalのシステムと連携させる必要があります。アカウントをお持ちでない場合は、login.ubuntu.com で登録してください。

次のコマンドで登録プロセスを開始します。:

sudo snap-store-proxy register

この時、画面にコードが表示されます。ターミナルに表示されたリンクにアクセスしてログインし、このコードを入力するだけです。確認後、システムから一意の識別子である Store ID が発行されます。

ステップ3:ドメインの設定

プロキシはデフォルトでポート80で動作します。利便性のために、このプロキシマシンのIPを指す内部DNSレコード(例:snap-proxy.local)を設定することをお勧めします。

sudo snap-store-proxy config domain=snap-proxy.yourdomain.com

クライアントマシンをプロキシ経由に設定する

さて、クライアントマシンがインターネットから直接ダウンロードする習慣をやめさせる時が来ました。**各クライアントマシン**で、以下の2つの操作を行います。

1. 信頼証明(Assertion)の読み込み:

クライアントマシンが内部プロキシを信頼して動作するためには、識別ファイルが必要です。

curl -s http://<PROXY_IP>/v2/auth/store/assertions | sudo snap ack /dev/stdin

2. Store IDの宣言:

ステップ2で受け取ったStore IDを取得し、クライアントマシンの設定に割り当てます。:

sudo snap set core proxy.store=<YOUR_STORE_ID>

3. クライアントマシンにインターネット接続がない場合:

クライアントマシンが完全に隔離されたネットワーク内にある場合は、すべてのHTTP/HTTPSリクエストにプロキシを使用するように強制します。:

sudo snap set core proxy.http="http://<PROXY_IP>"
sudo snap set core proxy.https="http://<PROXY_IP>"

実際の効果の検証

まず1台目のクライアントマシンで、VLCやMicroK8sのような容量の大きいSnapをインストールしてみてください。その後、2台目のクライアントマシンで同じSnapを再度インストールします。2台目のダウンロード速度が驚くほど速く、1000MbpsのLAN経由でデータが取得されるため、ほぼ瞬時に完了することがわかります。

ヒント:/var/snap/snap-store-proxy/common/ ディレクトリに移動して、キャッシュされたファイルを確認できます。毎月節約されるインターネット使用量を見れば、上司もきっと喜ぶはずです。

運用における「血の教訓」

長年の管理経験から、システムが突然「ダウン」しないようにするための注意点をいくつか挙げます。

  • ディスクをいっぱいにしない: ディスク使用率が100%になると、プロキシがハングアップし、クライアントマシンが何もインストールできなくなります。容量の80%でアラートが出るように設定しておきましょう。
  • 自動更新: プロキシパッケージ自体もSnap経由で自動更新されます。時々 status コマンドを実行して、すべてのサービスがActive状態であることを確認してください。
  • ファイアウォールのセキュリティ: 常にUFWを使用して、未知のIPをブロックしてください。意図しない帯域幅の利用を防ぐため、プロキシのポート80/443へのアクセスは内部IPレンジのみに許可するようにします。

Snap Store Proxyの設定は、最初の登録ステップで少し手間がかかるかもしれませんが、長期的なメリットは非常に大きいです。Ubuntuインフラを完全に制御し、回線コストを節約し、ソフトウェアのデプロイ速度を向上させることができます。10台以上のUbuntuマシンを管理しているなら、今すぐ導入すべきです!

Share: