我让AI写了一篇kind(kubernetes in docker)是什么的介绍文章,一起学习
前置:需要 Docker(或 Podman/nerdctl),以及可选但建议安装的kubectl。方式一(Go 用户)安装后kind一般在,需保证该目录在PATH中。方式二:从Releases下载对应平台的二进制,改名为kind并放入PATH。包管理器示例、Scoop、Winget 等(见官方 Quick Start)。注意:CI 场景建议使用带稳定 tag 的版本(如 v0.31.0);若需测
前言:这个是我做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)
三、工作原理(架构要点)
-
“节点”即容器
每个集群由多个 Docker 容器组成,每个容器扮演一个 K8s 节点(control-plane 或 worker)。 -
用 kubeadm 引导
每个“节点”都是用 kubeadm 来初始化和加入集群的,和真实环境一致。 -
镜像层次
- base image:包含 systemd、证书、mount 等基础环境。
- node image:在 base 之上安装 Kubernetes 组件(kubeadm、kubelet 等)。
预构建的 node 镜像托管在 Docker Hub:kindest/node。
-
集群创建流程(简化)
- 按配置启动若干“节点”容器,先处于“暂停”状态。
- 在容器内做挂载、预加载镜像等准备。
- 发信号启动 systemd,等 Docker/containerd 就绪后在节点上执行 kubeadm。
- 导出 KUBECONFIG,并应用 Pod 网络(如 overlay)。
- 用户即可用 kubectl 操作该集群。
-
状态与可移植性
- 集群状态存在容器内(标签、文件系统、进程),不依赖外部数据库。
- 唯一“有状态”的是容器运行时(Docker 等),Kind 本身不单独存状态,便于复现和迁移。
四、Kind 的组成(官方)
- Go 包:实现集群创建、镜像构建等(如
pkg/cluster、pkg/build)。 - 命令行工具:
kind,基于上述包封装,供用户和脚本使用。 - Docker 镜像:用于在容器中运行 systemd、Kubernetes 等(base + node image)。
- 与 kubetest 的集成:基于同一套包,便于 K8s 测试流水线使用。
五、主要特性(Why kind?)
- 支持多节点集群(含 HA 多 control-plane)。
- 支持从 Kubernetes 源码 构建节点镜像(便于测未发布版本)。
- 支持 make/bash 或 Docker 等多种构建方式,也可用官方预构建镜像。
- 支持 Linux、macOS、Windows。
- CNCF 认证的 Kubernetes 一致性安装器,可通过一致性测试。
- 容器运行时:除 Docker 外,还支持 Podman、nerdctl(可选,需相应配置)。
六、安装(官方推荐方式摘要)
- 前置:需要 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)。
- macOS:
注意: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-kindkubectl 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-plane或role: 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
十、写教学文章时可用的结构建议
- 引言:什么是“本地 K8s”、为何需要 Kind。
- Kind 是什么:名字含义、一句话定义、与 minikube/k3d 等的简单对比(可选)。
- 原理简述:节点=容器、kubeadm、镜像层次、无外部状态。
- 安装与环境:Docker + kind(+ kubectl),按读者系统选一种安装方式。
- 第一个集群:
kind create cluster→kubectl get nodes→kind delete cluster。 - 进阶:多节点/HA 配置、指定 K8s 版本、
kind load docker-image、端口映射/Ingress(可引用官方 Ingress/LoadBalancer 文档)。 - 适用场景:学习、开发、CI、测 K8s 本身。
- 参考与延伸:官方文档与 CNCF 一致性认证。
以上内容均来自 Kind 官方文档,可直接用作教学文章的素材与结构参考。
更多推荐



所有评论(0)