“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マシンを管理しているなら、今すぐ導入すべきです!

