Linuxディストリビューションを構築するための商品としてのLinuxKit

Dockerキャプテンジャンルカアルベッツァーノによるゲスト投稿

最近、LastWeekInAWSのCorey Quinnが 、「もう誰もオペレーティングシステムを気にしない」と思わせる記事を書いてくれました。 ぜひご覧ください! 私は誰も彼らのアプリケーションがどこで実行されるかを気にしないという考えが好きです。 開発者はそれらを実行することだけを望んでいます。

リナックスキット

ティンカーベルについてのちょっとした文脈

私は ティンカーベル プロジェクトのメンテナの一人です。 作業を完了するためにコンテナとDockerに大きく依存するベアメタルワークフローエンジン。 それは合理的な質問に対する答えを見つけようとします:ハードウェアの部屋をどのように管理しますか? もっと実際には、どうすればすべてのデータセンターの上にAPIを導入できますか?

コンテナは、他の誰かのハードウェアで再利用可能なコード(アクションと呼ばれる)を実行するときに使用することにした抽象化です。 主な理由は、配布、パッケージング、およびランタイムが解決された問題だからです。 誰もがコンテナを構築、プッシュ、実行する方法を知っています。

このシナリオは、コーリーが強調したストーリーとよく比較できると思います。 オペレーティングシステムは、ほとんどのユースケースで確立されたよく知られた抽象化です。

ベア・メタル・プロビジョニングのための特別なオペレーティング・システム

ベアメタルサーバーのライフサイクルは、次のように要約できます。

  1. SSD、RAMをマウントし、サーバーをラックに収納して、電源とデータをケーブル接続します
  2. BMC がある場合は、サーバーをリモートで起動できます。 それ以外の場合は、電源ボタンを手動で押す必要があります
  3. BIOSは起動可能なデバイス、USB、ディスクを探しますが、ディスクドライバは現在のサーバーに搭載されているものではなく、最新のデータセンターにはUSBスティックで実行されているオペレーターがいないため、起動するものが見つかりません
  4. 通常、何も機能しないときにサーバーが起動しなければならない最後のチャンスは、ネットブートです。 そのための一般的なテクノロジーは PXE (新しいもの)と呼ばれます iPXE.
  5. PXE は DHCP 要求を行います。あなたはそれを最後のSOSとして想像することができます:「何をすべきか教えてください」。
  6. DHCP リッスンがある場合は、レスキュー メッセージで再生して、PXE が実行できるスクリプトを使用して作業を簡略化できます。

通常、スクリプトには、RAM上で実行できるLinuxオペレーティングシステムであるオペレーティングシステムのブート情報が含まれています。 たとえば、 これはあなたができる方法です ネットブートアルパイン.

これで、ハードウェアにはエフェメラル(RAM上)の完全に機能するオペレーティングシステムが搭載されました。 ティンカーベルはそのうちの2つを配布しており、1つはOSIEと呼ばれ、もう1つは フックと呼ばれます。

  • OSIE は、クラウド オファー全体をプロビジョニングするために Equinix Metal が社内で運営しているものです
  • Hook は、Tinkerbell コミュニティが LinuxKit を使って開発した最近のものです

OSIE またはフックは、ハードウェア自体で実行できる操作の電力源であるため、ベア メタル プロビジョニングに不可欠です。 Tinkerbell は Docker デーモンを起動し、一連のアクションをダウンロードして実行します (Docker コンテナーを読み込んだとき)。

アクションはすべて一緒になって、次のようなワークフローを構築します。

  • プロビジョニング:フラッシュしてインストールすると、ディスク上のオペレーティングシステムが終了するため、次の起動では、Ubuntu、CentOS、CoreOS、または必要なものにアクセスできます
  • プロビジョニング解除:ディスクをワイプして、サーバーを次の新しい用途に使用できるようにすることができます

この記事は、LinuxKitを選択する理由についてであり、LinuxKitの使用についてもいつ検討する必要があるかについてのより多くの情報を提供することを願っています。

誰もオペレーティングシステムを気にしませんが、避けることはできません

ベアメタルプロビジョニングに関しては、Tinkerbellについて簡単に読んで想像できるように、ハードウェアのライフサイクルは冷たく、それほど速くないため、すべてのビットが重要です。 サーバーの電源投入時から、ハードウェアがメモリ内オペレーティングシステムを起動するときにDHCP要求を行うまで、最終的に必要なものが実行されるまで、すべてのステップを制御することが重要です。

オペレーティングシステムとLinuxに関しては、ディストリビューションを維持することは大変な作業です。 Tinkerbellのような特定のユースケース専用であっても(Dockerで中継する一時的な実行環境にすぎません)、次のことに注意する必要があります。

  • 互換性:多くのハードウェアデバイス、ドライバー、カーネルモジュール、アーキテクチャがあります
  • サイズ:オペレーティングシステムはRAM上で実行されます、はい、最近はそれほど高価ではありませんが、それでも注意する必要があります
  • ニーズ: Tinkerbellが実行されるすべての環境が同じであるとは想定できません。 たとえば、サーバーにはシリアルコンソールがなく、SSHがトラブルシューティングに適したオプションであるため、メモリ環境の一部としてSSHサーバーを実行するというアイデアを好む人がいます。 または、Consul のようなサービス検出や、Telegraf のような監視のためにエージェントを実行して、可観測性と監視を向上させたいと考えています。 またはセキュリティ上の目的のためのいくつかのスキャナ。

私たちは、すべての人、すべての人のために働くものを作ることはできません。 そのため、Hook では LinuxKit を採用することにしました。

LinuxKit は現在 Linux Foundation の一部であり、当初は Docker for Mac をリリースするために Docker によって開発されました。 コンテナに焦点を当てたLinuxビルダーと考えることができます。

起動時にプログラムを init として、または実行時間の長いサービスとして追加できます。 クールな部分は、すべてがコンテナとして実行され、ビルディングブロックをDockerコンテナとしてパッケージ化して、LinuxKit自体を再利用するニーズに基づいて、エンドユーザーから環境を構築するための明確なパスを残すことです(必要な場合)そして私たちが開発したビルディングブロック。

私が言及しているビルディングブロックの1つは、LinuxKitがドッカーデーモンを起動するために使用するロジックをオーバーライドするDockerコンテナです。 それに沿って、それは私たちがティンクワーカーと呼ぶものも始まります。 次に実行するワークフローを取得する Tink サーバーに連絡するエージェント。 それらをKubernetes用のapiサーバーおよびkubeletと考えることができますが、ポッドを実行する代わりに、tink-workerは次のようなアクションを実行するDockerデーモンに手を差し伸べます。

  • 新しいオペレーティング システムを特定のディスクにストリーミング する
  • ディスクのフォーマット またはパーティションの作成
  • 異なる chrootでコマンドを実行する
  • ただし、すべてのコンテナにすることができ、ワークフローが特定のポイントに達したときにSlackで通知するアクションを実行することもできます

LinuxKit は、マルチアーキテクチャと出力フォーマットのための機能も提供します。 たとえば、ARMのサポートに取り組んでいます。

自分よりも大きな何かの一部であること

LinuxKit には、ドキュメント、サンプル、さらには Slack チャンネルを備えた支援的なコミュニティがあります。 Tinkebellのエンドユーザーは、LinuxKitでディストリビューションを構築することに専念する何百人もの人々とメンテナを利用することができます。 これにより、ティンカーベルを妥当なサイズにスコープを維持する努力が払われます。 最も重要なことに厳格であり続けることができます。 ベア メタルの迅速なプロビジョニング。