Ubuntu 20.04 上使用 Minikube 快速搭建单节点 K8s 集群
1. 为什么选择 Minikube 来学习 Kubernetes如果你对容器编排技术 Kubernetes简称 K8s感兴趣想动手实践但又苦于没有多台服务器资源那么 Minikube 绝对是你的“梦中情工具”。我刚开始接触 K8s 的时候也被官方文档里动辄需要三台以上节点的生产级集群搭建方案给劝退了成本高、步骤繁琐对新手极不友好。直到我发现了 Minikube它就像是为学习和本地开发量身定做的“K8s 模拟器”。简单来说Minikube 能在一台机器上无论是你的物理机、虚拟机还是云服务器快速拉起一个功能完整的单节点 Kubernetes 集群。这个集群麻雀虽小五脏俱全包含了 API Server、etcd、Scheduler、Controller Manager 等所有核心控制平面组件以及一个工作节点。你可以在这个集群里部署 Pod、创建 Service、配置 Ingress体验几乎所有的 K8s 核心功能。它的核心技术之一叫做DinDDocker in Docker听起来有点绕其实很好理解。你可以把它想象成一个“俄罗斯套娃”我们主机上运行着 Docker 服务大娃娃Minikube 会在 Docker 里启动一个特殊的容器小娃娃这个容器内部又运行着一个完整的 Docker 守护进程和 K8s 组件。这样K8s 管理的容器实际上运行在这个“内部 Docker”里与主机环境实现了良好的隔离既安全又方便清理。对于咱们国内开发者来说Minikube 还有一个巨大的优势它对国内网络环境非常友好。很多教程会教你配置一堆镜像加速参数但如果你使用从阿里云下载的 Minikube 二进制文件它内部已经集成了针对国内网络的优化会自动从国内镜像源拉取 Kubernetes 组件镜像大大避免了“拉取镜像超时”这个入门路上的经典大坑。接下来我就以 Ubuntu 20.04 这个长期支持版为例手把手带你从零开始用最顺畅的方式把这个单节点 K8s 集群跑起来。2. 搭建前的准备工作确保环境就绪在开始安装 Minikube 之前我们需要确保 Ubuntu 20.04 系统这个“地基”是稳固的。虽然原始文章提到 Docker 安装过程很熟悉就略过了但我发现很多新手恰恰是在这一步踩坑所以我觉得有必要补充一些关键细节和验证步骤让你后面的路走得更顺。首先Docker 是必须的。Minikube 支持多种驱动比如 VirtualBox、KVM 等但docker驱动是目前最轻量、最方便的选择也是官方推荐用于 Linux 系统的。你需要确保安装的不是老旧的docker.io包而是 Docker CE社区版。你可以用以下命令来检查和安装# 1. 更新软件包索引并安装必要工具 sudo apt-get update sudo apt-get install -y apt-transport-https ca-certificates curl software-properties-common # 2. 添加 Docker 的官方 GPG 密钥和稳定版仓库 curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add - sudo add-apt-repository deb [archamd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable # 3. 安装 Docker CE sudo apt-get update sudo apt-get install -y docker-ce docker-ce-cli containerd.io # 4. 启动 Docker 服务并设置开机自启 sudo systemctl start docker sudo systemctl enable docker # 5. 将当前用户加入 docker 组避免每次都要用 sudo操作后需要退出终端重新登录生效 sudo usermod -aG docker $USER安装完成后别急着往下走运行docker version和sudo systemctl status docker确认 Docker 服务正在欢快地运行。然后务必执行一个简单的测试docker run hello-world。如果能看到欢迎信息说明 Docker 安装和运行完全正常。这个步骤能提前排除掉 90% 因 Docker 服务异常导致的后续 Minikube 启动失败问题。其次检查一下系统资源。虽然 Minikube 很轻量但它运行的 K8s 组件还是会消耗一定内存和 CPU。我建议给 Ubuntu 虚拟机至少分配2 核 CPU和4 GB 内存。你可以用free -h和nproc命令查看。资源不足会导致集群启动缓慢甚至失败。最后确保网络通畅能够访问外网以下载必要的二进制文件和镜像。做好这些准备我们就可以请出今天的主角——Minikube 了。3. 安装与启动 Minikube避开第一个大坑安装 Minikube 本身非常简单就是一个下载二进制文件并放到系统路径的过程。但这里有几个关键选择直接影响你后续的体验。原始文章给出了一个具体的阿里云镜像地址这非常好因为它能确保下载速度。不过我建议你养成习惯先去 Minikube 的官方 GitHub Release 页面 看一眼最新稳定版本。虽然 Ubuntu 20.04 很稳定但 Minikube 和 Kubernetes 社区迭代很快新版本通常会修复很多 Bug 并带来性能提升。你可以使用下面的命令来安装。我提供了两种方式第一种是指定版本如原文的 v1.23.1第二种是自动获取最新稳定版。我强烈推荐使用从阿里云镜像下载的方式速度有保障。# 方式一安装特定版本例如 v1.23.1 curl -Lo minikube https://kubernetes.oss-cn-hangzhou.aliyuncs.com/minikube/releases/v1.23.1/minikube-linux-amd64 sudo install minikube /usr/local/bin/ # 方式二安装最新稳定版推荐但请确认版本兼容性 curl -Lo minikube https://kubernetes.oss-cn-hangzhou.aliyuncs.com/minikube/releases/latest/minikube-linux-amd64 sudo install minikube /usr/local/bin/安装完成后用minikube version验证一下。接下来就是激动人心的启动时刻了也是新手遇到的第一个大坑。直接运行minikube start --driverdocker吗且慢如果你当前是root用户你会立刻收到一个错误“不能以 root 执行这条命令”。这是 Minikube 出于安全考虑做的限制。Minikube 强烈建议并且要求在一个普通用户权限下运行。所以正确的操作是切换到一个非 root 用户。如果你一直在用root操作现在需要创建一个普通用户并赋予其 Docker 权限我们在上一步已经将用户加入docker组了。# 如果当前是root切换到你之前配置好的普通用户例如用户名为 ‘ubuntu‘ su - ubuntu # 确认当前用户 whoami # 再次确认该用户在 docker 组内 groups现在在普通用户环境下执行启动命令minikube start --driverdocker当你看到命令行开始滚动日志拉取一个叫kicbase的镜像时就说明启动过程开始了。这里就是DinD 技术起作用的地方Minikube 会先拉取这个基础镜像它里面包含了一个微型的、优化的操作系统和 Docker 环境后续所有的 K8s 组件容器都会在这个“内部 Docker”中运行。这个过程可能会持续几分钟取决于你的网络。由于我们使用了阿里云镜像的 Minikube它会自动从国内源拉取 Kubernetes 的组件镜像如kube-apiserver、etcd等所以你通常不会遇到镜像拉取失败的红色错误信息。4. 深入理解 Minikube 的镜像与配置优化集群启动成功后我们来做一些探索理解一下 Minikube 是如何管理镜像的以及我们能做哪些优化。首先在主机上执行docker images你会发现多了一个名为kicbase/stable:v...的镜像这就是 Minikube 创建的“基地容器”。所有 K8s 系统组件都会以容器的形式运行在这个基地之内。那么Kubernetes 自身的镜像比如kube-apiserver:v1.20.0在哪里呢它们被缓存到了你当前用户的家目录下的一个隐藏文件夹里~/.minikube/cache/images/。你可以用ls -la ~/.minikube/cache/images/查看。这个设计非常贴心下次你创建新的 Minikube 集群或者重启时它就直接使用本地缓存无需重新下载速度飞快。关于镜像加速原始文章提到不需要--image-mirror-countrycn参数这基本正确。但对于某些极端网络情况或者你想指定一个更快的仓库Minikube 提供了更细致的控制。你可以通过--image-repository参数来指定一个完整的镜像仓库前缀。例如如果你知道某个国内仓库同步了 Kubernetes 镜像可以这样启动但这通常不是必须的minikube start --driverdocker --image-repositoryregistry.cn-hangzhou.aliyuncs.com/google_containers另一个非常重要的参数是--kubernetes-version。默认情况下Minikube 会启动一个它认为稳定的 Kubernetes 版本但这个版本可能不是最新的也可能不是你学习目标版本。你可以用这个参数精确指定例如我想用 Kubernetes v1.23.0minikube start --driverdocker --kubernetes-versionv1.23.0在启动过程中Minikube 会去拉取指定版本的镜像。你可以通过minikube status和kubectl version配置好后来确认集群版本。我建议初学者先使用 Minikube 推荐的默认版本等熟悉了再尝试其他版本以避免一些未知的兼容性问题。理解这些镜像和配置的细节能让你在遇到网络问题或版本问题时不再茫然而是能快速定位和解决。5. 驾驭你的集群kubectl 与 Dashboard 实战集群跑起来了我们怎么跟它交互呢最核心的工具就是kubectl它是 Kubernetes 的命令行管理工具。Minikube 非常贴心地内置了一个与集群版本匹配的kubectl。但是你不能直接输入kubectl需要通过 Minikube 来调用格式是minikube kubectl --。例如查看所有命名空间下的 Podminikube kubectl -- get pods -A每次都要打这么长的前缀太麻烦了。所以我们可以设置一个Shell 别名alias这是提升效率的关键一步。打开你的~/.bashrc或~/.zshrc文件在末尾添加一行alias kubectlminikube kubectl --然后执行source ~/.bashrc让配置生效。之后你就可以像使用原生kubectl一样直接输入命令了比如kubectl get nodes,kubectl get ns。现在你的单节点 K8s 集群就完全听你指挥了。除了命令行Minikube 还提供了一个强大的可视化工具Kubernetes Dashboard。它是一个 Web 界面可以让你直观地查看集群资源、部署应用、排查问题。启动它非常简单minikube dashboard这个命令会启动 Dashboard 的 Pod并尝试在你的默认浏览器中打开它。但是根据我的经验特别是在虚拟机环境下自动打开可能会失败或者打开后无法连接。别担心我们有手动访问的方法。执行上述命令后它会输出一个本地的代理地址如http://127.0.0.1:12345/api/v1/...但这个地址通常只能在虚拟机内部访问。为了让宿主机比如你的 Windows 或 Mac 电脑也能访问虚拟机里的 Dashboard我们需要建立一个代理。首先找到你的 Ubuntu 虚拟机的 IP 地址假设是192.168.1.5。然后新开一个终端窗口在虚拟机内执行kubectl proxy --port8000 --address192.168.1.5 --accept-hosts^.* 这个命令让kubectl proxy监听在所有网络接口192.168.1.5的 8000 端口上。现在回到你的宿主机浏览器访问以下地址http://192.168.1.5:8000/api/v1/namespaces/kubernetes-dashboard/services/https:kubernetes-dashboard:/proxy/这样你就能看到华丽的 Kubernetes Dashboard 登录界面了。登录方式可以选择“令牌Token”你可以通过命令kubectl -n kubernetes-dashboard describe secret $(kubectl -n kubernetes-dashboard get secret | grep admin-user | awk {print $1})来获取管理员令牌。通过 Dashboard你可以点点鼠标就能完成很多操作对于理解 K8s 对象之间的关系非常有帮助。6. 多集群管理与日常操作指南Minikube 不仅仅能创建一个集群它支持在单机上运行多个独立的 Kubernetes 集群这对于测试不同版本、不同配置的场景非常有用。这是通过-p或--profile参数给集群起别名来实现的。假设我们已经有一个默认集群名为minikube现在想创建一个使用 Kubernetes v1.22.0 的测试集群minikube start -p my-test-cluster --driverdocker --kubernetes-versionv1.22.0这个命令会创建一个名为my-test-cluster的新集群它拥有独立的配置、缓存和运行时环境。你可以用minikube profile list来查看所有集群及其状态。要操作特定的集群在所有 Minikube 命令中加上-p 集群名即可例如minikube -p my-test-cluster status或者为这个集群的kubectl也设置一个别名。日常开发中你可能会频繁地启动和停止集群以节省资源。停止集群的命令是minikube stop。这会让集群进入休眠状态所有容器停止但配置和磁盘数据都保留着。下次执行minikube start会很快恢复。如果你想彻底删除一个集群及其所有数据包括缓存镜像可以使用minikube delete -p 集群名使用这个命令要谨慎。最后分享几个我常用的、能提升幸福度的命令minikube ip获取 Minikube 集群的 IP 地址当你部署了 NodePort 类型的 Service 时可以通过这个 IP 加端口号从宿主机访问服务。minikube ssh以 SSH 方式登录到 Minikube 的节点虚拟机对于 docker 驱动这会进入kicbase容器内部适合进行一些底层调试。minikube addons list和minikube addons enable ingressMinikube 提供了一系列插件比如 Ingress 控制器、存储类等。你可以用这些命令启用它们来模拟更接近生产的环境。踩过几次坑之后我发现最重要的就是理解 Minikube 的设计哲学它是一个用于本地实验的工具所以不要怕把它“玩坏”。大胆地创建、删除集群尝试不同的配置和版本这才是最快的学习路径。当你对单节点集群的操作烂熟于心后再去理解多节点高可用集群的架构就会感觉轻松很多。希望这篇详细的指南能帮你顺利跨过 K8s 学习的第一个门槛在云原生的世界里玩得开心。

相关新闻

【漏洞挖掘】Goby实战指南:从零构建企业级网络资产安全防线

【漏洞挖掘】Goby实战指南:从零构建企业级网络资产安全防线

1. 为什么你的企业需要一个“网络资产地图”? 想象一下,你是一家公司的安全负责人,某天突然接到通知,说公司某个老旧的后台系统被攻击了。你第一反应是什么?是“我们还有这个系统?”还是“这个系统开在哪个…

2026/7/6 9:07:50 阅读更多 →
从避障到定高:北醒TFmini-i-CAN雷达与ArduPilot飞控的深度集成实践

从避障到定高:北醒TFmini-i-CAN雷达与ArduPilot飞控的深度集成实践

1. 为什么选择TFmini-i-CAN?一个雷达,两种玩法 大家好,我是老张,一个玩了十几年无人机和飞控的“老鸟”。今天想和大家深入聊聊一个特别有意思的硬件组合:北醒的TFmini-i-CAN激光雷达和ArduPilot飞控。你可能在很多教程…

2026/7/3 1:38:11 阅读更多 →
Linux系统安全日志实战:如何从/var/log/secure快速定位异常登录行为

Linux系统安全日志实战:如何从/var/log/secure快速定位异常登录行为

Linux系统安全日志实战:如何从/var/log/secure快速定位异常登录行为 对于任何一位肩负系统安全重任的运维工程师而言,/var/log/secure 日志文件就像一座永不熄灭的灯塔,在浩瀚的数据流中照亮潜在的风险。它不仅仅是记录登录成功与失败的流水账…

2026/7/2 19:14:15 阅读更多 →

最新新闻

Playwright网络请求拦截与模拟实战:从原理到六大应用场景详解

Playwright网络请求拦截与模拟实战:从原理到六大应用场景详解

1. 项目概述与核心价值 如果你正在用 Playwright 做自动化测试或者数据抓取,有没有遇到过这样的场景:测试一个下单流程,但支付接口总是不稳定,导致你的测试脚本动不动就失败;或者你想测试前端页面在网络超时或服务器返…

2026/7/6 9:04:10 阅读更多 →
PyTorch LSTM 多变量多任务预测:3种损失函数加权策略对比与代码实现

PyTorch LSTM 多变量多任务预测:3种损失函数加权策略对比与代码实现

PyTorch LSTM 多变量多任务预测:3种损失函数加权策略对比与代码实现在时间序列预测领域,多任务学习正逐渐成为提升模型性能的关键技术。当我们需要同时预测多个相关变量时,传统的单任务学习方法往往难以捕捉变量间的复杂关系。本文将深入探讨…

2026/7/6 9:04:10 阅读更多 →
Python Selenium自动化校园网登录:从环境搭建到打包部署全攻略

Python Selenium自动化校园网登录:从环境搭建到打包部署全攻略

1. 项目概述与核心价值 校园网登录,尤其是像深澜Srun这类需要跳转认证页面的系统,对于需要长时间保持网络连接的用户来说,是个不大不小的痛点。手动打开浏览器、输入账号密码、点击登录,这套流程每天重复几次,不仅繁琐…

2026/7/6 9:04:10 阅读更多 →
Python自动化破解WIPO六宫格验证码:图像处理与网络请求实战

Python自动化破解WIPO六宫格验证码:图像处理与网络请求实战

1. 项目概述与核心痛点最近在做一个专利数据分析的小工具,需要从世界知识产权组织(WIPO)的专利数据库里批量抓取一些公开数据。本来以为用Python的requests库写个脚本,模拟登录后按部就班爬取就完事了,结果第一步就卡在…

2026/7/6 9:02:09 阅读更多 →
基于MCP协议为AI编程助手集成逆向分析能力:从静态反编译到动态Hook的完整实践

基于MCP协议为AI编程助手集成逆向分析能力:从静态反编译到动态Hook的完整实践

1. 项目概述:当AI编程助手学会“拆解”程序 想象一下,你正在分析一个加密的Android应用,试图找到它的网络通信密钥。传统流程是:打开IDA Pro反汇编引擎库,在十六进制视图中搜索可疑字符串;同时启动Frida&am…

2026/7/6 9:00:06 阅读更多 →
AI模型测试:从确定性断言到统计判定的工程实践

AI模型测试:从确定性断言到统计判定的工程实践

1. 项目概述:当AI的“不确定性”撞上测试的“确定性” 干了这么多年测试,从功能、性能到安全,感觉什么大风大浪都见过了。但最近两年,随着公司业务里AI驱动的功能越来越多,比如智能客服的意图识别、内容平台的个性化推…

2026/7/6 9:00:06 阅读更多 →

日新闻

H2 与 MySQL 单元测试兼容性:5 个关键 SQL 语句差异与规避方案

H2 与 MySQL 单元测试兼容性:5 个关键 SQL 语句差异与规避方案

H2与MySQL单元测试兼容性:5个关键SQL语句差异与规避方案1. 单元测试中的数据库兼容性挑战在Java开发领域,单元测试是保证代码质量的重要环节。当应用涉及数据库操作时,测试环境的搭建往往成为开发者的痛点。H2数据库因其轻量级、内存模式和快…

2026/7/6 0:01:17 阅读更多 →
Windows任务栏终极清理指南:用RBTray一键隐藏窗口到系统托盘

Windows任务栏终极清理指南:用RBTray一键隐藏窗口到系统托盘

Windows任务栏终极清理指南:用RBTray一键隐藏窗口到系统托盘 【免费下载链接】rbtray A fork of RBTray from http://sourceforge.net/p/rbtray/code/. 项目地址: https://gitcode.com/gh_mirrors/rb/rbtray 你是否厌倦了Windows任务栏上密密麻麻的图标&…

2026/7/6 0:01:17 阅读更多 →
Visual C++ 运行时库一键安装终极指南:告别DLL缺失烦恼

Visual C++ 运行时库一键安装终极指南:告别DLL缺失烦恼

Visual C 运行时库一键安装终极指南:告别DLL缺失烦恼 【免费下载链接】vcredist AIO Repack for latest Microsoft Visual C Redistributable Runtimes 项目地址: https://gitcode.com/gh_mirrors/vc/vcredist 你是否曾经遇到过这样的情况:下载了…

2026/7/6 0:05:19 阅读更多 →

周新闻

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容 【免费下载链接】BiliTools A cross-platform bilibili toolbox. 跨平台哔哩哔哩工具箱,支持下载视频、番剧等等各类资源 项目地址: https://gitcode.com/GitHub_Trending/bilit/BiliTools …

2026/7/6 8:11:50 阅读更多 →
威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型的陌生现状在忙碌疲惫的一天里,参与了关于混合后量子密码学的讨论,应付端点攻击找茬的人,还参与留言板讨论后,发现“威胁模型”对多数人仍是陌生概念,且多被当作时髦用语。有趣的相关画作有一幅由 Embyr 创作的…

2026/7/6 8:11:52 阅读更多 →
渗透测试入门指南:从零基础到实战环境搭建

渗透测试入门指南:从零基础到实战环境搭建

1. 从“看热闹”到“入门”:我理解的渗透测试到底是什么?每次看到新闻里说某个大公司的数据被“黑”了,或者某个网站被攻击导致服务瘫痪,你是不是和我一样,心里会冒出两个念头:一是“这黑客真厉害”&#x…

2026/7/6 6:52:56 阅读更多 →

月新闻