轻量级集群选型 k3s 与 minikube 本地开发场景对比

文章导读
本地开发选 k3s 还是 minikube,取决于你是更在意资源占用,还是更在意跟官方标准 Kubernetes 的行为一致性。
📋 目录
  1. 命令速用版
  2. 为什么会这样
  3. 分步处理
  4. 怎么验证是否生效
  5. 常见坑
  6. 参考来源
A A

本地开发选 k3s 还是 minikube,取决于你是更在意资源占用,还是更在意跟官方标准 Kubernetes 的行为一致性。

先说结论:资源紧张或追求启动速度选 k3s,需要测试特定 K8s 特性或驱动兼容性选 minikube。

  • 适合:k3s 适合低配机器、CI 环境及边缘模拟;minikube 适合需要完整 K8s 特性验证的场景。
  • 重点看:两者在存储类(StorageClass)和网络插件(CNI)的默认配置差异,这直接影响应用部署表现。
  • 别忽略:minikube 通常运行在虚拟机中,而 k3s 可直接运行在主机上,网络访问方式有所不同。

命令速用版

如果你已经决定好方向,可以直接使用以下命令快速搭建环境。

k3s 安装与启动:

curl -sfL https://get.k3s.io | sh -
sudo k3s kubectl get nodes

minikube 安装与启动:

minikube start `--driver`=docker
kubectl get nodes

为什么会这样

这两个工具的设计目标不同,导致它们在本地开发体验上有明显区别。

k3s 是一个经过裁剪的 Kubernetes 发行版,它将多个组件打包成一个二进制文件,默认使用 SQLite 替代 etcd(单节点模式下),并移除了部分非必要的云驱动代码。这种设计让它占用的内存和 CPU 更少,启动速度更快。

minikube 是一个本地 Kubernetes 工具,它的核心目标是在本地运行一个标准的 Kubernetes 集群。它通常会在你的机器上启动一个虚拟机(或使用 Docker 容器模拟节点),然后在这个隔离环境中安装标准的 Kubernetes 组件。这意味着它的行为更接近生产环境的标准集群,但开销相对较大。

轻量级集群选型 k3s 与 minikube 本地开发场景对比

公开资料中没有看到可靠的量化数据表明具体节省多少资源,但架构上的精简决定了 k3s 在轻量级场景下的优势。

分步处理

以下是具体的选型和部署步骤,帮助你根据实际需求做决定。

1. 评估机器资源

如果你的开发机内存小于 8GB,或者你需要同时运行多个集群实例,建议优先考虑 k3s。如果资源充足且需要测试特定的 Kubernetes 版本特性,minikube 的版本管理更方便。

2. 安装工具

k3s 通常直接安装在主机系统上,需要注意权限管理。minikube 需要预先安装驱动(如 Docker、VirtualBox 或 Hyperkit)。

3. 配置 kubeconfig

轻量级集群选型 k3s 与 minikube 本地开发场景对比

k3s 安装后会自动配置 kubeconfig 到/etc/rancher/k3s/k3s.yaml,通常需要导出环境变量:

export KUBECONFIG=/etc/rancher/k3s/k3s.yaml

minikube 会自动更新默认的~/.kube/config文件,通常无需额外配置即可使用kubectl

4. 部署测试应用

尝试部署一个简单的 Nginx 服务,观察调度速度和 Pod 启动状态。如果在 minikube 上,可能需要开启 ingress 插件才能对外暴露服务:

minikube addons enable ingress

k3s 默认内置了 Traefik 作为 Ingress 控制器,通常无需额外操作即可使用 Ingress 资源。

怎么验证是否生效

部署完成后,通过以下命令确认集群状态是否正常。

轻量级集群选型 k3s 与 minikube 本地开发场景对比

1. 检查节点状态

kubectl get nodes

确保状态显示为Ready

2. 检查系统组件

kubectl get pods -n kube-system

确认核心组件(如 CoreDNS、Network Plugin)处于Running状态。

3. 验证网络连通性

创建一个临时 Pod 测试 DNS 解析和外网访问:

kubectl run -it `--rm` debug `--image`=busybox `--restart`=Never -- nslookup kubernetes.default

常见坑

  • 存储类差异:k3s 默认提供local-path存储类,而 minikube 可能需要手动启用storage-provisioner插件,否则 PVC 会一直 Pending。
  • 网络访问:minikube 运行在 VM 中时,宿主机访问服务可能需要通过minikube ipminikube service命令获取地址,而 k3s 直接使用宿主机网络。
  • 组件版本:k3s 的 Kubernetes 版本跟随其发布节奏,可能略滞后于官方最新稳定版;minikube 可以灵活指定任意 Kubernetes 版本启动。
  • 权限问题:k3s 直接运行在主机上,注意不要与主机上已有的容器运行时或端口冲突。

参考来源

  • k3s 官方文档:Introduction to k3s,URL: https://docs.k3s.io/
  • minikube 官方文档:What is Minikube,URL: https://minikube.sigs.k8s.io/docs/