Metaが大規模にLinuxへパッチを適用する方法
(thenewstack.io)- Linuxサーバーへのパッチ適用は簡単だが、数万台のサーバーにダウンタイムなしでパッチを当てるのは容易ではない
- Metaは数百万台のLinuxサーバーにパッチを適用するために、Red HatのKpatchとKLP(Kernel Live Patching)を利用している
- KLPは再起動せずにLinuxカーネルへ最新のセキュリティアップデートを適用できる
ライブカーネルパッチ
- ライブカーネルパッチは、メインのカーネルパッケージとは別に、修正済みコードを含むパッケージとして提供される
- ライブパッチは累積型で、最新パッチには以前のすべての修正が含まれる
- ライブパッチはあらゆるものに適用できるわけではなく、データや構造はパッチできず、ライブパッチ作成には追加のエンジニアリング作業が必要になる
Kpatch
- Kpatchは、元のカーネルとパッチ適用後のカーネルを比較し、カスタムカーネルモジュールを使って実行中のカーネルに新しいコードをパッチする仕組みで動作する
- その後、Kpatchプロセスはftraceを使って既存プロセスのスタックを監視し、有害な影響なしにパッチを適用できるかどうかを確認する
- 安全だと判断されれば、実行中のコードをパッチ済み関数へリダイレクトし、その後古いコードを削除する
- これでサーバーにパッチが適用され、ダウンタイムは発生しない
Meta の場合
- もちろん、実際にはそれほど単純ではない
- Metaではライブパッチ適用時、通常ホストにパッチを当てるのに1〜2秒かかる
- 1台のホストに対する1〜2秒という時間は、新しいカーネルを起動するLinuxカーネルの仕組みであるkexecと比べると非常に高速だ
- ダウンタイムやワークロードの移行は不要で、ライブパッチを適用するだけですぐ利用できる
数百万台のマシンにパッチを適用する方法
- 数百万台のマシンにパッチを適用する場合、これだけでは済まない
- Metaでは、パッチのロールアウト中にバグが見つかる可能性があるため、管理者はまずリリース候補ティアからパッチを適用する
- RPMベースのパッチを配布するパッケージローラーは、サーバーの健全性も自動で確認する
- Metaは新しいカーネルでのクラッシュ、重大アラート、アプリケーションの問題、性能を監視しており、エラー率がサーバー1000台あたりクラッシュ1件を超えると、パッチは中止されて以前のカーネルへ戻される
- MetaはKpatchを使用しているが、他にも代替手段がある
- SUSEはkGraftを提供し、OracleはKspliceを使用し、CanonicalはLivepatchをサポートしている
- コードベースに関係なく、いずれもおおむね同様の結果を提供する
GN⁺の見解
この記事で最も重要なのは、Metaが世界中の数百万台のサーバーに対して、ダウンタイムのない効率的なパッチ手法を適用している点です。これは初級ソフトウェアエンジニアにとっても興味深いテーマであり、Linuxシステムの保守とセキュリティの重要性を強調しています。また、この記事はライブパッチ技術の複雑さと必要性を理解する助けにもなります。
1件のコメント
Hacker Newsの意見