Kubernetesをブラウザに移植

原題: I ported Kubernetes to the browser

なぜ重要か

ブラウザでのKubernetesの実行は、開発者教育、インタラクティブな学習、プロトタイピングの新たな可能性を提供し、クラウドネイティブ開発の民主化を推進する。

ngrokのシニア開発者教育担当者Sam Roseが、Kubernetesの一部をTypeScriptでブラウザに移植した「webernetes」をリリースした。2ヶ月で629ファイル、約10万行のコードを生成。ブラウザ内で完全に動作し、ポッドのライフサイクル管理、クラスタDNS、ネットワーク機能など、実際のKubernetesクラスタと同様の機能を実装している。

Sam Roseは先週、ブラウザ内でKubernetesクラスタを実行可能にする部分的なポート版「webernetes」をリリースした。このプロジェクトでは552回のコミットを通じて629ファイルにわたり約10万行のコードを生成し、開発に2ヶ月を要した。

webernetesはブラウザ内で完全に動作し、実際のKubernetesクラスタと同様の多くの機能を実装している。具体的には、ポッドのライフサイクル管理、クラスタDNS、ネットワーク機能、コンテナガベージコレクション、IP割り当て、DeploymentおよびReplicaSetの追跡などが含まれている。インタラクティブなデモでは、3つのノードにまたがるDeployment内の複数のポッド間でHTTPリクエストが送受信される様子を可視化できる。

よく寄せられる質問は「KubernetesをWebAssemblyにコンパイルしたのか」というもので、Roseの答えは「いいえ」である。単純な「Hello World」のGoプログラムをWebAssemblyにコンパイルしただけで約540KiBのサイズになるが、webernetesはgzip圧縮時で約140KiBに収まっている。Kubernetes全体をWebAssemblyにコンパイルするとメガバイト単位のサイズになる可能性があり、さらにKubernetesはブラウザで利用不可能なシステムレベルのAPIを呼び出すため、コンパイル時エラーが発生する。

webernetesの実装は、Kubernetesの「kubelet」バイナリの部分的なポート、ポッドスケジューラーやnamespaceコントローラー、kube-proxy、deploymentコントローラーなど複数のコントローラーの移植、ブラウザベースのコンテナネットワークインターフェース(CNI)、そしてブラウザベースのコンテナランタイムで構成されている。

サイズを最小限に保つため、webernetesはDocker Hubなどのレジストリから実際のイメージをプルしない。代わりに、ブラウザベースの独自レジストリを持ち、イメージはTypeScript APIを使用して定義される。

出典

ngrok.com — 元記事を読む →