尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
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),仅供参考
RELATED

相关推荐

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

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

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

📅 2026/10/5 10:14:00
30 Seconds of Code:编写可读性更强的 Redux Reducer 实战指南

30 Seconds of Code:编写可读性更强的 Redux Reducer 实战指南

教程文档 【免费下载链接】30-seconds-of-code Coding articles to level up your development skills 项目地址: https://gitcode.com/gh_mirrors/30/30-seconds-of-code 点击查看 免费下载 本文围绕 30 Seconds of Code 仓库中 React 文章集合里的 redux-readabl…

📅 2026/10/5 10:14:00
OWASP MASTG 最佳实践:Android 内部 IPC 必须使用显式 Intent(MASTG-BEST-0056)

OWASP MASTG 最佳实践:Android 内部 IPC 必须使用显式 Intent(MASTG-BEST-0056)

文档教程网络安全 【免费下载链接】mastg The OWASP Mobile Application Security Testing Guide (MASTG) is a comprehensive manual for mobile app security testing and reverse engineering. It describes technical processes for verifying the OWASP Mobile Security W…

📅 2026/10/5 10:14:00
MORE NEWS

更多资讯

📰

Midscene.js:用自然语言驱动UI自动化,让零编码从口号到落地

Midscene.js 这个名字,第一次听的人大概率会把它当成又一个基于 Playwright 的 UI 自动化测试封装框架。说实话我一开始也这么想,直到我亲手在测试脚本里写下一句中文指令,看着浏览器自己完成了点击、输入、断言这一串动作,我才意…

📰

猪场监控实拍数据集:3万+真实猪只目标,VOC+YOLO双格式开箱即用

简介:本资源是面向农业AI与智能养殖领域的猪只目标检测专用数据集,适用于计算机视觉初学者、算法工程师及智慧畜牧项目开发者,解决猪只识别、数量统计与行为分析等实际落地问题。数据集包含2000张养猪场监控实拍图像,标注3万多个真…

📰

OpenClaw控制台界面定制:不改后端,三天交付企业级AI管理后台

OpenClaw 的控制台默认长什么样,我用四个字评价:够用但糙。能力层面它不差,Agent 管理、任务流、技能配置都在,但真拿去给企业客户做演示,观感立刻露怯:Logo 不够高级、菜单层级不清晰、任务状态的颜色跟企…

📰

定长滑动窗口:算法、滤波与协议的底层逻辑

1. 为什么单独把"定长"拎出来讲滑动窗口 滑动窗口这四个字,你在算法题、信号处理、网络协议、甚至硬件设计里都能撞见。但很多人在初学阶段最容易忽略的,恰恰是"定长"这个限定词。同样是滑动窗口,定长和变长的解题思路完…

📰

UFS 3.1协议栈详解:从eMMC到全双工存储的性能跃迁

去年调一个UFS 3.1平台的随机读性能问题,现象很典型:顺序读能到1800MB/s,一旦切成4K随机读,IOPS直接掉到一万出头,dmesg里还开始刷ufshcd timeout。那几天我基本住在实验室,用协议分析仪抓UPIU,…

📰

Optisystem数据导出与Matlab读取:光通信仿真联合处理全攻略

搞光通信仿真的朋友,早晚会撞上这么一堵墙:Optisystem里链路调好了,眼图、光谱、星座图都挺漂亮,可一旦涉及到更细致的信号处理、误码率统计或者跟课题算法做对接,光靠Optisystem自带的那几个可视化模块根本不够用。尤…

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬