当前位置: 首页 > news >正文

第 20 篇 搭建 Kubernetes 实验环境:Minikube 与 kubectl

IT策士 10余年一线大厂经验,专注 IT 思维、架构、职场进阶。我会在各个平台持续发布最新文章,助你少走弯路。

在第 19 篇中,我们把 Kubernetes 的架构拆解了一遍——控制平面的四大组件、工作节点的三大组件、以及一个 Pod 从创建到运行的完整旅程。但架构图看得再多,不如亲手敲一行kubectl get nodes

从本篇开始,我们正式进入动手阶段。今天的目标很明确:在你的电脑上启动一个 K8s 集群,安装 kubectl 命令行工具,部署你的第一个 Pod,亲眼看看控制平面和 kubelet 是怎么协作的。这也是我们贯穿案例 Flask + Redis 计数器应用 K8s 化的起点——从第 10 篇我们用纯 Docker 命令启动了它,到第 44-45 篇我们将把它完整部署到 K8s 集群上。

一、为什么是 Minikube?

搭建 K8s 集群的方案很多,不同阶段适合不同的工具:

为什么本系列选择 Minikube?三个原因:它提供了最接近标准 K8s 的体验(包含控制平面全套组件);一条minikube start就能搞定,不折腾;社区活跃,官方支持所有主流操作系统。

等到第 47 篇讲生产级考量时,我们会回过头来讨论kubeadm多节点部署和云托管方案。

二、安装 kubectl

kubectl 是你和 K8s 集群交互的唯一 CLI 工具。无论你用 Minikube、kubeadm 还是云托管,都靠它下命令。请先完成本节安装,否则后续所有示例都无法执行。

2.1 各平台安装

macOS(推荐 Homebrew):

Windows(推荐 winget):

wingetinstallKubernetes.kubectl

安装完成后,关闭并重新打开 PowerShell 或 Windows Terminal。

Linux(通过包管理器):

以 Ubuntu/Debian 为例:

sudoapt-getupdatesudoapt-getinstall-yapt-transport-https ca-certificatescurlgnupg# 添加 K8s 官方 GPG 密钥(2025 年底起建议使用新版获取方式)sudomkdir-p/etc/apt/keyringscurl-fsSLhttps://pkgs.k8s.io/core:/stable:/v1.32/deb/Release.key|\sudogpg--dearmor-o/etc/apt/keyrings/kubernetes-apt-keyring.gpg# 添加 K8s APT 仓库echo"deb [signed-by=/etc/apt/keyrings/kubernetes-apt-keyring.gpg] https://pkgs.k8s.io/core:/stable:/v1.32/deb/ /"|\sudotee/etc/apt/sources.list.d/kubernetes.listsudoapt-getupdatesudoapt-getinstall-ykubectl

版本说明:本文以 v1.32 为例。如需安装其他版本,请将命令中的v1.32替换为目标版本号。版本兼容性策略是 kubelet 版本与 API Server 不超过 ±1 个次要版本。对于本地实验环境,kubectl 版本可以等于或略新于集群版本。

所有平台通用安装方式:

# 下载最新稳定版curl-LO"https://dl.k8s.io/release/$(curl-L-shttps://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl"# 安装sudoinstall-oroot-groot-m0755 kubectl /usr/local/bin/kubectl

2.2 验证安装

输出:

Client Version: v1.32.0 Kustomize Version: v5.5.0

如果你看到Server Version报错(The connection to the server localhost:8080 was refused),这是正常的——因为集群还没启动。我们在第 47 篇会深入 kubectl 的kubeconfig配置机制。

三、安装 Minikube 并启动集群

Minikube 的安装方式按操作系统分为三种路径,请根据你的操作系统选择。

3.1 各平台安装 Minikube

macOS:

Windows(推荐 winget):

Linux(推荐直接下载二进制):

curl-LOhttps://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64sudoinstallminikube-linux-amd64 /usr/local/bin/minikube&&rmminikube-linux-amd64

3.2 启动集群

Minikube 支持多种驱动(driver),用于运行 K8s 节点。操作系统与推荐驱动的对应关系如下:

确认 Docker 驱动可用:

minikube start--driver=docker

输出关键行:

😄 minikube v1.34.0 on Ubuntu22.04✨ Using thedockerdriver based on existing profile 👍 Starting control planenodeminikubeincluster minikube 🚜 Pulling base image... 💾 Downloading Kubernetes v1.31.0 preload... 🔥 Creatingdockercontainer(CPUs=2,Memory=2200MB)... 🐳 Preparing Kubernetes v1.31.0 on Docker27.2.0... 🔎 Verifying Kubernetes components... 🌟 Enabled addons: storage-provisioner, default-storageclass 🏄 Done!kubectl is now configured to use"minikube"cluster

Minikube 帮你做了什么?它自动下载了包含 K8s 组件的 ISO 镜像,创建了一个 Docker 容器来运行单节点集群,并将 kubectl 的配置指向了这个新集群。

3.3 验证集群状态

输出:

NAME STATUS ROLES AGE VERSION minikube Ready control-plane 30s v1.31.0

ROLES列显示control-plane,因为 Minikube 的单节点集一身承担了控制平面和工作节点的双重角色。

输出:

Kubernetes control plane is running at https://192.168.49.2:8443 CoreDNS is running at https://192.168.49.2:8443/api/v1/namespaces/kube-system/services/kube-dns:dns/proxy

3.4 查看控制平面组件的真实面貌

我们在第 19 篇学过,控制平面组件运行在kube-system命名空间中。来亲眼看一看:

kubectl get pods-nkube-system

输出:

NAME READY STATUS RESTARTS AGE coredns-7c8b6f9d5f-abcde1/1 Running02m etcd-minikube1/1 Running02m kube-apiserver-minikube1/1 Running02m kube-controller-manager-minikube1/1 Running02m kube-proxy-xyz121/1 Running02m kube-scheduler-minikube1/1 Running02m storage-provisioner1/1 Running02m

对照第 19 篇的架构图,你看到了etcdkube-apiserverkube-schedulerkube-controller-manager,还有工作节点上的kube-proxy。架构图里的抽象概念,此刻正在你的电脑上真实运行着。

四、部署第一个应用:Nginx

环境就绪,来跑一个真正的应用。

4.1 创建一个 Deployment

kubectl create deployment my-nginx--image=nginx:alpine

输出:

deployment.apps/my-nginx created

这条命令在 K8s 中做了什么?它创建了一个 Deployment 对象(控制器),Deployment Controller 监听到后创建了 ReplicaSet,ReplicaSet Controller 创建了一个 Pod,Scheduler 将 Pod 分配给了唯一的节点,节点上的 kubelet 拉取镜像并启动了 Nginx 容器。整个过程就是第 19 篇讲的 7 步完整链路。对比一下,在 Docker 中你要执行docker run -d --name my-nginx nginx:alpine,只涉及本地 Docker Daemon;而在 K8s 中,控制平面组件和 kubelet 协作完成了相同的效果。

4.2 查看 Pod 状态

输出:

NAME READY STATUS RESTARTS AGE my-nginx-5c6d7f8b9f-abcde1/1 Running030s
  • READY 1/1:Pod 中 1 个容器已就绪

  • STATUS Running:Pod 正在运行

  • RESTARTS 0:容器从未重启过

如果STATUS显示PendingImagePullBackOff,说明调度或镜像拉取出了问题。Minikube 环境下最常见的原因是镜像拉取超时——执行kubectl describe pod <pod名>可以看到详细事件日志。

4.3 查看 Deployment 详情

输出:

NAME READY UP-TO-DATE AVAILABLE AGE my-nginx1/1111m
  • READY 1/1:期望 1 个副本,当前 1 个副本就绪

  • UP-TO-DATE:已更新到最新版本的 Pod 数

  • AVAILABLE:可用的 Pod 数

4.4 端口转发

在 K8s 中,Pod 的端口默认不会自动暴露到宿主机。快速测试时,可以用port-forward建立临时隧道:

kubectl port-forward deployment/my-nginx8080:80

输出:

Forwarding from127.0.0.1:8080 ->80Forwarding from[::1]:8080 ->80

此时终端被占用,打开另一个终端:

curlhttp://localhost:8080

你会看到 Nginx 的欢迎页面 HTML。port-forward绕过了 Service 和 Ingress,直接将你本机的 8080 端口流量转发到 Pod 的 80 端口。它适合调试,但不适合生产流量,因为 kubectl 进程本身就是单点故障。生产环境中,你需要用 Service(NodePort/LoadBalancer)+ Ingress 来暴露服务,这些将在第 28-31 篇展开。

Ctrl+C结束端口转发。

五、体验 K8s 的核心特性

5.1 自愈能力

删除一个 Pod,观察控制器如何自动重建:

# 先记住当前 Pod 名字kubectl get pods# NAME READY STATUS RESTARTS AGE# my-nginx-5c6d7f8b9f-abcde 1/1 Running 0 5m# 删除这个 Podkubectl delete pod my-nginx-5c6d7f8b9f-abcde# pod "my-nginx-5c6d7f8b9f-abcde" deleted# 立即查看(Pod 已被新版本替换)kubectl get pods# NAME READY STATUS RESTARTS AGE# my-nginx-5c6d7f8b9f-xyz12 1/1 Running 0 5s

旧 Pod 被删了,一个全新的 Pod(名字后半段不同)立刻被创建出来。Deployment Controller 检测到实际 Pod 数量(0)不等于期望数量(1),触发创建新 Pod。这就是控制循环的自愈能力——也是 Compose 中restart: unless-stopped在 K8s 层面的增强版。

5.2 扩容

将 Nginx 的副本数从 1 扩到 3:

kubectl scale deployment my-nginx--replicas=3# deployment.apps/my-nginx scaledkubectl get pods-w# NAME READY STATUS RESTARTS AGE# my-nginx-5c6d7f8b9f-xyz12 1/1 Running 0 6m# my-nginx-5c6d7f8b9f-def34 0/1 ContainerCreating 0 2s# my-nginx-5c6d7f8b9f-ghi56 0/1 ContainerCreating 0 2s# my-nginx-5c6d7f8b9f-def34 1/1 Running 0 10s# my-nginx-5c6d7f8b9f-ghi56 1/1 Running 0 10s

三条命令,从 1 个副本变成了 3 个。对比 Compose 的--scale,K8s 的扩容也是声明式的——修改期望副本数后控制器自动调和实际状态。在第 36 篇我们还会学习 HPA(水平自动伸缩),让 K8s 根据 CPU 和内存使用率自动调整副本数。

Ctrl+C退出 watch 模式。

六、Minikube 常用管理命令

Minikube 毕竟是个实验环境,下面这些命令是日常使用的高频操作。

如果实验环境出现问题,最快恢复方式是重建集群:

minikube delete minikube start--driver=docker

从头到尾约 2-3 分钟,适用于“环境被玩坏了”的极端情况。

6.1 集群暂停与恢复

当你不需要 K8s 运行时,可以通过暂停释放 CPU 和内存资源:

# 暂停集群(保留所有已部署的资源,但释放计算资源)minikube pause# 恢复集群minikube unpause

这个操作不会丢失任何部署的资源(Pod、Deployment、Service 等),只是暂停了控制平面和工作节点进程,适合午休或长时间不用时暂时释放资源。

七、命令速查表

八、本篇总结

今天这篇是整个 K8s 实战的“起手式”——我们成功搭建了实验环境,验证了第 19 篇的架构知识,部署了第一个应用,体验了自愈和扩容这两个 K8s 最核心的特性。具体来说,你学会了在本地用 Minikube 一键启动单节点集群,使用 kubectl 管理 Deployment 和 Pod 的生命周期,验证了控制器模式下的自愈能力,实现了从 1 到 3 的副本扩容。

至此,本系列四个阶段的工具链已清晰成型:单机容器化(Docker)→ 单机编排(Compose)→ 集群编排(K8s 核心对象)→ 生产级运维(后续 30 篇将逐一覆盖的监控、日志、CI/CD、安全、服务网格)。此刻你的电脑上已经有一个真实的 K8s 集群在跑,kubectl get pods -n kube-system能看到全套控制平面组件——你已经站在了云原生的门槛上。

下一篇文章——第 21 篇:Pod:最小调度单元与 YAML 详解,我们将深入 K8s 最核心的概念,从 Pod 的 YAML 结构开始,理解为什么 Pod 是“最小的、不可再分的调度单元”。

想了解更多还可以去各个平台搜索「IT策士」,一起升级 IT 思维 !

http://www.jsqmd.com/news/919599/

相关文章:

  • 2026兰州双向土工格栅厂家评测:兰州防水土工布厂家、兰州防水板、兰州隧道防水板、土工布批发、土工格栅价格、甘肃hdpe土工膜选择指南 - 优质品牌商家
  • 6款论文AI智能降重工具横评:AI率秒归安全区,学生党狂喜款
  • 2026年5月安庆装饰行业核心服务维度实测解析:安庆靠谱装修/安庆全屋整装/安庆别墅装修/安庆大平层装修/安庆家装/选择指南 - 优质品牌商家
  • 隔振橡胶特性表征与橡胶悬架结构优化方案【附仿真】
  • 2026年Q2重庆钯金回收公司排行:重庆钯金回收、重庆银条回收、重庆首饰回收、重庆首饰珠宝回收、重庆黄金典当、重庆黄金回收选择指南 - 优质品牌商家
  • Win11美化党进阶指南:如何用StartAllBack只改任务栏,同时保留原生开始菜单的文件夹功能?
  • 钢化玻璃风斑检测仪厂家排行:钢化玻璃自爆缺陷检测仪、钢化玻璃风斑应力检测仪、防水板/止水带测厚仪、防水板止水带测厚仪选择指南 - 优质品牌商家
  • 【RT-DETR实战】093、遥感图像(RSOD)目标检测改进实战:当RT-DETR遇见高空视角
  • 2026年国内GEO服务商实力盘点:从短期流量到长效资产的转型之路 - GEO优化
  • 2026降AI率工具红黑榜:降AI率工具怎么选?一文讲透
  • 郑州茅台酒回收商家排行:郑州闲置酒水回收、郑州高价名酒回收、郑州高端名酒回收、郑州上门收茅台、郑州专业老酒回收选择指南 - 优质品牌商家
  • 如何快速配置Jellyfin Android TV:5个专业技巧打造完美家庭影院体验
  • 不只是libxcb-cursor:深度排查Ubuntu 22.04 Qt平台插件加载失败的全链路指南
  • Agent+电子病历:病史整理、结构化录入与摘要生成如何落地
  • 显卡驱动清理大师:DDU深度使用完全指南
  • 3分钟上手JD-GUI:让Java字节码对你“坦诚相见“的魔法工具
  • 如何高效管理浏览器下载:Motrix WebExtension专业解决方案
  • 2026年GEO服务商推荐:全意图时代的企业选型指南 - GEO优化
  • 2026年5月更新:聚焦安徽市场,甄选高性价比安全生产培训直销服务商 - 2026年企业资讯
  • Mermaid Live Editor终极指南:免费在线图表编辑器的完整使用教程
  • Windows高DPI缩放总让你头疼?从‘模糊’到‘清晰’的完整设置指南(含Win10/11避坑清单)
  • 网易云音乐人申请避坑指南:从实名认证到30秒清唱视频,一次搞定审核
  • 2026苏州卫生间免砸砖防水维修口碑榜单|最新报价+真实施工案例 - 吉修匠
  • 如何将浏览器下载速度提升300%:Motrix WebExtension终极指南
  • 干货合集:2026年实测靠谱的专业降AI率平台
  • HelloCard 网页贺卡生成器 —— 一个第一次发帖的萌新,用华为云码道(CodeArts)2 小时造了一张能转发的“网页祝福“
  • C# 重写
  • Perseus原生库:无偏移地址设计的游戏脚本补丁架构解析
  • Steam游戏《Turing Complete》通关笔记:手把手教你从逻辑门到可编程CPU的完整搭建流程
  • Parallels Desktop 17保姆级教程:给CentOS 7虚拟机配个固定IP,开发调试再也不怕IP变来变去