Рабочий процесс для Mac
Кластер Kubernetes на ноутбуке — копия того, что на деле работает в другом месте. Для многих задач с платформой и приложениями эта копия не нужна: нужна быстрая обратная связь по самому контейнеру и его сервисам, а также терминал с доступом к реальному кластеру. На Mac с Apple silicon это делится на четыре задачи.
| Задача | Инструмент | В Oxcart |
|---|---|---|
| Просмотр и управление кластерами | kubectl, k9s | Нативные инструменты Mac; подключение к любому контексту kubeconfig |
| Сборка образов для кластера | docker buildx build | Сборка образов amd64 и arm64 вместе |
| Запуск приложения и зависимостей | docker compose | Запускайте стек с проверками состояния, up --wait и опубликованными портами |
| Проверка манифестов на API-сервере | kwok | Проверяйте манифесты на реальной плоскости управления с имитацией узлов и подов |
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, чтобы исключить случайный доступ к production.
Сборка образов для кластера
Большинство кластеров используют узлы amd64, а ваш Mac — arm64. Buildx в Oxcart собирает оба варианта из одного 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 Передавайте --platform linux/amd64 при запуске локально собранного образа только для 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; команда завершается только после готовности всех сервисов. Полный пример — в Docker Compose на Apple silicon. Контейнеры запускаются достаточно быстро, чтобы удалять их между тестами: 42 ms для docker run --rm и 77 ms для остановки и удаления 20 контейнеров.
Настоящий Kubernetes API на Mac с kwok
kwok (Kubernetes WithOut Kubelet) запускает настоящие компоненты плоскости управления в контейнерах и имитирует узлы и поды. В Oxcart kwokctl поднял etcd, kube-apiserver, kube-scheduler и kube-controller-manager (v1.36.1) примерно за 15 секунд, включая скачивание образов, и kubectl с k9s на Mac подключились к нему.
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, корректной работы контроллера или оператора с API, а также для изучения k9s без доступа к общему кластеру. Контейнеры из Deployment на самом деле не запускаются: поды — записи в API-сервере, которые kwok помечает как Running.
Выберите, где будет работать кластер
Сохраняйте быстрый цикл обратной связи на Mac и используйте кластер, подходящий команде. Общий кластер разработки даёт всем одинаковые контроллеры, политики и облачные интеграции. Локальный кластер полезен, когда нужны настоящие поды без подключения к этой среде.
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 для сборки образов, локального запуска приложения с зависимостями и проверки манифестов на локальном API-сервере kwok. Привилегированные контейнеры входят в платформу. Для общего или облачного кластера используйте kubectl и k9s на Mac; Oxcart не включает кластер Kubernetes.
Есть ли локальный Kubernetes API для Oxcart?
Да. kwok запускает настоящую плоскость управления Kubernetes (etcd, kube-apiserver, kube-scheduler и kube-controller-manager, v1.36 в нашем тесте) в контейнерах Oxcart, к ней подключаются kubectl и k9s на Mac. Узлы и поды имитируются, поэтому это инструмент для проверки манифестов, RBAC и поведения API, а не для запуска контейнеров приложения.
Работают ли kubectl и k9s на Mac с Apple silicon?
Да. Оба — нативные инструменты командной строки macOS. Они используют kubeconfig и работают с любым указанным в нём кластером: EKS, AKS, GKE, рабочим кластером или локальным API-сервером. k9s документирует установку через Homebrew и MacPorts.
Как собирать образы для кластера Kubernetes amd64 на Mac с Apple silicon?
Используйте Buildx с --platform linux/amd64 или --platform linux/amd64,linux/arm64 для обеих платформ. В Oxcart мультиплатформенная сборка проходит на сборщике по умолчанию, обе архитектуры запускаются локально. Отправка мультиплатформенного образа из Oxcart не поддерживается: отправляйте отдельный тег для каждой платформы или публикуйте мультиархитектурный манифест через CI.
Где можно запустить полноценный локальный кластер Kubernetes на Mac?
Ряд контейнерных приложений для Mac включает одноузловой кластер. Они рассмотрены со ссылками на источники на странице сравнений. Многие команды вместо этого используют общий или облачный кластер, локально запуская только зависимости приложения; именно этот процесс описан в руководстве.
Нужен ли k9s сервер метрик?
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, медианы пяти замеров; остальные среды измерены ранее в тот же день на том же Mac и тем же набором тестов с клиентом docker 29.4.