安装 Minikube 并启动本地集群:给自己配把实战微冲
别去折腾复杂的生产级 K8s 搭建了。用 Minikube 在笔电里瞬间拉起一个真实可破的本地演练沙盒。
刚接触 Kubernetes 时,大部分人会有个冲动:找三台机器或者虚机,从零开始折腾 kubeadm 装集群。 结果往往是在折腾网络插件安装、证书对齐、系统内核兼容的过程中耗尽所有的精力,到最后连一个 nginx Pod 都没能成功拉起来。
我们是来学如何操控集群解决工程问题的,不是来学运维修拖拉机的。
对于学习、写实验 YAML 乃至于本地验证逻辑,Minikube(单节点开发集群)是你手上一把趁手的微冲。 它是 Kubernetes 官方长期维护的项目,能在任何电脑上秒出本地控制平面的 API 接口,让你肆无忌惮地弄坏它再重置复活。
前置准备:你的本地环境
确保你当前使用的是 64 位系统,并且符合下列其一:
- 已经安装了 Docker Desktop / 开启了系统底层虚拟化(Hyper-V / VT-X)。
- 如果用虚拟机驱动,保证本机起码能腾出 2核 CPU、4G 乃至更多的空闲物理内存 用于划拨。
以及,你得把操作集群专用的枪(kubectl 客户端)带在身上。
Linux 用户可以直接这么装:
curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl"
chmod +x kubectl
sudo mv kubectl /usr/local/bin/
# 验证枪膛是好的
kubectl version --client
装载子弹:安装并启动 Minikube
Minikube 本身就是一个独立二进制包。
# 获取引擎本身(以 Linux 举例)
curl -LO https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64
sudo install minikube-linux-amd64 /usr/local/bin/minikube
点火与资源选择:千万别跑默认配置
Minikube 默认只给 2 个 CPU 核心和 2GB 内存。这个极其抠搜的配额,一旦多拉几个 Pod 或者加上 Metrics Server,立马就会触发一出惨烈的节点级 OOM(内存溢出)导致集群假死崩溃。
直接上干货配置(建议使用 docker 驱动,最稳定):
# 给予大内存配额支撑后续测试,利用 docker 的天然容器底层拉起
minikube start --driver=docker --cpus=4 --memory=6g
# 点火后,确认仪表盘显示一切良好运行
minikube status
# 并用客户端命令向 API Server 发送一次探针,看它活了没
kubectl get nodes
基本生存法门:那些“奇奇怪怪的网络壁垒”
用 Minikube 时,新手最懵的坑是:“我在本地浏览器敲了一个 localhost:80,怎么访问不到我建出来的那个 Pod!”
你要牢记一条铁律:Minikube 是将集群整个包裹在你电脑内的一个隔离虚拟机/容器引擎网络层里。 集群里的 Service 和 Pod IP 都是这个黑盒里的私有地址,你的宿主机不使用特殊手段是绝对探视不到的。
怎么打通这条命脉?
法门一:NodePort + minikube service 穿透
这是最简单的暴力打通手段。当你建好了一个暴露特定映射的 Service 后,告诉 Minikube 直接给你开隧道映射。
minikube service <your-svc-name> --url
它会强制在宿主机上通过反向通道打开一个映射端口发向集群服务内,返回给你的可以直接到宿主机浏览器里访问。
法门二:本地端口直通(临时救场王) 如果你只是像 Debug 一下某个 Pod,无需任何特殊暴露设计,这招永远成立。
# 强行抢占宿主机的 8080 端口,流量全部直灌集群内指定的 Service 80
kubectl port-forward svc/<your-svc-name> 8080:80
这是高级工程调试中频率最高、最立竿见影的动作。
法门三:开启并模拟真实负载网关(Ingress) 这对于测试真实的域名路由和 URL 转发是最贴近生产的手段。
# 允许集群强插 Nginx Ingress 控制器
minikube addons enable ingress
# 获取该隔离群的网络隔离界碑大门 IP,再将你本地机器的 C:\Windows\System32\drivers\etc\hosts 映射至此IP即可。
minikube ip
没推送到 DockerHub 的镜像怎么玩?
在平时编写本地代码并尝试给应用拉起 Pod 测试时,去等它往公网的 Registry 等上大几分推来拉去是很蠢的操作。Minikube 直接拥有和宿主机器互相搬运镜像的魔法。
# 直接将你本地通过 docker build 好却存在电脑里的 my-app:dev 镜像缓存直接灌进 Minikube 的节点深处去!
minikube image load my-app:dev
# 然后直接让 Pod 使用新包裹拉起。
kubectl set image deployment/hello web=my-app:dev
如果这把微冲坏了/卡壳了
作为沙盒玩具,你肯定会把它折腾坏(例如装了什么奇怪的 CRD 控制器删不掉了)。
不要想着一点一点复原历史包袱。在排除了不是电脑本身的内存耗用完了之后,最强硬的修缮动作永远是“直接重启全服销毁重铸”。
# 不想玩了,保留数据直接强制冻结节点省电模式。
minikube stop
# 想抹除一切错误记录、完全洗牌、回归原始干净态?立刻物理爆破:
minikube delete --all --purge
一发摧毁重建,不用背负历史债务,这是使用本地云沙盒测试平台带来的最高贵的特权。