Equinixのベアメタルサービスの中核となるTinkerbellの概要を紹介
Tinkerbellは、ベアメタルのマシンにOSを実装するためにマイクロサービスを組み合わせて実装したオープンソースソフトウェアだ。元はベアメタル向けのソリューションを開発していたベンチャーのPacketが開発していたベアメタル向けのソフトウェアだった。2020年3月にEquinixがPacketを買収したことで、現在はベアメタルマシンを使ったサービスとしてEquinixのサービスメニューの一つとなっている。
Tinkerbellは元のソフトウェアからPacketに特化したコードを取り除き、どのインフラストラクチャーでも実装可能なように仕立て上げたオープンソースソフトウェアであり、開発は今もEquinixに所属している元Packetのエンジニアが継続しているという。
TinkerbellはCNCFのサンドボックスプロジェクトとしてVirtual Kubelet、Chaos Mesh、Keda、OpenTelemetryになどとともにホストされており、今後のコミュニティの活動拡大やソフトウェアの進化が期待されているプロジェクトと言えるだろう。
参考:Sandbox projects | Cloud Native Computing Foundation
今回はTinkerbellの概要を「Tinkerbell 101」という動画をベースに紹介する。
またこの動画とは別に「Intro to Tinkerbell」という動画も存在している。こちらは、Vagrantを使いながらTinkerbellの導入操作を紹介するものになっており、Tinkerbellそのものの解説であれば、前述のTinkerbell 101が最適だろう。
動画:www.youtube.com/watch?v=Y04eCSKaQCc
そもそもベアメタルとは?
Tinkerbellはシステムのインフラストラクチャーとなるサーバーの実装を、複数のマイクロサービスを組み合わせて実現するソフトウェアで、Goで書かれている。
この動画のタイトルにある「101」は、アメリカの大学の学部で最初に受講する入門科目の番号である「101」を模した形になっており、このセッションがTinkerbellそのものの入門となっていることを示している。
セッションの最初のトピックは「そもそもベアメタルとは何か?」である。
ここではジョークとして、熊がヘビーメタルを演奏しているスライドを使ってアイスブレークしようとしているのがわかる。
ベアメタルは仮想化基盤などを搭載しない物理サーバーを指し、それを使う理由として、「高いパフォーマンス」「柔軟であること」「ライセンスが不要なこと」などを挙げて説明を行った。
仮想化されたサーバーは、多少のオーバーヘッドを許容しても一つのハードウェア上で複数の仮想サーバーを動作させ、その上で多くのアプリケーションを稼働させることでフルにサーバーを使うという発想になる。一方より高い性能を要求するシステムを実現するためには、ベアメタルを用いてハードウェアの持つ性能を100%目的のアプリケーションに専有させることが必要になる。
ベアメタルのデプロイ
ここまではどうしてベアメタルが必要か?を解説するフェーズだったが、ここから実際にベアメタルをデプロイする方法の解説が始まった。
ここでは過去を振り返るという意味で、PCにWindows 95をインストールする際に大量のフロッピーディスクを使っていたことを紹介したのち、その後はネットワークを経由したインストール方法に移行したことを語った。フロッピーディスクからCDに移行したとしても、BIOSが制御するハードウェアがFDドライブからCDドライブに変わっただけで本質的には変わっていない。しかしネットワークからのOSインストールを可能にした複数の技術が1990年代に登場したことで、ベアメタルの進化が始まったことを解説した。
ここからはベアメタルマシンへのOSインストールをネットワーク経由で可能にした技術としてDHCP、TFTP、PXEを挙げた。DHCPはDynamic Host Configuration Protocol、TFTPはTrivial File Transfer Protocol、PXEはPreboot eXecution Environmentの略だ。PXEはPCのCPUで圧倒的なシェアを持っていたIntelが開発したテクノロジーである。またDHCPとTFTPは、IETFのRFCとして標準化されている。
ここからDHCP、TFTP、PXEを使ったブートまでのフローを解説するフェーズになった。
ここではGIFを使って動画の中で解説されていたPXEブートするベアメタルマシンとDHCPサーバーのやり取り、TFTPを使ったOSイメージの転送を紹介する。ベアメタルマシンがDCHPの拡張機能を使ってIPアドレスを取得して、ファイル転送に至る過程が解説されている。具体的には、DHCP DiscoverからDHCP Offer、DHCP Request、DHCP Ackを経て、DHCPのOptionを使ってPXEブートのファイルイメージがベアメタルマシンに渡されていくというフローだ。
このスライドでは、ベアメタルマシンへのネットワークを介したブートストラップにはカスタマイズされたスクリプトやベンダー固有のパッケージなどが必要となっており、容易ではなかったことが解説されている。
またベアメタルの実装が可能となったとしても、それをコード化し自動化することが困難だったと説明して、Tinkerbellが開発された背景を語った。そしてここからTinkerbellのコンポーネントがどのようにベアメタルマシンをブートしていくのかが解説されるフェーズとなる。
ここからはTinkerbellのコンポーネントがどういう順番で実行されていくのかを解説しているが、最初にTinkerbellのコンポーネントの概略を紹介する。詳細はオフィシャルのドキュメントサイトを参照して欲しい。
参考:Architecture - Tinkerbell Docs
この図にあるようにBootsがベアメタルマシンのブートを担当し、まずOSIE(Operating System Installation Environment)と呼ばれるインメモリーのOSがベアメタルマシンにインストールされる。その後、TinkerbellエンジンがDockerコンテナのタスクをワークフローとして実行することで、ベアメタルマシンにユーザーが必要とするOSがインストールされるという仕組みである。図中のHegelはベアメタルマシンにメタデータを設定するためのコンポーネントだ。
インメモリーOSとして実行されるAlpine LinuxとDockerコンテナ、ハードウェアを定義するYAMLファイル、そしてベアメタルマシンを実装するためのタスクを実行するワークフローエンジンであるTinkerbell(Tink-server、Tink-worker、Tink-CLI)が、ここから仕事をする段になる。
TinkerbellがCNCFのサンドボックスプロジェクトとして採用されたのは、インメモリーOS上でDockerコンテナをワークフローのタスクとして実行するという発想がクラウドネイティブなオペレーションに適合していると評価されたからだろう。ワークフローとして実行されることで、自動化だけではなくエラー処理などもコードとして定義できるというのがTinkerbellの美点と言える。
OSIEのベースとなっているAlpine Linuxも、より省資源化する計画があるということから、単にデータセンターのサーバーのプロビジョニングだけではなく、エッジデバイスもターゲットにしているのだろう。このことは動画の最初に出てくるイラストに、サーバーだけではなくRaspberry Piの絵や製造ラインに設置されているロボットの絵が描かれていることからも想像できる。
また公式サイトではないが、元Packetのエンジニアで今はEquinixで働くGianluca Arbezzano氏のブログにも、Tinkerbellを解説する記事が公開されているので、そちらも参考にして欲しい。Arbezzano氏は、CNCFのアンバサダーとして活動していた経歴を持つイタリア在住のエンジニアである。
Arbezzano氏のブログ:What is Tinkerbell?
Equinixが提供するベアメタルサービスであるEquinix Metalの中核として利用されるTinkerbellの進化に、今後とも注目していきたい。
連載バックナンバー
Think ITメルマガ会員登録受付中
全文検索エンジンによるおすすめ記事
- [実践編] Ubuntu Serverをスケールアウト型サーバーに配備する(前編)
- デスクトップ仮想化を支える技術
- ブレードサーバとLinux
- [実践編] MaaSとJujuによるOSS配備、Ubuntu Serverの運用・管理(前編)
- ベアメタルの今を語り尽くすイベント「第1回OCDETベアメタルWG勉強会」レポート
- IPアドレスを管理する「DHCPサーバ」と通信の橋渡し「NATルータ」
- IPアドレスを管理する「DHCPサーバ」と通信の橋渡し「NATルータ」
- Ironic最新動向:待望のマルチテナント対応が視野に。ストレージや運用自動化も進展
- CNCFのサンドボックスプロジェクト、カオスエンジニアリングのLitmus Chaosを紹介
- [実践編] MaaSとJujuによるOSS配備、Ubuntu Serverの運用・管理(後編)