注目イベント!
アドベントカレンダー2024開催します(12/1~12/25)!
一年を締めくくる特別なイベント、アドベントカレンダーを今年も開催します!
初心者からベテランまで楽しめる内容で、毎日新しい技術トピックをお届けします。
詳細はこちらから!
event banner

OrbStack 1.0 付属の Kubernetes を試す

| 5 min read
Author: masahiro-kondo masahiro-kondoの画像

OrbStack 1.0 リリース

#

6月の記事「OrbStack - macOS 専用の高速軽量なコンテナ & Linux VM 環境」で紹介した OrbStack ですが、1.0 がリリースされました。

OrbStack 1.0: Fast, light, easy way to run Docker containers and Linux

Information

価格も判明しました。

Pricing · OrbStack

商用利用可能な Pro は月10ドル(年払いは月8ドル)と Docker Desktop の Pro 月7ドル(年払いは月5ドル)より高いですが、Docker Desktop にはさらに Team や Business など上位グレードがあり、Team が月11ドル(年払いは月9ドル)なので、ターゲットはこちらかもしれません。

非商用の個人利用に限り無償で利用できす。

上記のアナウンスブログを見ると Kubernetes も使えるようになっています。筆者は、ベータ版を更新し続けて使っていましたが、この機能追加には気づいておらず、別途 Kind を起動して使っていました。

Information

ベータが始まった時点では Kubernetes は「近い将来サポート予定」となっていました。8月末の v0.17.0 でリリースされ、改善が続いていました。

What's new · OrbStack Docs

Kubernetes を有効化する

#

さっそく Kubernetes 機能を確認していきます。

Service タブで Turn On をクリックします。

Turn on

クラスター構築が開始されます。

Creating cluster

1分もかからずクラスター構築が完了しました。

Cluster created

クラスター情報をプリントしてみました。正常に起動しています。

$ kubectl cluster-info
Kubernetes control plane is running at https://127.0.0.1:26443
CoreDNS is running at https://127.0.0.1:26443/api/v1/namespaces/kube-system/services/kube-dns:dns/proxy

To further debug and diagnose cluster problems, use 'kubectl cluster-info dump'.

OrbStack の Kubernetes サポート

#

公式ドキュメントで Kubernetes サポートを確認してみます。

Kubernetes · OrbStack Docs

OrbStack に組み込まれた Kubernetes は軽量なシングルノードのクラスターであり、GUI が提供され、ホスト OS のネットワークとの統合が実現されています。

OrbStack の Docker エンジンを利用しており、ローカルでビルドしたイメージをそのまま Pod として起動できます。

Information

これは Docker Desktop でも同様です。Kind を使う場合、コンテナイメージを kind load docker-image でクラスターにロードする必要があったのでここは楽になりました。

NGINX をデプロイしてみます。

$ kubectl create deployment nginx --image nginx
deployment.apps/nginx created

Pod の一覧が UI で確認できます。インフォメーションのアイコンをクリックすると、Status などが確認できます。

Pods tab

Logs ボタンをクリックすると Pod のログが確認できます。

Logs

Terminal ボタンをクリックすると Pod にログインできます。

Terminal

UI でも表示されていましたが、Pod IP を確認します。

$ kubectl get po -o wide
NAME                     READY   STATUS    RESTARTS   AGE     IP              NODE       NOMINATED NODE   READINESS GATES
nginx-77b4fdf86c-5ljw2   1/1     Running   0          9m48s   192.168.194.6   orbstack   <none>           <none>

macOS のターミナルから Pod IP を叩いてみます。

$ curl -I 192.168.194.6
HTTP/1.1 200 OK
Server: nginx/1.25.2
Date: Mon, 25 Sep 2023 06:39:29 GMT
Content-Type: text/html
Content-Length: 615
Last-Modified: Tue, 15 Aug 2023 17:03:04 GMT
Connection: keep-alive
ETag: "64dbafc8-267"
Accept-Ranges: bytes

レスポンスが帰ってきました。Pod IP がホストネットワークに統合されておりダイレクトにアクセスできます。

NodePort を指定してサービスを公開します。

$ kubectl expose pod nginx-77b4fdf86c-5ljw2 --type=NodePort --port=80
service/nginx-77b4fdf86c-5ljw2 exposed

Services タブに表示されました。

Services tab

NodePort は localhost:PORT でアクセスできます。

$ curl -I localhost:32445
HTTP/1.1 200 OK
Server: nginx/1.25.2
Date: Mon, 25 Sep 2023 07:04:29 GMT
Content-Type: text/html
Content-Length: 615
Last-Modified: Tue, 15 Aug 2023 17:03:04 GMT
Connection: keep-alive
ETag: "64dbafc8-267"
Accept-Ranges: bytes

UI でも表示されていましたが、ClusterIP を確認します。

$ kubectl get svc nginx-77b4fdf86c-5ljw2
NAME                     TYPE       CLUSTER-IP        EXTERNAL-IP   PORT(S)        AGE
nginx-77b4fdf86c-5ljw2   NodePort   192.168.194.177   <none>        80:32445/TCP   9m5s

ClusterIP もホストマシンから直接アクセスできます。

$ curl -I 192.168.194.177
HTTP/1.1 200 OK
Server: nginx/1.25.2
Date: Mon, 25 Sep 2023 07:06:03 GMT
Content-Type: text/html
Content-Length: 615
Last-Modified: Tue, 15 Aug 2023 17:03:04 GMT
Connection: keep-alive
ETag: "64dbafc8-267"
Accept-Ranges: bytes

ポートフォワーディングは不要です。OrbStack では開発体験を重視して Kubernetes の IP をホストネットワークに統合しています。

Information

OrbStack の Kubernetes クラスターにデプロイした NodePorts や LoadBalancer はローカルホストからのみ利用可能ですが、LAN に公開するオプションの提供も予定されているようです。

Kubernetes クラスターは UI だけでなく orb CLI で開始、停止、再開、削除ができます。

# Start
orb start k8s
# Stop
orb stop k8s
# Restart
orb restart k8s
# Delete
orb delete k8s

削除後 Start すると Kubernetes クラスターが新規に構築されます。

最後に

#

Apple Silicon の Mac では Hyperkit がないため軽量な Minikube が使えず[1]、Docker Desktop を選択せざるを得ない状況がありました。その状況が OrbStack の登場により変わりました。コンテナを利用する開発も捗るようになっていくと思います。シンプルですが Pod や Service 用の UI も提供されており、CLI を叩かなくても状態を把握できるのも開発体験という意味ではメリットがあると思います。

OrbStack はクローズドソースであり、透明性やコミュニティによる貢献などの観点で懸念の声もあるようです。

⭐️ Open Source Code Request 🤩 · Issue #359 · orbstack/orbstack

しかし OrbStack は開発環境であり、Docker Desktop もクローズドソースであること、macOS のような商用ベースの OS に特化したソフトウェアであることから、OSS でないこと自体はさほど採用の障壁にはならないと考えます[2]

Information

OrbStack を構成するすべてのソフトウェアがクローズというわけではなく、OrbStack 用に修正された Linux kernel などは OSS 化されています。

GitHub - orbstack/linux-macvirt: Modified Linux kernel for OrbStack (one of the core components) — to request the latest version, email oss@orbstack.dev


  1. もちろん Docker ドライバーを利用すれば動かすことはできますが、Docker Desktop などが別途必要になりオーバーヘッドが大きいのが課題でした。QEMU ドライバーサポートの開発が続いていますが、難航している模様です(こちらの記事で紹介しています)。 ↩︎

  2. issue もそのようなコメントで閉じられていました。 ↩︎

豆蔵では共に高め合う仲間を募集しています!

recruit

具体的な採用情報はこちらからご覧いただけます。