【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) 应用,粘贴并执行以下命令:

/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 集群交互的命令行工具。

在终端中执行以下命令:

brew install colima docker kubectl

等待所有工具安装完成。

第三步:启动 Colima 并启用 Kubernetes

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

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

在终端中执行以下命令:

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 状态:

    colima status
    

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

  2. 检查 Docker 是否连接:

    docker ps
    

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

  3. 检查 Kubernetes 集群状态:
    这是最重要的验证。

    kubectl cluster-info
    

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

  4. 检查 Kubernetes 节点:

    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。

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

    kubectl expose deployment nginx --port=80 --type=NodePort
    
  3. 查找访问端口:
    执行以下命令查看服务信息,找到映射到你本机的端口。

    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:

    curl http://localhost:31234
    

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

常用 Colima 命令

  • 停止环境 (会保留虚拟机状态,下次启动快):
    colima stop
    
  • 再次启动环境:
    colima start
    
  • 彻底删除环境 (会删除虚拟机和所有数据,下次需要重新 colima start ...):
    colima delete
    
  • 查看所有 Colima 实例:
    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),意思是如果它发现一个同名的实例已经在运行,它不会重新创建一个,而是会尝试连接到现有的实例并修复上下文。

    在终端里执行:

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

      colima status
      

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

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


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

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

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

  1. 停止并删除 Colima 实例
    由于 colima status 失效,colima stop 可能也无法工作。我们可以直接用 delete 命令。这个命令更强大,会清理得更干净。

    colima delete
    

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

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

    # 查找正在运行的 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 的配置目录:

    rm -rf ~/.colima
    

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

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

    colima start --cpu 4 --memory 8 --arch aarch64 --kubernetes
    

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

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

    colima status
    kubectl get nodes
    

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/diannao/87559.shtml
繁体地址,请注明出处:http://hk.pswp.cn/diannao/87559.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

import { Add, Dongdong, UserAdd } from ‘@nutui/icons-react‘ 使用图标导入库报错

import { Add } from "nutui/icons-react-taro"; 官网的导入的库名字不全&#xff0c;后面要加-taro&#xff0c;就行了

猿人学js逆向比赛第一届第七题

分析响应 看到响应体里面的data是个字体加密&#xff0c;于是这里可以看到woff文件也给返回了&#xff0c;这里现分析这个文件。 打开可以看到这里a351对应的是3和页面中的3是对应的&#xff0c;于是用ddddocr动态识别字体文件中的字体&#xff0c;然后对应对应的字体替换是不…

股票心理学习篇:交易的人性弱点 - 频繁交易

以下内容为学习时的笔记整理&#xff0c;视频作者来自B站&#xff1a;老猫与指标 视频链接&#xff1a;频繁交易必死&#xff1f;底层逻辑深度剖析&#xff0c;老猫的的破局心法与实战策略分享 交易的人性弱点 - 频繁交易 主讲人&#xff1a; 老猫 1. 引言&#xff1a;问题的…

WPF入门 #1 WPF布局基础、WPF样式基础、WPF数据模板、WPF绑定

WPF当中有许多的布局容器控件&#xff0c;例如<Grid>、<StackPanel>、<WrapPanel>、<DockPanel>、<UniformGrid>。接下来分别介绍一下各个布局容器控件。 布局基础 Grid <Grid><Grid.RowDefinitions><RowDefinition Height&qu…

开源大型语言模型的文本记忆新突破!

在现代科技的推动下&#xff0c;人工智能领域正在不断地突破人类认知的极限。今年&#xff0c;由斯坦福大学、康奈尔大学和西弗吉尼亚大学的计算机科学家们&#xff0c;与法律学者共同展开了一项引人入胜的研究&#xff0c;聚焦于开源大型语言模型的文本记忆表现。这项研究不仅…

LeetCode 3090.每个字符最多出现两次的最长子字符串

题目链接 https://leetcode.cn/problems/maximum-length-substring-with-two-occurrences/ 题目描述 给定一个字符串 s&#xff0c;找出满足每个字符最多出现两次的最长子字符串&#xff0c;并返回其长度。 示例 输入&#xff1a;s "aabba" 输出&#xff1a;5解…

使用开源NVIDIA cuOpt加速决策优化

使用开源NVIDIA cuOpt加速决策优化 文章目录 使用开源NVIDIA cuOpt加速决策优化决策优化的现实挑战供应链优化的复杂性实时决策的挑战计算复杂性的挑战 NVIDIA cuOpt&#xff1a;GPU加速的决策优化解决方案cuOpt的核心技术架构支持的优化问题类型性能优势分析 实际应用案例&…

【JVM 09-垃圾回收】

垃圾回收 笔记记录 1. 如何判断对象可以回收1.1 引用计数法1.1.1 缺点 1.2 可达性分析算法1.2.1 可达分析、根对象1.2.2 优缺点 1.3 四种引用(强软弱虚)1.3.1 软引用的实际使用案例1.3.2 软引用-引用队列1.3.3 弱引用的实际使用案例 2. 垃圾回收算法2.1 标记清除算法2.2 标记整…

《二叉搜索树》

引言&#xff1a; 上次我们结束了类和对象的收尾&#xff0c;之后我们就要学习一些高级的数据结构&#xff0c;今天我们先来看一个数据结构-- 二叉搜索树。 一&#xff1a; 二叉搜索树的概念(性质) 二叉搜索树又称二叉排序树&#xff0c;它或者是一棵空树&#xff0c;或者是…

【Redis】Sentinel哨兵

&#x1f6e1;️ 深入理解 Redis Sentinel&#xff1a;高可用架构的守护者 在实际开发中&#xff0c;我们常用 Redis 构建缓存系统或数据中间件。然而&#xff0c;主从复制虽然能实现数据同步&#xff0c;但无法自动故障转移&#xff08;failover&#xff09;&#xff0c;这就…

Shell脚本应用及实战演练

文章目录 一、Shell脚本语言的基本结构1、Shell脚本的用途&#xff1a;2、 Shell脚本基本结构&#xff1a;3、 创建Shell脚本过程4、 脚本注释规范 二、Shell脚本语言的变量用法详解位置与预定义变量 三、 Shell字符串详解1、Shell字符串拼接2、Shell字符串截取3、 Shell的格式…

软件工程瀑布模型学习指南

软件工程瀑布模型学习指南 一、瀑布模型核心概念 1.1 定义与特点 瀑布模型是一种经典的软件开发流程,将项目划分为顺序性的阶段,每个阶段有明确的输入和输出,如同瀑布流水般单向推进。其特点包括: 阶段间具有明确的顺序性和依赖性强调文档驱动和阶段评审适合需求明确、稳…

获取gitlab上项目分支版本(二)

获取gitlab上项目分支版本_gitlab代码分支版本在哪-CSDN博客 原先写过一版&#xff0c;但是这次想更新一下项目的分支信息时&#xff0c;提示我 git服务器上的Python版本是2.7.3&#xff0c;这个错误表明当前Python环境中没有安装requests库&#xff0c;服务器也没有连接外网&…

主流防火墙策略绕过漏洞的修复方案与加固实践

主流防火墙策略绕过漏洞的修复方案与加固实践 流量关键点分析&#xff08;攻击手法&#xff09; 攻击者通过精心构造的TCP序列号攻击和恶意标志组合绕过防火墙DPI检测&#xff0c;核心手法如下&#xff1a; TCP连接建立&#xff08;正常握手&#xff09; 1049&#xff1a;客户…

泛微OAe9-后端二开常见数据库操作

泛微OAe9-后端二开常见数据库操作 文章目录 泛微OAe9-后端二开常见数据库操作一、RecordSet1 RecordSet 操作OA本身的表2 RecordSet 操作OA 本身的存储过程 二、RecordSetTrans三、RecordSetDataSource四、原生 jdbc 一、RecordSet RecordSet 适用于操作 OA 自己的库。OA 数据库…

【数据分析八:hypothesis testing】假设检验

本节我们讲述假设检验和抽样方法 有关假设检验的详细内容&#xff0c;可以参考我以往的博客 概率论与数理统计总复习_概率论与数理统计复习-CSDN博客文章浏览阅读1.5k次&#xff0c;点赞33次&#xff0c;收藏23次。中科大使用的教辅《概率论和数理统计》&#xff0c;带大家复…

AI免费工具:promptpilot、今天学点啥、中英文翻译

promptpilot 激发模型潜能&#xff0c;轻松优化 Prompt https://promptpilot.volcengine.com/startup 今天学点啥 https://metaso.cn/study 能生成网页和语音播报 中英文翻译 沉浸式翻译&#xff0c;浏览器插件&#xff0c;ai翻译

计算机网络学习笔记:TCP三报文握手、四报文挥手

文章目录 前言一、TCP三报文握手二、TCP四报文挥手三、TCP保活计时器 前言 TCP通信&#xff0c;通常需要经历三个阶段&#xff1a;三报文握手->发送&#xff0c;接收数据->四报文挥手。 一、TCP三报文握手 三报文握手处于TCP的连接建立阶段&#xff0c;主要解决了以下的…

kafka部署和基本操作

一、部署kafka 解压 tar xzvf kafka_2.12-3.9.1.tgz tar -zxf kafka_2.12-3.9.1.tgz 1.修改config/server.properties # Licensed to the Apache Software Foundation (ASF) under one or more # contributor license agreements. See the NOTICE file distributed with # …

Bootstrap 5学习教程,从入门到精通,Bootstrap 5 导航语法知识点及案例代码(17)

Bootstrap 5 导航语法知识点及案例代码 Bootstrap 5 提供了强大的导航组件&#xff0c;帮助开发者快速构建响应式且美观的导航栏。 一、Bootstrap 5 导航组件概述 Bootstrap 5 提供了多种导航组件&#xff0c;主要包括&#xff1a; 导航栏&#xff08;Navbar&#xff09;&am…