【MacOS】M3 Pro芯片MacBook极速搭建Kubernetes

M3 Pro 芯片 MacBook 2023上使用 Colima 安装 Kubernetes。

Colima 轻量、高效,并且在 Apple Silicon 架构上表现出色。

下面是详细的、一步一步的安装和配置指南。


核心思路

我们将通过以下步骤完成整个过程:

  1. 准备工作: 安装必要的工具,主要是 Homebrew。
  2. 安装核心软件 : 使用 Homebrew 安装 Colima, Docker 客户端, 和 kubectl
  3. 启动并配置 Colima: 启动 Colima 虚拟机,并特别指定启用 Kubernetes (K3s)。
  4. 验证安装: 确认 Kubernetes 集群是否正常运行。
  5. 部署示例应用: 部署一个简单的 Nginx 应用来测试整个流程。

第一步:准备工作 (安装 Homebrew)

Homebrew 是 macOS 上最流行的包管理器。如果你的电脑上还没有安装,请先安装它。

打开你的"终端" (Terminal) 应用,粘贴并执行以下命令:

bash 复制代码
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"

安装过程中会提示你输入电脑密码,并按回车键确认。安装完成后,根据终端的提示,将 Homebrew 的路径添加到你的 Shell 配置文件中(通常是 ~/.zshrc)。

第二步:安装 Colima, Docker 和 kubectl

现在,我们使用 Homebrew 来安装所有需要的工具。

  1. 安装 Colima: Colima 是核心,它会创建并管理用于运行容器的虚拟机。
  2. 安装 Docker 客户端 : Colima 在其虚拟机内部运行 Docker 守护进程,我们需要在 macOS 上安装 Docker 客户端来与它交互。注意:这不会安装庞大的 Docker Desktop 应用。
  3. 安装 kubectl: 这是与 Kubernetes 集群交互的命令行工具。

在终端中执行以下命令:

bash 复制代码
brew install colima docker kubectl

等待所有工具安装完成。

第三步:启动 Colima 并启用 Kubernetes

这是最关键的一步。我们将启动 Colima,并告诉它我们需要一个 Kubernetes 集群。Colima 默认会使用轻量级的 K3s 来搭建集群。

对于 M3 Pro 芯片,我们可以分配更多的资源以获得更好的性能。

在终端中执行以下命令:

bash 复制代码
colima start --cpu 4 --memory 8 --arch aarch64 --kubernetes

让我们分解一下这个命令:

  • colima start: 启动 Colima 虚拟机。
  • --cpu 4: 分配 4 个 CPU核心给虚拟机。M3 Pro 性能很强,4-6 核是比较合适的选择。
  • --memory 8: 分配 8 GB 内存给虚拟机。对于运行 Kubernetes 和一些应用,8GB 是一个很好的起点。
  • --arch aarch64: 非常重要! 这个参数明确告诉 Colima 使用 ARM64 架构,这与你的 M3 Pro 芯片原生匹配,可以获得最佳性能。
  • --kubernetes: 核心参数! 这个标志告诉 Colima 在启动时自动安装并配置一个 K3s Kubernetes 集群。

注意: 第一次启动时,Colima 需要下载虚拟机镜像,这个过程可能会花费几分钟,请耐心等待。

启动成功后,Colima 会自动配置 kubectl,使其指向新创建的集群。

第四步:验证安装

现在,让我们来验证一下所有组件是否都正常工作了。

  1. 检查 Colima 状态:

    bash 复制代码
    colima status

    你应该能看到 colima 实例正在运行 (running)。

  2. 检查 Docker 是否连接:

    bash 复制代码
    docker ps

    如果能成功执行并显示一个空的容器列表(表头),说明 Docker 客户端已经正确连接到 Colima 虚拟机中的 Docker 服务。

  3. 检查 Kubernetes 集群状态 :

    这是最重要的验证。

    bash 复制代码
    kubectl cluster-info

    你应该能看到 Kubernetes master 和 CoreDNS 的地址,表明 kubectl 已经成功连接到集群。

  4. 检查 Kubernetes 节点:

    bash 复制代码
    kubectl get nodes

    你应该能看到一个名为 colima 的节点,并且其状态(STATUS)为 Ready

    复制代码
    NAME     STATUS   ROLES                  AGE   VERSION
    colima   Ready    control-plane,master   5m    v1.28.x+k3s1

    (版本号可能会有所不同)

至此,你的 Kubernetes 开发环境已经成功搭建!

第五步:(可选) 部署一个示例应用

为了确保一切都能正常工作,让我们部署一个简单的 Nginx Web 服务器。

  1. 创建 Nginx Deployment :

    这个命令会创建一个 Deployment,并拉取 Nginx 镜像来运行一个 Pod。

    bash 复制代码
    kubectl create deployment nginx --image=nginx
  2. 暴露 Nginx 服务 :

    为了能从你的 Mac 上访问这个 Nginx 服务,我们需要将它暴露出来。我们使用 NodePort 类型来创建一个简单的端口映射。

    bash 复制代码
    kubectl expose deployment nginx --port=80 --type=NodePort
  3. 查找访问端口 :

    执行以下命令查看服务信息,找到映射到你本机的端口。

    bash 复制代码
    kubectl get service nginx

    你会看到类似下面的输出:

    复制代码
    NAME    TYPE       CLUSTER-IP      EXTERNAL-IP   PORT(S)        AGE
    nginx   NodePort   10.43.151.123   <none>        80:31234/TCP   2m

    注意 PORT(S) 这一列,80:31234/TCP 表示集群内部的 80 端口被映射到了节点的 31234 端口。

  4. 访问 Nginx :

    由于 Colima 将虚拟机的端口转发到了你的 Mac 本机 (localhost),你可以直接通过 localhost 和上一步找到的端口(在这个例子中是 31234)来访问。

    打开浏览器,访问 http://localhost:31234,或者在终端中使用 curl:

    bash 复制代码
    curl http://localhost:31234

    如果看到 "Welcome to nginx!" 的 HTML 页面,恭喜你,整个流程都通了!

常用 Colima 命令

  • 停止环境 (会保留虚拟机状态,下次启动快):

    bash 复制代码
    colima stop
  • 再次启动环境 :

    bash 复制代码
    colima start
  • 彻底删除环境 (会删除虚拟机和所有数据,下次需要重新 colima start ...):

    bash 复制代码
    colima delete
  • 查看所有 Colima 实例 :

    bash 复制代码
    colima list

你现在已经拥有一个在 M3 Pro MacBook 上运行的、原生的、高性能的 Kubernetes 本地开发环境了。

解决异常

colima status

FATA[0000] error retrieving current runtime: empty value

--

kubectl get nodes

NAME STATUS ROLES AGE VERSION

colima Ready control-plane,master 6m24s v1.31.2+k3s1

  1. kubectl get nodes 成功了 。这说明你的 Kubernetes (K3s) 集群实际上正在后台正常运行kubectl 工具能够成功连接到它,并获取节点信息。这是个好消息!
  2. colima status 失败了 。错误信息 FATA[0000] error retrieving current runtime: empty value 表明,colima 这个命令行工具本身无法找到或识别它应该管理的那个正在运行的虚拟机。

结论: 你的 Kubernetes 环境是好的,但是管理这个环境的 Colima 工具"失忆了"或它的状态文件损坏了。这就像你的汽车引擎在运转,但你手里的车钥匙失灵了,无法控制汽车。

为什么会发生这种情况?

这通常发生在以下几种情况:

  • Colima 的后台进程被意外终止(例如,强制退出终端或系统异常关机)。
  • Colima 的配置文件 (~/.colima/) 出现了轻微的损坏或不一致。
  • Colima 版本更新后可能出现的罕见 bug。

如何修复?

我们有两种方案,从最简单、最无损的开始。


方案一:尝试重新连接和恢复(首选)

这个方案的目标是让 colima CLI 重新"认识"那个已经在运行的虚拟机,而不需要销毁你的 Kubernetes 集群。

  1. 尝试再次执行 start 命令
    colima start 命令是幂等的(idempotent),意思是如果它发现一个同名的实例已经在运行,它不会重新创建一个,而是会尝试连接到现有的实例并修复上下文。

    在终端里执行:

    bash 复制代码
    colima start
    • 如果成功 :它可能会输出一些信息,然后告诉你实例已经在运行。之后,再试一次 colima status

      bash 复制代码
      colima status

      如果这次能正确显示出 INFO[0000] colima is running 以及 CPU、内存等信息,那么问题就解决了!你的 kubectl 会继续无缝工作。

    • 如果失败colima start 可能还是会报错,或者卡住。如果这样,请继续方案二。


方案二:彻底重置 Colima 环境(保证解决问题)

如果方案一无效,那么最可靠的方法就是彻底删除当前的 Colima 环境并重新创建一个。

警告: 这个操作会删除当前 Kubernetes 集群里部署的所有应用和数据。但由于你刚开始安装,这应该不是问题。

  1. 停止并删除 Colima 实例

    由于 colima status 失效,colima stop 可能也无法工作。我们可以直接用 delete 命令。这个命令更强大,会清理得更干净。

    bash 复制代码
    colima delete

    这个命令会尝试停止并删除虚拟机及其所有相关配置。

  2. (如果上一步失败)手动清理

    如果 colima delete 也因为同样的原因报错,我们就需要手动清理。首先,找到并停止底层的 QEMU 进程。

    bash 复制代码
    # 查找正在运行的 colima qemu 进程
    ps aux | grep 'qemu-system-aarch64.*colima'
    
    # 你会看到一行类似...
    # your_user  12345   0.0  0.0  ... qemu-system-aarch64 ... -name colima ...
    
    # 使用 kill 命令停止它,把 12345 换成你看到的进程ID (PID)
    kill 12345

    然后,彻底删除 Colima 的配置目录:

    bash 复制代码
    rm -rf ~/.colima

    注意: 这个 rm -rf 命令会删除所有 Colima 的配置,请确保你没有其他重要的 Colima 配置文件。

  3. 重新创建环境

    现在,你的系统已经回到了安装 Colima 之前的干净状态。我们只需重新执行最初的启动命令即可。

    bash 复制代码
    colima start --cpu 4 --memory 8 --arch aarch64 --kubernetes

    这将创建一个全新的、健康的环境。等待它完成。

  4. 最后验证

    创建完成后,再次进行验证:

    bash 复制代码
    colima status
    kubectl get nodes

    这一次,两个命令应该都能成功返回正确的信息。

相关推荐
瓜子三百克2 小时前
Mac中M系列芯片采用rbenv管理ruby版本
macos·ruby·rbenv
惊岁晚2 小时前
【实践记录】github仓库的更新
算法·容器·r语言·github
Adorable老犀牛2 小时前
k8s使用 RBAC 鉴权
云原生·容器·kubernetes
KS、zheng2 小时前
【DOCKER】Windows Server 2016 Datacenter离线安装Docker引擎
windows·docker·容器
笑道三千3 小时前
react-native在mac的m2芯片下,pod install安装glog的时候报错
macos
only_Klein4 小时前
K8S部署ELK(一):部署Filebeat日志收集器
elk·容器·kubernetes
Generalzy5 小时前
快速搭建一个非生产k8s环境
云原生·容器·kubernetes
David爱编程6 小时前
Flannel 网络原理及实践指南:Kubernetes 容器通信的第一步
云原生·容器·kubernetes
GawynKing6 小时前
Neo4j 社区版 Mac 安装教程
macos·neo4j
神奇大叔7 小时前
mac 技巧
macos