Macに合ったワークフロー
ノートパソコン上のKubernetesクラスターは、多くの場合、実際には別の場所で動いている環境のコピーです。プラットフォームやアプリの開発では、そのコピーより、コンテナ自体と通信先のサービスから素早くフィードバックを得て、ターミナルで実際のクラスターを開けることが大切な場合があります。Appleシリコン Macでは、これを4つの作業に分けられます。
| 作業 | ツール | Oxcartでの使い方 |
|---|---|---|
| クラスターの確認と操作 | kubectl, k9s | Macネイティブのツール。任意のkubeconfigコンテキストへ接続 |
| クラスター用イメージをビルド | docker buildx build | amd64とarm64のイメージをまとめてビルド |
| アプリと依存サービスを実行 | docker compose | ヘルスチェック、up --wait、公開ポートを使ってスタックを起動 |
| APIサーバーでマニフェストをテスト | kwok | 実際のコントロールプレーンとシミュレーションのノード・Podでマニフェストを確認 |
kubectlとk9sでクラスターに接続
kubectlとk9sは同じkubeconfigを読むため、一方で接続できるクラスターはもう一方でも閲覧できます。クラウドCLIがコンテキストを書き込んでくれます。aws eks update-kubeconfig、az aks get-credentials、gcloud container clusters get-credentialsがそれぞれコンテキストを追加します。
kubectl config get-contexts # every cluster in your kubeconfig
kubectl config use-context my-eks # switch the current context
kubectl get pods -A # works against the current context
k9s # the same context, in a terminal UI
k9s --context my-aks --readonly # another context, read-only k9sのインストールページの説明どおり、HomebrewまたはMacPortsでインストールします。環境ごとにkubeconfigファイルを分け、本番環境に触れたくないときはKUBECONFIG=~/.kube/staging k9sで使用するファイルを指定しましょう。
クラスター用イメージをビルド
多くのクラスターはamd64ノードで動作し、Macはarm64です。OxcartのBuildxはデフォルトビルダーで、同じDockerfileから両方をビルドできます。
docker buildx ls # default builder: linux/amd64, linux/arm64
docker buildx build --platform linux/amd64,linux/arm64 -t myapp:dev .
docker run --rm --platform linux/amd64 myapp:dev # runs through Rosetta
docker run --rm --platform linux/arm64 myapp:dev # runs natively ローカルで自作したamd64専用イメージを実行する際は、--platform linux/amd64を指定してください。デプロイ時はプラットフォームごとにタグをプッシュするか、各ノードに合うイメージを選ぶ複数アーキテクチャのマニフェストをCIで公開します。
docker buildx build --platform linux/amd64 --load -t registry.example.com/myapp:1.4.0-amd64 .
docker push registry.example.com/myapp:1.4.0-amd64 ビルドは高速です。小さなローカルコンテキストでのOxcartの測定値は、キャッシュなしで341 ms、キャッシュありで121 ms。テストした3つのランタイムで最速でした。docker loginはレジストリのパスワードをmacOSのキーチェーンに保存します。
Composeでアプリの依存サービスを実行
変更中のサービスがリモートクラスターと通信していても、データベース、キャッシュ、キューはMacで動かせます。ヘルスチェックとdepends_on: condition: service_healthyを指定したcompose.yamlは、docker compose up -d --waitで起動し、全サービスが正常になるまで戻りません。完全な例はAppleシリコンのDocker Composeをご覧ください。コンテナの起動は、テストのたびに環境を破棄できるほど高速です。docker run --rmは42 ms、20コンテナの停止と削除は77 msでした。
kwokでMac上に実際のKubernetes APIを
kwok(Kubernetes WithOut Kubelet)は実際のコントロールプレーンのコンポーネントをコンテナで起動し、ノードとPodをシミュレートします。Oxcartではkwokctlがetcd、kube-apiserver、kube-scheduler、kube-controller-manager(v1.36.1)を、イメージの取得を含めて約15秒で起動しました。Macのkubectlとk9sからも接続できました。
kwokctl create cluster --name dev --runtime docker
kwokctl scale node --replicas 2 --name dev
kubectl apply -f deploy.yaml
kubectl rollout status deploy/web # "successfully rolled out"
kubectl get pods -o wide # 3/3 Running on simulated nodes
k9s # browse it like any cluster
kwokctl delete cluster --name dev マニフェストを適用できるか、RBACが意図した権限を与えるか、コントローラーやOperatorがAPIと正しく通信するかを確認できます。共有クラスターに触れずにk9sを学ぶのにも使えます。Deploymentのコンテナは実際には動きません。PodはAPIサーバー内のレコードで、kwokがRunningと表示します。
クラスターを動かす場所を選ぶ
Macで素早くフィードバックを得ながら、チームに合うクラスターを使いましょう。共有開発クラスターなら、全員が同じコントローラー、ポリシー、クラウド連携を使えます。その環境に接続できない状態で実際のPodを動かす必要がある場合は、ローカルクラスターが役立ちます。
Oxcartは、Linux内で昇格した権限が必要なワークロード向けに特権コンテナをサポートします。完全なKubernetesクラスターの動作には、クラスターツールのネットワークとランタイム設定も関係します。クラスターを内蔵するデスクトップアプリについてはMacのコンテナアプリ比較をご覧ください。日々のアプリ開発では、上記のCompose、Buildx、kwokのワークフローでローカルの反復を速く進められます。
Macからクラウドクラスターを使う
- EKS:ビルドしてECRへプッシュし、
aws eks update-kubeconfigを実行します。AWS ECS、EKS、Fargate、Lambdaのローカル開発を参照してください。 - AKS:Azure Container Registryへプッシュし、
az aks get-credentialsを実行します。Azure Container AppsとAKSのローカル開発を参照してください。 - GKEとCloud Run:Artifact Registryへプッシュします。Cloud Runには
linux/amd64が必要です。Cloud Runのローカル実行を参照してください。
よくある質問
OxcartはKubernetesのワークフローでどう使いますか?
Oxcartでイメージをビルドし、アプリと依存サービスをローカルで実行し、kwokのローカルAPIサーバーでマニフェストをテストできます。特権コンテナはプラットフォームの標準機能です。共有・クラウドクラスターにはMacのkubectlとk9sから接続します。Oxcart自体にKubernetesクラスターは同梱されていません。
Oxcartで使えるローカルKubernetes APIはありますか?
はい。kwokは実際のKubernetesコントロールプレーン(etcd、kube-apiserver、kube-scheduler、kube-controller-manager。テストではv1.36)をOxcartのコンテナで動かし、Macのkubectlとk9sから接続できます。ノードとPodはシミュレーションなので、マニフェスト、RBAC、API動作のテスト用であり、アプリのコンテナを実行するものではありません。
kubectlとk9sはAppleシリコン Macで動きますか?
はい。どちらもmacOSネイティブのコマンドラインツールです。kubeconfigを使うため、EKS、AKS、GKE、職場のクラスター、ローカルAPIサーバーなど、そこに指定された任意のクラスターに接続できます。k9sのドキュメントにはHomebrewとMacPortsでのインストール方法があります。
Appleシリコン Macでamd64のKubernetesクラスター向けイメージをビルドするには?
Buildxで--platform linux/amd64を指定します。両方なら--platform linux/amd64,linux/arm64を使います。Oxcartのデフォルトビルダーで複数プラットフォームのビルドが完了し、両アーキテクチャをローカル実行できます。Oxcartから複数プラットフォームイメージをプッシュする機能には対応していないため、プラットフォームごとにタグを送るか、CIで複数アーキテクチャのマニフェストを公開してください。
Macで完全なローカルKubernetesクラスターを動かすには?
単一ノードのクラスターを内蔵するMac向けコンテナアプリがいくつかあります。比較ページに出典付きでまとめています。一方、多くのチームは共有・クラウドクラスターを使い、アプリの依存サービスだけをローカルで動かします。このガイドはそのワークフローを扱っています。
k9sにメトリクスサーバーは必要ですか?
なくても接続できます。クラスターにメトリクスAPIがないと警告を記録し、CPUとメモリの列が空になります。kwokのテストでは、その警告とともに「Kubernetes connectivity OK」と表示されました。
出典と測定方法
- ローカルAPIの例:Oxcart 0.1.2、Mac17,14、macOS 27.2、2026-10-10。kwokctl v0.8.0、k9s v0.51.0、kubectl v1.33.9。
- kwok:https://kwok.sigs.k8s.io/。k9s:https://k9scli.io/ および https://k9scli.io/topics/install/。kind:https://kind.sigs.k8s.io/docs/user/known-issues/。k3d:https://k3d.io/stable/。minikubeドライバー:https://minikube.sigs.k8s.io/docs/drivers/。2026-10-10に確認。
- ビルドとコンテナの速度:Oxcart 0.1.2、2026-10-10、Apple M5 Max、8 CPU、12 GiB、5回の測定の中央値。ほかのランタイムは同日のそれ以前に、同じMacと測定環境でdocker 29.4クライアントを使って測定しました。