初始设计
本文档介绍了
kind的一些初始设计。注意:其中一些内容相对于当前实现已经过时。这主要用于历史目的,原始提案 包含更多详细信息。
展望未来,设计原则 可能更相关。
概述 🔗︎
kind 或 kubernetes in docker 是一套用于本地 Kubernetes “集群” 的工具,其中每个“节点”都是一个 Docker 容器。kind 针对 Kubernetes 测试。
kind 分为实现大多数功能的 go 包、供用户使用的命令行和“节点”基础镜像。目的是,kind 包套件最终应该可以被其他工具(例如 kubetest)导入和重用,而 CLI 提供了一种快速使用和调试这些包的方法。
有关 原始提案,请参阅 kubernetes-sig-testing 帖子(注意:本文档与 kubernetes-sig-testing 共享)。
简而言之,kind 针对用于测试目的的本地集群。虽然并非所有测试都可以在没有“真实”集群的情况下进行,但我们希望能够在“云”中使用提供商启用的 CCM,但我们可以进行足够的测试,因此我们需要一些东西
- 运行非常便宜的集群,任何开发人员都可以本地复制
- 与我们的工具集成
- 有充分的文档记录和可维护性
- 非常稳定,并具有广泛的错误处理和健全性检查
- 通过所有一致性测试
在实践中,kind 看起来像这样:
集群 🔗︎
集群由 pkg/cluster 中的逻辑管理,kind cli 封装了该逻辑。
每个“集群”都由一个内部但众所周知的 docker 对象标签 键标识,每个“节点”容器的值为集群名称/ID。
我们最初将这种类型的状态卸载到容器和 Docker 中。类似地,容器名称由 kind 自动管理,尽管我们将选择标签而不是名称,因为标签更不容易出错,并且被正确地命名空间化。这样做还可以避免我们管理主机文件系统上的任何内容,但不会降低使用率。
KUBECONFIG 将被绑定安装到一个临时目录,工具能够从容器中检测到这一点,并提供帮助程序来使用它。
镜像 🔗︎
要在容器中运行 Kubernetes,我们首先需要合适的容器镜像。使用单个标准 基础层,其中包含基本实用程序,如 systemd、证书、挂载等。
在该镜像之上安装 Kubernetes 等,并可能在预构建的镜像中缓存。我们预计将提供已安装版本的镜像,用于与 Kubernetes 集成。
有关更多信息,请参阅 node-image.md。
集群生命周期 🔗︎
集群创建 🔗︎
每个“节点”都作为 Docker 容器运行。每个容器最初启动到一个伪“暂停”状态,入口点 等待 SIGUSR1。这使我们能够在启动 systemd 和所有组件之前使用 docker exec ... 和其他工具来操作和检查容器。
此设置包括修复挂载和预加载保存的 Docker 镜像。
一旦节点准备就绪,我们就向入口点发出信号,使其真正“启动”节点。
然后,我们等待 Docker 服务在节点上准备就绪,然后再运行 kubeadm 来初始化节点。
一旦 kubeadm 启动,我们就导出 KUBECONFIG,然后应用一个 覆盖网络。
此时,用户可以使用导出的 kubeconfig 测试 Kubernetes。
集群删除 🔗︎
集群中的所有“节点”容器都使用 Docker 标签进行标记,这些标签通过选择的集群名称(默认值为“kind”)标识集群,要删除集群,我们只需列出并删除具有此标签的容器即可。

