适合 Mac 的工作流程
笔记本上的 Kubernetes 集群,往往是实际运行在别处的环境的一份副本。对许多平台和应用开发工作而言,你并不需要这份副本,而是需要对容器本身及其依赖服务获得快速反馈,同时用终端连接真实集群。在 Apple 芯片 Mac 上,这可以分成四项工作。
| 工作 | 工具 | 在 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,是我们测试的三个运行时中最快的。docker login 会将镜像仓库密码保存在 macOS 钥匙串中。
使用 Compose 运行应用依赖
正在修改的服务与远程集群通信时,它的数据库、缓存和队列可以运行在 Mac 上。在 compose.yaml 中配置健康检查和 depends_on: condition: service_healthy,通过 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 时,k9s 会记录警告,并将 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,取五次采样的中位数;其他运行时于同一天较早时段,在同一台 Mac 上使用相同测量工具及 docker 29.4 客户端测量。