>_ DevTrendszh

语言

首页

语言

板块

前端 后端 移动端 DevOps AI / ML 游戏开发 区块链 嵌入式 安全
Go

本地 Kubernetes:一分钟快速启动,无需重型虚拟机

在远程云集群上测试 Kubernetes 清单或 operators 既昂贵又缓慢。等待构建、推送到 registry、部署到开发环境,这些很快就会让人厌倦。之前,Minikube 或 K3s 常被用于本地测试。但当你需要在 CI 中运行快速集成测试,或在几秒钟内启动笔记本电脑上的集群时,虚拟机和额外的抽象层反而成了阻碍。

2018 年,Kubernetes SIG 的工程师们在测试 Kubernetes 本身时遇到了这个问题。为此,他们编写了 kind(Kubernetes IN Docker)。

kind logo

这个工具非常成功,以至于普通开发者开始积极地将其用于日常工作以及运行 CI/CD 流水线。

kind 的工作原理

原理很简单。kind 不是为每个集群节点运行完整的虚拟机,而是启动常规的 Docker 容器。在这种容器内部运行的是 systemd、容器运行时和 Kubernetes 组件。

kubeadm 负责组件部署,因此环境尽可能接近真实的生产集群。

kind create cluster

该项目使用 Go 编写,可以在任何运行容器运行时的环境中工作。除了 Docker,还支持 Podman 和 nerdctl,可以在 Linux、macOS 和 Windows 上运行。

安装并运行你的第一个集群

如果你系统上已经有 Go 和 Docker,启动一个基本集群只需要一行命令:

go install sigs.k8s.io/[email protected] && kind create cluster

如果你不想安装 Go,也可以通过标准包管理器轻松下载二进制文件。

在 macOS 上:

brew install kind

在 Linux 上:

curl -Lo ./kind https://kind.sigs.k8s.io/dl/v0.32.0/kind-linux-amd64
chmod +x ./kind
sudo mv ./kind /usr/local/bin/kind

之后,kind create cluster 命令将创建一个单节点集群。该工具会自动配置你的 kubectl,将上下文切换到新集群。

让我们验证一下它是否正常工作:

kubectl get nodes

当你不再需要集群时,使用 kind delete cluster 命令删除它。

多节点集群和高级配置

单节点集群适合简单测试,但 Kubernetes 中的真正问题往往在处理多个节点、污点和亲和性时才会显现。kind 可以使用声明式配置启动任意复杂度的集群。

创建一个 kind-config.yaml 文件:

kind: Cluster
apiVersion: kind.x-k8s.io/v1alpha4
nodes:
role: control-plane
role: control-plane
role: control-plane
role: worker
role: worker

使用配置文件运行集群创建:

kind create cluster --config kind-config.yaml

结果,你将在机器上获得一个高可用集群,包含三个 control-plane 节点和两个 worker 节点。所有这些都在常规容器内启动,不会给你的 CPU 增加额外负担。

快速加载本地镜像

对开发者来说最方便的功能之一是直接将本地 Docker 镜像传入集群,而无需私有 registry。

通常的流程是这样的:构建镜像、推送到 Docker Hub 或本地 Nexus、拉取到集群。kind 简化了这一步骤。你在本地构建镜像,然后立即将其加载到节点中:

docker build -t my-app:v1 .
kind load docker-image my-app:v1

之后,你可以在应用清单中安全地指定 image: my-app:v1imagePullPolicy: Never。集群会立即看到该镜像。

在实践中有什么用

该项目已在 GitHub 上获得超过 15,000 颗星,成为测试 Kubernetes 基础设施的事实标准。以下是它节省时间的主要场景:

  1. CI 中的集成测试。在 GitHub Actions 或 GitLab CI runner 中启动 kind 只需几秒钟。你可以轻松启动一个全新的集群,运行 Helm chart 或 operator 的测试,然后在流水线完成后立即删除。
  2. 本地开发 controllers 和 operators。当你在 Go/Python 中编写自己的 CRD 或 operator 时,你需要快速反馈。kind 可以即时启动,并且轻松重置到干净状态。
  3. 学习和实验。想测试 Ingress controller 的行为、CNI 插件,或者查看当某个节点宕机时应用程序如何表现?在本地笔记本电脑上搭建这样的实验环境只需要几分钟。

需要注意的事项

启动之前,请记住几个细节。kind 主要是为测试而创建的,所以不要尝试在生产环境中使用它。

请注意,使用本地端口需要在集群配置中明确指定端口转发(extraPortMappings)。如果你需要从宿主机访问 kind 内部的服务,必须提前在配置文件中指定所需的端口。

除此之外,kind 是笨重虚拟机的绝佳替代品。它快速、可预测且资源友好。

相关项目