SUSE は先ごろ、コンテナのための Rancher Desktop 1.0.0 を発表した。デフォルトでは最新の K3S バージョン (執筆時 v1.23.3) が含まれているが、K3S のバージョン選択の機能も提供されている。コンテナランタイムはデフォルトで containerd で、オプションで他に dockerd (moby) もある。
InfoQ は、SUSE のソフトウェアアーキテクトである Matthew Farina 氏に Rancher Desktop 1.0.0 について話を聞いた。
彼は、デスクトップの Kubernetes とコンテナ管理の課題、それが Rancher Desktop の設計と進化にどのように影響したかについて話している。彼はまた、製品の技術的な詳細と、Docker Desktop とのオーバーラップについても補足している。
InfoQ: Rancher Desktop の背景と動機は何でしょうか? 最近の 0.6、0.7 から 1.0.0 への進化について話していただけますか?
Farina 氏: SUSE では、Kubernetes で実行するアプリケーションの開発および準備のためのエクスペリエンスをシンプルかつ簡単にしたいと考えていました。Kubernetes をローカルで実行する現在の状況を最初に調べたとき2つの課題を見つけました。まず、Kubernetes のさまざまなバージョンがプロダクションで使用されています。Kubernetes それぞれのマイナーリリースの変更により、使用するバージョンは重要です。次に、Kubernetes をローカルで実行するためには、知識が少し必要です。アプリケーションに集中している人は、ローカルでの Kubernetes の実行について学ぶ時間がないことがほとんどです。Kubernetes の実行のための時間を多く費やすと、アプリケーションの時間が無駄になり、速度が低下します。Go と UTF-8 の作成者の1人 Rob Pike 氏は、「単純性は複雑さを隠す技術です」とかつて述べました。私たちが作りたかったデスクトップアプリは、Kubernetes の実行の複雑さを隠し、Kubernetes を構成するためのコントロールをより見つけやすくすることで、実行のエクスペリエンスをシンプルにしたものです。
Kubernetes を構成するためのコントロールをより見つけやすくすることが、グラフィカルユーザインターフェイスを開発するきっかけになりました。GUI でオプションを見つけることは、コマンドラインよりも簡単です。
複数バージョンの処理は、プロダクションで実行しているような同じバージョンの Kubernetes をローカルで実行できるようにするよりも複雑です。これは、マイナーリリース間での Kubernetes の変更方法に原因であり、アップグレード中の Kubernetes をアプリケーションがどのように処理するかのテストに便利です。Kubernetes のアップグレードによってアプリケーションが不安定になったり、動作を停止したりしたときの問題で、私は個人的に実行していました。Rancher Desktop に組み込まれた側面の1つは、バージョンを新しいバージョンに変更し、ワークロードを維持しながら環境をアップグレードする機能です。これは、アプリケーションがアップグレード中の Kubernetes でどのように処理するかをテストするのに役立ちます。
人々が Rancher Desktop の実行を開始すると、Kubernetes で実行するアプリケーションを準備する際のニーズについて詳しく学びました。それらの1つは、コンテナをレジストリにプッシュしたり、レジストリからプルしたりせずに、コンテナをビルド、実行、および試行する必要があることでした。これらすべてをレジストリなしで Kubernetes で利用できるようにするには、その外部の、コンテナのビルドと実行で Kubernetes が使用しているのと同じコンテナランタイムを使用することが必要です。これにより、より多くのツールを組み込むことになり、containerd のサブプロジェクトである nerdctl になりました。
nerdctl を使用しているときに、nerdctl と Docker CLI の間にはギャップがあることを学びました。nerdctl 開発者は、Docker CLI との間のギャップを埋める素晴らしい仕事をしていますが、まだギャップがあります。そのギャップを埋めるために、Moby プロジェクトから提供された dockerd を Docker CLI とともに使用するオプションを提供しました。ユーザは Rancher Desktop を使用するとき、nerdctl と Docker CLI のどちらかを選択できるようになりました。
成長の2番目の領域は、Rancher Desktop が利用できるプラットフォームです。開始当初は Intel アーキテクチャの macOS でした。そこから、Windows、Linux、そして Apple Silicon のサポートを追加しました。これらの環境にはそれぞれ独自のニュアンスと違いがあります。たとえば、Windows では、Windows Subsystem for Linux を使用します。これにより、Rancher Desktop は、追加のソフトウェアをインストールすることなく、Windows Home ユーザにも Kubernetes を提供できます。
InfoQ: わかりきったことかも知れませんが。これは Docker Desktop とどのような違いがありますか? これは、Rancher Desktop が Docker Desktop に取って代わることを意味していますか?
Farina 氏: Rancher Desktop の開発を開始したとき、私たちの目標は Docker Desktop を置き換える候補を作ることではありませんでした。そうではなく、Kubernetes をローカルで実行するエクスペリエンスの向上に重点を置き、Docker Desktop はアプリケーションのコンテナ化に重点を置いていました。また、Docker はアプリケーションのコンテナ化を優れたものにするために、Docker Desktop の開発に何年も費やしてきました。
イメージのビルド (build)、プッシュ (push)、プル (pull) とコンテナを実行 (run) するコンテナ機能で、Rancher Desktop にアプリ開発者に Kubernetes サポートを追加すると、Rancher Desktop は機能の点で Docker Desktop とオーバーラップし始めました。
InfoQ: 名前にある通り、このツールはデスクトップ専用でしょうか? または、Rancher のマルチクラウドの歴史を考えると、マルチクラウドの Kubernetes のデプロイメントにも役立つのでしょうか?
Farina 氏: Rancher Desktop は、ローカルの Kubernetes とコンテナ管理を提供します。Rancher を補完するように設計されているため、任意のインフラストラクチャの複数の Kubernetes クラスタを管理できます。Rancher Desktop を使用すると、テストとプロダクションクラスタで実行するワークロードとアプリケーションをローカルで開発、準備、そしてテストできます。Rancher Desktop は、Kubernetes で実行するアプリケーションの開発と準備をする人のためのものです。
InfoQ: github リポジトリからは、このツールは主に typescript で書かれています。新しいインフラストラクチャツールの多くは Go で書かれているのになぜ typescript なのでしょうか? 内部の機能の詳細を教えていただけますか?
Farina 氏: 当初から Rancher Desktop をクロスプラットフォームで、シンプルで使いやすいユーザインターフェイスを持つものにしたいと考えていました。クロスプラットフォームのユーザインターフェイスの構築で最も人気のあるオープンソースツールは Electron であり、JavaScript またはそれに変換される言語で記述することができます。
JavaScript は、Rancher Desktop を作った時点での言語でした。時間の経過とともに、型の安全性など、TypeScript が提供するいくつかの利点が必要であることに気付き、移行しました。Electron からは、Go など他の言語で記述されたコードなどのサブプロセスが実行されます。コードのこれらの部分には、仮想マシンからホストへのポート転送 (port forwarding) が機能すること、ホストの nerdctl などのツールが Kubernetes とコンテナランタイムが実行されている仮想マシンと通信できるようにするエージェントなどがあります。次に、Rancher Desktop が構築に使用しているオープンソースプロジェクトがあります。これには、Go で記述された k3s や lima などのプロジェクトがあります。
InfoQ: Rancher Desktop の将来とロードマップはありますか? 補足したいことはありますか?
Farina 氏: SUSE は Rancher Desktop の積極的な開発を継続し、将来の Kubernetes ユーザにユーザインターフェイスの改善など、いくつかのエキサイティングな機能を開発に取り入れます。
トップレベルプロジェクトはプロジェクトの詳細な情報を提供している。ドキュメントには containerd のための Docker 互換 CLI である nerdctl の詳細や使用法などの詳細が記載されている。