前言:这个是我做algocd实验的时候,想到的一个测试方法,就是问AI,要模拟生产环境来部署一套CICD,就是gitlab CI + argo CD,应该怎么部署。我本来准备在本地弄一套minikube,但是弄不成,好麻烦,好多镜像呀网络呀不通,最后AI建议我用kind,就是本文介绍的这个,然后我试了一下,很方便,mac电脑上弄个docker desktop就行,然后基于kindest/node这个镜像就起来一套本地的k8s集群,这个集群就是跑在一个容器里面。然后在这个集群里面按照argocd的官方安装方式,用curl …/install.sh啥的就可以把argocd安装在本地,这个在argocd的官网去看,很简单,别自己折腾,就按照官方的方式弄就好了,这样可以在本地电脑上把argocd装在这个kind的k8s集群里面,然后我按照AI提示的方式,在本地弄了一个git仓库,这个仓库连着的远程仓库有个gitee和github,做的是远程双活,然后我让这个argocd服务监听着我这个git仓库,我改图3里面的yaml文件,比如把容器的副本replicas改成3,它就是3个pod,改成1,它过一会就能变成1个pod。说明这个argocd是成功的。给开发用的时候,让开发CD,就是给他们一个gitlab的一个仓库的权限,里面比如就是一个deployment.yaml的文件,每次他们CI了新镜像到harbor仓库,或者到云仓库,不管哪。让开发自己git修改一下这个deployment.yaml里面的image的tag就好了,改成最新的版本,如果开发要回退,那也是一样,通过git去改deployment.yaml里面的image的tag。审计就看git commit记录了。这个就算是gitops的CD部分。那么如果我们也要把CI连进去,其实就是做的gitlab runner这些东西,就是比如java开发,自己改了什么东西,自动基于Dockerfile打出来服务镜像,这一套要弄也得花时间去搭建。目前来看CD这样是OK的,CI看看要不要弄。这篇文章主要是让我们来了解kind这个工具,用于测试还是很方便的。
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

「下面根据 Kind 官方文档整理了一份:Kind 是什么、怎么用、设计目的是什么,方便大家系统了解。」

Kind(Kubernetes in Docker)官方资料整理 — 教学文章参考

资料来源:Kind 官方站点 https://kind.sigs.k8s.io/ 及文档(Quick Start、Initial design、Principles)。
文档许可:CC BY 4.0。本文仅作学习与教学参考。


一、Kind 是什么?

Kind 的完整含义是 Kubernetes IN Docker(首字母 K-I-N-D)。

  • 一句话定义:Kind 是一个用 Docker 容器充当“节点” 来运行本地 Kubernetes 集群的工具。
  • 官方表述“kind is a tool for running local Kubernetes clusters using Docker container ‘nodes’.”

也就是说:每个 K8s 的 control-plane 或 worker“节点”都是一台 Docker 容器,多台这样的容器组成一个完整的本地 K8s 集群。


二、设计目的与主要用途

  • 首要目标:为 测试 Kubernetes 本身 而设计(例如开发、CI、端到端测试)。
  • 也可用于:本地开发、CI/CD 中的 K8s 测试环境。

设计文档中强调的目标包括:

  • 运行成本极低的集群,任何开发者都能在本地复现
  • 与现有测试工具(如 kubetest)集成
  • 文档完善、可维护
  • 稳定、有充分错误处理和检查
  • 通过 Kubernetes 一致性测试(CNCF certified conformant Kubernetes installer)

三、工作原理(架构要点)

  1. “节点”即容器
    每个集群由多个 Docker 容器组成,每个容器扮演一个 K8s 节点(control-plane 或 worker)。

  2. 用 kubeadm 引导
    每个“节点”都是用 kubeadm 来初始化和加入集群的,和真实环境一致。

  3. 镜像层次

    • base image:包含 systemd、证书、mount 等基础环境。
    • node image:在 base 之上安装 Kubernetes 组件(kubeadm、kubelet 等)。
      预构建的 node 镜像托管在 Docker Hub:kindest/node
  4. 集群创建流程(简化)

    • 按配置启动若干“节点”容器,先处于“暂停”状态。
    • 在容器内做挂载、预加载镜像等准备。
    • 发信号启动 systemd,等 Docker/containerd 就绪后在节点上执行 kubeadm。
    • 导出 KUBECONFIG,并应用 Pod 网络(如 overlay)。
    • 用户即可用 kubectl 操作该集群。
  5. 状态与可移植性

    • 集群状态存在容器内(标签、文件系统、进程),不依赖外部数据库。
    • 唯一“有状态”的是容器运行时(Docker 等),Kind 本身不单独存状态,便于复现和迁移。

四、Kind 的组成(官方)

  • Go 包:实现集群创建、镜像构建等(如 pkg/clusterpkg/build)。
  • 命令行工具kind,基于上述包封装,供用户和脚本使用。
  • Docker 镜像:用于在容器中运行 systemd、Kubernetes 等(base + node image)。
  • 与 kubetest 的集成:基于同一套包,便于 K8s 测试流水线使用。

五、主要特性(Why kind?)

  • 支持多节点集群(含 HA 多 control-plane)。
  • 支持从 Kubernetes 源码 构建节点镜像(便于测未发布版本)。
  • 支持 make/bashDocker 等多种构建方式,也可用官方预构建镜像。
  • 支持 Linux、macOS、Windows
  • CNCF 认证的 Kubernetes 一致性安装器,可通过一致性测试。
  • 容器运行时:除 Docker 外,还支持 Podmannerdctl(可选,需相应配置)。

六、安装(官方推荐方式摘要)

  • 前置:需要 Docker(或 Podman/nerdctl),以及可选但建议安装的 kubectl
  • 方式一(Go 用户)
    go install sigs.k8s.io/kind@v0.31.0
    安装后 kind 一般在 $(go env GOPATH)/bin,需保证该目录在 PATH 中。
  • 方式二:从 Releases 下载对应平台的二进制,改名为 kind 并放入 PATH
  • 包管理器示例
    • macOS:brew install kind
    • Windows:Chocolatey choco install kind、Scoop、Winget 等(见官方 Quick Start)。

注意:CI 场景建议使用带稳定 tag 的版本(如 v0.31.0);若需测 K8s 最新源码,可从源码安装。


七、基本用法(写教学时可展开)

创建集群

kind create cluster
  • 默认集群名为 kind,可用 --name 指定。
  • 可用 --image=... 指定节点镜像(即 K8s 版本)。
  • 等待 control plane 就绪:--wait 30s--wait 5m 等。

与集群交互

  • Kind 会把该集群的 kubeconfig 写入 ~/.kube/config(或 KUBECONFIG 指定路径)。
  • 多集群时用 context 区分,例如:
    kubectl cluster-info --context kind-kind
    kubectl cluster-info --context kind-kind-2

删除集群

kind delete cluster

指定名字:kind delete cluster --name <集群名>
删除不存在的集群不会报错(幂等)。

多节点与 HA 示例(配置文件)

  • 多节点(如 1 control-plane + 2 worker):通过 kind create cluster --config <file>,在 YAML 中写多个 nodes,并指定 role: control-planerole: worker
  • HA:配置多个 role: control-plane 的节点即可。

把本地镜像导入集群

kind load docker-image my-app:latest

适合本地构建后不推送到镜像仓库,直接在 Kind 里测。注意镜像拉取策略(如避免 :latest 导致总是拉取,可用 imagePullPolicy: IfNotPresent)。

指定 K8s 版本

  • 通过 --image 使用对应版本的 kindest/node 镜像;具体版本与镜像 tag 见 Kind 发布说明

八、设计原则(理解“定位”用)

官方设计原则文档中的要点(写文章可简要带过):

  • 优雅降级:尽量不因单点失败而整体失败,部分可用仍可调试。
  • 以 CRI 为界:尽量只依赖 CRI 提供的能力,便于换容器运行时。
  • 复用现有工具:用 kubeadm、kustomize、k8s 官方库等,不重复造轮子。
  • 避免破坏用户:CLI 与配置避免不兼容变更,考虑长期可维护。
  • 遵循 K8s API 惯例:配置用 K8s 风格 YAML,少用复杂 flag。
  • 最小假设:只假设有 Docker(或 Podman/nerdctl)和符合格式的节点镜像。
  • 封闭性(Hermetic):追求可复现、少依赖外部服务。
  • 无外部状态:状态只在容器内,不另建数据库。
  • 自动化优先:端到端自动化测试是首要使用场景,特性设计要考虑脚本化。

九、官方链接(可放在文章末尾)

  • 官网:https://kind.sigs.k8s.io/
  • 用户文档 Quick Start:https://kind.sigs.k8s.io/docs/user/quick-start/
  • 设计:Initial design、Principles、Base/Node image 等见官网 “Design” 目录
  • GitHub:https://github.com/kubernetes-sigs/kind
  • 预构建节点镜像:https://hub.docker.com/r/kindest/node
  • 发布与镜像版本:https://github.com/kubernetes-sigs/kind/releases

十、写教学文章时可用的结构建议

  1. 引言:什么是“本地 K8s”、为何需要 Kind。
  2. Kind 是什么:名字含义、一句话定义、与 minikube/k3d 等的简单对比(可选)。
  3. 原理简述:节点=容器、kubeadm、镜像层次、无外部状态。
  4. 安装与环境:Docker + kind(+ kubectl),按读者系统选一种安装方式。
  5. 第一个集群kind create clusterkubectl get nodeskind delete cluster
  6. 进阶:多节点/HA 配置、指定 K8s 版本、kind load docker-image、端口映射/Ingress(可引用官方 Ingress/LoadBalancer 文档)。
  7. 适用场景:学习、开发、CI、测 K8s 本身。
  8. 参考与延伸:官方文档与 CNCF 一致性认证。

以上内容均来自 Kind 官方文档,可直接用作教学文章的素材与结构参考。

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐