90DaysOfDevOps 实战:用 Minikube 在本地部署你的第一个 Kubernetes 集群
文档/教程【免费下载链接】90DaysOfDevOpsThis repository started out as a learning in public project for myself and has now become a structured learning map for many in the community. We have 3 years under our belt covering all things DevOps, including Principles, Processes, Tooling and Use Cases surrounding this vast topic.项目地址https://gitcode.com/gh_mirrors/90/90DaysOfDevOps点击查看免费下载本篇文章是 90DaysOfDevOps 系列 Kubernetes 篇章的开篇实战指南对应 2022/ja/Days/day51.md 文档核心目标是在你自己的工作站上通过 minikube 快速拉起一个可用的 Kubernetes 集群并学会用 kubectl 与之交互。读完本文你将掌握为什么选择本地单节点集群而非云托管集群、如何用 arkade 一站式安装 minikube 与 kubectl、如何通过minikube start配合 addons 与自定义参数启动符合自己要求的集群以及一套高频 kubectl 命令速查表——这些能力将作为整个 Kubernetes 系列后续实操多节点集群、应用部署、Ingress、持久化存储等的基线环境。为什么用 Minikube 而不是云托管集群在开始动手之前先回答一个关键问题为什么这篇文章选择 minikube而不是在公有云上开一个托管的 Kubernetes 集群如 EKS、AKS、GKE原因很直接——成本。即使使用各云厂商的免费额度托管集群也仍然可能产生费用而 minikube 完全运行在你的本地机器上零成本、可随时销毁重建非常适合用来做 Kubernetes 概念验证和日常实验。如果你确实希望在公有云上演练托管集群可以回顾本系列前一篇文章 Day 50 中分享的云环境搭建思路。什么是 Minikube定位与前置条件minikube 官方这样定位自己minikube quickly sets up a local Kubernetes cluster on macOS, Linux, and Windows. We proudly focus on helping application developers and new Kubernetes users. minikube 可在 macOS、Linux 和 Windows 上快速搭建本地 Kubernetes 集群专注于帮助应用开发者和 Kubernetes 新用户。即使你不是典型的新用户minikube 也足够轻量好用想用 Kubernetes 的方式验证一个想法、快速部署一个应用试试水它都能胜任并且它附带一批非常实用的 addons后面会专门介绍。前置条件容器或虚拟机管理器无论你的工作站是什么操作系统minikube 都能运行但有一个共同的前置条件——你机器上必须有一个容器或虚拟机管理器例如DockerHyperkitHyper-VKVMParallelsPodmanVirtualBoxVMwareminikube 本身运行在这样一个管理器之上。本系列仓库的默认选择是Docker这也是minikube start时的默认驱动你可以在系统中安装 Docker 作为底座然后继续下面的安装步骤。安装方式用 arkade 一站式装好 minikube 与 kubectl安装 minikube 有多种路径官方提供了按平台区分的安装脚本/包管理器方式本系列作者则更偏爱一种市场式的工具——arkade。arkade 是什么arkade 是一个用Golang 编写、跨平台的命令行工具可以把它理解成 Kubernetes 生态工具链的应用商店它把各种 Kubernetes 相关的 CLI 工具和应用程序聚合在一起arkade get一下就能下载对应工具的二进制文件。相比逐个去官网找安装脚本这种统一入口让环境准备变得非常简单——这也呼应了本系列 Linux 章节中讲过的软件包管理思想。用 arkade 安装 minikube在 arkade 长长的可用应用清单里minikube 是其中之一。安装只需一条命令arkade get minikube执行后 arkade 会自动下载 minikube 的二进制文件并完成安装装完即可直接使用。用 arkade 安装 kubectl与集群交互还离不开 kubectl。同样可以通过 arkade 安装arkade get kubectlkubectl 的作用会在后文详细展开minikube 官方文档的安装步骤中也会通过 curl 脚本一并处理 kubectl二选一即可。部署第一个集群minikube start一切就绪后部署你的第一个 Kubernetes 集群只需要一条命令minikube start从上面的运行截图可以看到整个启动过程的实际输出minikube 检测到本机环境截图中为 Ubuntu 20.04 Docker 驱动创建控制平面节点、拉取基础镜像、为节点分配资源截图中 CPU2、内存 12800MB准备指定版本的 Kubernetes 与 Docker 运行时随后依次完成证书与密钥生成、控制平面启动、RBAC 规则配置、核心组件验证并启用默认 addon如 storage-provisioner、default-storageclass。最后输出关键提示Done! kubectl is now configured to use minikube cluster and default namespace by default这意味着 kubectl 已经自动指向 minikube 集群可以直接开始使用。单节点结构说明在 Docker 驱动下一个 minikube 集群实际上就是一个 Docker 容器控制平面节点Control Plane与工作节点Worker Node合并在同一实例中——这与生产环境控制平面与工作节点分离的典型架构不同。这种简化正是本地实验环境的特点足够支撑你学习 Kubernetes 的核心概念本系列接下来的章节会切换到更接近生产架构的家庭实验室Home Lab型多节点环境参见后文下一步。用 addons 与自定义参数定制你的集群addons一次启动即可带齐扩展能力minikube 的一大亮点是addons插件体系它允许你在启动集群时就通过命令行一次性启用所需扩展保证每次都能复现同样的环境。本系列作者最常用的两个 addons 是csi-hostpath-driver基于 HostPath 的 CSI 驱动为本地集群提供持久化存储能力便于测试有状态应用volumesnapshots卷快照能力配合 CSI 驱动使用。这类能力通常需要借助 Helm 或手动部署 CSI 组件才能获得而 minikube 把它们做成了开箱即用的开关大大简化了实验流程。完整的 addon 清单可以在本地执行minikube addons list查看再按需启用。自定义参数固定 API 端口、指定运行时与版本除了 addonsminikube start还支持大量自定义参数。本系列作者在项目中使用过的一组典型配置如下截图中有实际执行记录minikube start \ --addons volumesnapshots,csi-hostpath-driver \ --apiserver-port6443 \ --container-runtimecontainerd \ --kubernetes-versionv1.21.2 \ -p mc-demo各参数的含义与影响参数作用说明--addons启动时自动启用的插件列表多个用逗号分隔如volumesnapshots、csi-hostpath-driver--apiserver-port固定 API Server 监听端口文档示例为 6433截图命令中为 6443核心思想是把随机分配的 API 端口固定下来便于 kubectl 配置与脚本引用--container-runtime指定容器运行时默认是 Docker可选containerd或cri-o本示例选用 containerd--kubernetes-version指定 Kubernetes 版本例如v1.21.2保证实验环境与目标版本一致-p/--profile指定集群配置文件名称例如mc-demo用于区分多个 minikube 集群这些参数让用一条命令复现标准环境成为可能——既保留了默认 Docker 驱动的便捷又能在需要时调整架构细节这正是 minikube 适合作为本系列基线集群的原因。kubectl与集群交互的命令行工具集群起来之后我们需要一个遥控器来操作它这就是kubectl。kubectl 是 Kubernetes 官方的命令行工具允许你与 Kubernetes 集群交互部署应用、检查和管理集群资源。它在这里用于操作 minikube 集群但同样的命令也完全适用于公有云上的企业级集群——这也是学习 kubectl 一举多得的原因。kubectl 本质上是在与位于控制平面节点上的 API Server通信所有对集群的读写操作都经过 API Server 完成。用kubectl get nodes验证集群安装好 kubectl 后最简单的验证方式就是查看集群节点状态kubectl get nodes从截图输出可以看到名为mc-demo的节点状态为Ready角色为control-plane,master运行 Kubernetes v1.21.2。Ready状态说明节点上的 kubelet 已正常注册并与 API Server 保持通信集群真正可用了。kubectl 速查表日常使用中下面这张速查表覆盖了最高频的操作类别命令说明列出资源kubectl get nodes列出集群中所有节点列出资源kubectl get namespaces列出集群中所有命名空间列出资源kubectl get pods列出默认命名空间中的所有 Pod列出资源kubectl get pods -n name列出指定命名空间 name 中的所有 Pod创建资源kubectl create namespace name创建名为 name 的命名空间创建资源kubectl create -f [filename]从 JSON 或 YAML 文件创建资源编辑资源kubectl edit svc/servicename编辑某个 Service查看详情kubectl describe nodes以详细信息展示资源的当前状态删除资源kubectl delete pod删除资源支持从 stdin 或文件读入kubectl 资源短名称写命令或脚本时常会用到资源类型的短名称既少打字又让脚本更整洁。例如-n就是--namespace的短标志。下表是官方支持的部分资源短名称短名称完整名称csrcertificatesigningrequestscscomponentstatusescmconfigmapsdsdaemonsetsdeploydeploymentsependpointseveventshpahorizontalpodautoscalersingingresseslimitslimitrangesnsnamespacesnonodespvcpersistentvolumeclaimspvpersistentvolumespopodspdbpoddisruptionbudgetspsppodsecuritypoliciesrsreplicasetsrcreplicationcontrollersquotaresourcequotassaserviceaccountssvcservices比如kubectl get no、kubectl get po -n kube-system熟悉这些短名称后日常操作和自动化脚本都会高效很多。仓库中的配套示例从无状态到有状态本系列仓库的 Kubernetes 目录2022/Days/Kubernetes中除了上面用到的 minikube 集群之外还沉淀了与后续章节配套的实战清单可以用kubectl create -f直接应用到 minikube 集群上正好呼应速查表中的创建命令。无状态应用示例nginx-stateless-demo.yaml 演示了最基础的三件套先创建nginx命名空间再声明一个apps/v1Deploymentreplicas1镜像nginx暴露容器端口 80最后通过一个 Service 把 Pod 暴露为集群内可访问的稳定入口。这是理解命名空间 工作负载 服务发现的最简闭环。有状态应用示例statefulset.yaml 则是有状态应用的样板一个 MongoDB 的 StatefulSet包含 initContainer 修复/bitnami/mongodb目录权限、通过 Secretmongodb-users-secret注入数据库账号密码、挂载 PVCmongo-storage实现持久化并配置了 readinessProbe 探活。这类示例正是 minikube 上验证csi-hostpath-driver与volumesnapshots两个 addon 的最佳场景。Ingress 入口示例pacman-ingress.yaml 演示了networking.k8s.io/v1的 Ingress 资源将pacman.com域名的/路径路由到pacman命名空间中的pacman服务的 80 端口。它对应系列后续Kubernetes Ingress专题的实操基础。下一步VirtualBox 多节点集群正如文首所述minikube 单节点集群是基线而本系列接下来Day 52会部署更接近生产架构的多节点集群在 VirtualBox 中通过 Vagrant 拉起多台虚拟机分别扮演控制平面节点与工作节点——就像 Linux 章节用 Vagrant 快速批量建机、部署软件一样按一个轻松按钮完成环境搭建。仓库中已准备好这套完整骨架Vagrantfile定义 1 台 master4GB 内存、2 核IP 10.0.0.10与 2 台 worker各 2GB 内存、1 核IP 10.0.0.11/12并使用 bento/ubuntu 镜像scripts/common.sh两台机器共同的初始化逻辑——关闭 swap、加载br_netfilter内核模块、配置 iptables 桥接流量转发、安装 Docker 与 containerd再安装并固定 kubeadm/kubelet/kubectl 版本scripts/master.sh在 master 上执行kubeadm init初始化控制平面指定 Pod CIDR192.168.0.0/16、生成 kubeconfig、生成 worker 加入令牌写入 configs/join.sh并部署 Calico 网络插件、Metrics Server 与 Kubernetes Dashboardscripts/node.shworker 节点执行join.sh加入集群并打上 worker 角色标签configs/configkubeadm init生成的 kubeconfig 样例可看到集群入口为https://10.0.0.10:6443这与生产式架构中 API Server 独立暴露的方式一致。Kubernetes 系列将覆盖的主题本系列 Kubernetes 篇章才刚刚开始后续将围绕以下主题逐一深入minikube 集群将作为这些实操的演练场Kubernetes 架构Architecturekubectl 命令CommandsKubernetes YAML 清单Kubernetes IngressKubernetes ServicesHelm 包管理器持久化存储Persistent Storage有状态应用Stateful Apps资源与继续学习Kubernetes 官方文档集群概念、kubectl 参考、API 资源定义kubectl 命令参考与官方速查表面向初学者的 Kubernetes 视频课程含架构简化讲解用 Vagrant Ansible 在 VirtualBox 上部署 minikube 的社区教程在仓库内你可以继续研读 2022/Days/Kubernetes 目录下的全部配置与脚本作为多节点部署的直接参考下一篇 Day 52 将带你完成第二个集群VirtualBox 多节点的部署之后就可以开始向集群中部署应用了。赞分享文档/教程【免费下载链接】90DaysOfDevOpsThis repository started out as a learning in public project for myself and has now become a structured learning map for many in the community. We have 3 years under our belt covering all things DevOps, including Principles, Processes, Tooling and Use Cases surrounding this vast topic.项目地址https://gitcode.com/gh_mirrors/90/90DaysOfDevOps点击查看免费下载相关推荐90DaysOfDevOps Day 51用 minikube 部署你的第一个本地 Kubernetes 集群90DaysOfDevOps Day 51用 minikube 部署你的第一个本地 Kubernetes 集群 本篇是《90DaysOfDevOps》Kube文档/教程90DaysOfDevOps 第 51 天使用 Minikube 部署你的第一个 Kubernetes 集群90DaysOfDevOps 第 51 天使用 Minikube 部署你的第一个 Kubernetes 集群 引言 本篇是 90DaysOfDevOps 系列文档/教程90DaysOfDevOps 实战用 Helm 在 Minikube 上部署 Jenkins 并落地第一条 CI Pipeline90DaysOfDevOps 实战用 Helm 在 Minikube 上部署 Jenkins 并落地第一条 CI Pipeline 本文基于 90DaysOf文档/教程上一篇Excalidraw-CN 核心架构揭秘深入理解组件系统与渲染机制下一篇Qwen3-Coder 30B-A3B256K上下文AI编码终极工具创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

类变量和全局变量的生命周期有什么区别?

类变量和全局变量的生命周期有什么区别?

Python:类变量 vs 全局变量 — 生命周期区别核心一句话: 全局变量依附模块;类变量依附类对象。谁的宿主活着,变量就活着;宿主被 GC 回收,变量跟着销毁。一、全局变量全局变量定义在模块顶层,保存…

2026/10/5 10:13:49 阅读更多 →
huggingface_hub 默认 Model Card 模板全解析:从 Jinja2 渲染到 Hub 发布实战

huggingface_hub 默认 Model Card 模板全解析:从 Jinja2 渲染到 Hub 发布实战

开发工具CLI机器学习 【免费下载链接】huggingface_hub The official CLI and Python client for the Hugging Face Hub. 项目地址: https://gitcode.com/gh_mirrors/hu/huggingface_hub 点击查看 免费下载 huggingface_hub 官方客户端在 templates/modelcard_temp…

2026/10/5 10:12:48 阅读更多 →
ESP32-S3环境监测实战:BME280与ENS160数据采集全解析

ESP32-S3环境监测实战:BME280与ENS160数据采集全解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/5 10:11:48 阅读更多 →

最新新闻

Kimi K2 驱动 AI 文档阅读助手实战:零代码用 Claude Code 一天打造全栈文档管理网站

Kimi K2 驱动 AI 文档阅读助手实战:零代码用 Claude Code 一天打造全栈文档管理网站

文档教程知识库人工智能 【免费下载链接】ai-guide 程序员鱼皮的 AI 资源大全 Vibe Coding 零基础教程,分享 OpenClaw 保姆级教程、大模型玩法(DeepSeek / GPT / Gemini / Claude / GLM)、最新 AI 资讯、Prompt 提示词大全、AI 知识百科&…

2026/10/5 14:21:41 阅读更多 →
SAP物料账报错ML4HMASTER113与ML4HRUN053根因解析

SAP物料账报错ML4HMASTER113与ML4HRUN053根因解析

1. 项目概述:这不是一次简单的报错修复,而是一次对SAP物料账(Material Ledger)底层逻辑的深度体检“SAP-ML章<<<<第一节:物料账报错处理>>&#x…

2026/10/5 14:21:40 阅读更多 →
本科毕设遥感图像分类实战:72小时落地深度学习方案

本科毕设遥感图像分类实战:72小时落地深度学习方案

1. 这不是“速成课”,而是毕设场景下真正能落地的遥感图像分类实战路径 我带过三届毕业设计,每年四月总有一批学生抱着“毕设有救了”的心态冲进实验室,手里攥着刚下载的Sentinel-2数据、GitHub上抄来的PyTorch代码、还有导师一句“你试试用深…

2026/10/5 14:21:40 阅读更多 →
C++ STL:list 容器详解与模拟实现——从双向链表到反向迭代器

C++ STL:list 容器详解与模拟实现——从双向链表到反向迭代器

C STL:list 容器详解与模拟实现——从双向链表到反向迭代器 文章目录C STL:list 容器详解与模拟实现——从双向链表到反向迭代器1 list 的基本概念2 list 的构造2.1 构造空 list2.2 构造 n 个相同元素2.3 拷贝构造2.4 使用迭代器区间构造3 list 的迭代器…

2026/10/5 14:21:40 阅读更多 →
深入理解Spring Data:从JDBC样板代码到Repository自动化原理

深入理解Spring Data:从JDBC样板代码到Repository自动化原理

过去几年里,我带过不少刚入行的Java开发,大多数人第一次听到“Spring Data”这个词时,第一反应都是:这是个ORM框架吧?是不是跟MyBatis差不多?等真正接手项目,看到Service层里一个个接口注入、方…

2026/10/5 14:20:39 阅读更多 →
PHP短视频源码开发:JSON数据源统一接入与API适配层设计实践

PHP短视频源码开发:JSON数据源统一接入与API适配层设计实践

在做PHP开源短视频源码的时候,我遇到的第一件事不是播放器怎么接,也不是会员体系怎么做,而是第三方数据源的JSON格式乱到让人怀疑人生。短剧接口返回的字段和TVBox仓库对不上,TVBox仓库的结构和zyplayer视频源又不是一回事&#x…

2026/10/5 14:20:39 阅读更多 →

日新闻

马斯克杀回智能体战场,Grok 4.5万亿参数撑腰,Cursor接手数字白领项目:用TaoToken统一Key跑通多模型Agent工作流

马斯克杀回智能体战场,Grok 4.5万亿参数撑腰,Cursor接手数字白领项目:用TaoToken统一Key跑通多模型Agent工作流

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/5 0:00:22 阅读更多 →
AI编程工具插件机制详解:plugin.json配置与加载失败排查指南

AI编程工具插件机制详解:plugin.json配置与加载失败排查指南

1. 从“plugins”这个词说起:它到底在解决什么问题如果你最近在折腾 AI 编程工具,尤其是 Cursor、Codex CLI、Claude Code 这类带 CLI 的编辑器或命令行助手,那你大概率绕不开一个词——plugins。这个词本身不新鲜,从浏览器到 IDE…

2026/10/5 0:00:23 阅读更多 →
第26课:OpenClaw|日志审计与问题诊断:把日志链路改到 TaoToken 的排查清单

第26课:OpenClaw|日志审计与问题诊断:把日志链路改到 TaoToken 的排查清单

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/5 0:00:23 阅读更多 →

周新闻

KT148A语音芯片外挂8002D功放的工程实践指南

KT148A语音芯片外挂8002D功放的工程实践指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/5 5:06:42 阅读更多 →
LLC谐振变换器增益公式推导:从FHA等效到完整归一化表达式

LLC谐振变换器增益公式推导:从FHA等效到完整归一化表达式

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/5 1:10:22 阅读更多 →
ARM架构深度解析:从RISC设计理念到交叉编译实战

ARM架构深度解析:从RISC设计理念到交叉编译实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/5 3:06:17 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/4 11:40:45 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/4 9:43:54 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/4 20:14:29 阅读更多 →