开发

🚧 正在进行中 🚧

本页面旨在为贡献者提供有关开发 kind 项目的介绍。

内容 🔗︎

概述 🔗︎

KIND 提供了各种用于开发的实用程序,这些实用程序都封装在 make 中。

大多数脚本或多或少只需要主机上的 make + bash,并且通常坚持使用 POSIX 实用程序。一些脚本使用 docker,例如用于构建镜像或使用包含特殊工具的 docker 镜像。

本指南将向您介绍重要的 make 目标及其用法。

构建 🔗︎

构建 kind 🔗︎

调用 make buildbin/kind 将在成功构建后包含新构建的 kind 二进制文件。

与其他目标一样,此目标会自动管理正确的 .go-version,并且不需要您安装任何工具(只需 make / bash)。我们使用 hack/third_party/gimme 中的 gimme 副本来实现这一点。

构建基础镜像 🔗︎

注意:大多数开发不需要更改基础镜像,但是如果您的更改确实需要,以下是构建和测试它的方法。

要构建用于开发的“基础镜像”,请在 images/base 目录中使用 make quick 命令:make -C images/base quick

默认情况下,基础镜像将被标记为 kindest/base:$(date +v%Y%m%d)-$(git describe --always --dirty) 格式。如果您想更改它,可以设置 TAG 环境变量。

TAG=v0.1.0 make -C images/base quick

对于“生产”基础镜像,维护者之一将运行 make -C images/base push,该命令会为所有架构交叉编译并推送到注册表。

您通常不需要在开发过程中进行交叉构建,并且目前交叉构建必须被推送到注册表而不是加载到本地,这是由于 docker buildx 的限制(TODO:链接到上游问题)。

要测试您的更改,请使用 make quick 构建的镜像,并在运行 kind build node-image / 构建节点镜像时将其用作 --base-image 标志。然后,您可以使用此节点镜像创建集群(kind create cluster --image=kindest/node:latest

对于“生产”基础镜像更新,维护者之一将更新 pkg/build/nodeimage/defaults.go 中的 DefaultBaseImage,使其指向新推送的镜像。

构建节点镜像 🔗︎

请参阅:“构建镜像”,位于用户 快速入门 中。

更新生成的代码 🔗︎

您可以使用 make generate 重新生成签入的生成源代码。KIND 不使用太多生成的代码,但确实使用了一点。具体来说,kind 使用 [deepcopy-gen] 为 API 类型生成 DeepCopy 方法。

还有一个 make update 目标,旨在涵盖所有自动代码生成

测试 🔗︎

与其他目标一样,这些目标会自动管理正确的 .go-version,并且不需要您安装任何工具(只需 make / bash)。

端到端测试 🔗︎

🚧 更多内容即将推出 … 🚧

简而言之:hack/ci/e2e.sh 将针对您本地的 Kubernetes 检出运行端到端测试。

根据您的更改,您可能需要进行端到端测试。

将来,我们计划进行更便宜的端到端冒烟测试,这些测试不需要构建 Kubernetes。

代码风格检查 🔗︎

您可以使用 make verify 一次运行所有代码风格检查。

代码风格检查包括

文档 🔗︎

我们的文档使用 hugo 构建,就像 kubernetes.io 一样。

我们提供了一个用于开发的 Makefile,它会自动管理 go 工具链,并使用它来构建和运行 hugo。您只需要安装 makebashcurlwget

Markdown 内容位于 site/content/ 下,其结构与本网站镜像。

静态文件位于 site/static 下(例如,图像位于 site/static/images/ 下)。

对于简单的内容更改,您也可以直接编辑 markdown 源代码并发送拉取请求。netlify 将创建构建预览,您可以通过单击 GitHub 上拉取请求底部 deploy/netlify 状态旁边的“详细信息”链接来浏览它。

这些也是可预测的,例如 https://deploy-preview-$PR_NUMBER--k8s-kind.netlify.app/,只需将 $PR_NUMBER 替换为您的拉取请求的编号。

对于更复杂的网站/文档开发,您可以从 kind 存储库中运行 make -C site serve,以运行文档的本地实例,可以在 https://127.0.0.1:1313 上浏览。

此网站在 site/layoutssite/assets 下有一个自定义的 hugo 主题。它大多比较简单,但有一些额外的功能

简码 🔗︎

简码 是 hugo 的一项功能,kind 文档使用以下自定义简码

  1. absURL – 当您需要绝对 URL(例如,对于 kubectl apply -f $URL)时,此简码会将输入 URL 转换为绝对 URL。用法:{{< absURL "some/URL" >}}

  2. securitygoose – 这是一个用于有趣的安全通知的特殊简码。它会包装内部 markdown 内容。用法:{{< securitygoose >}} 这里有通知 markdown 内容 {{</ securitygoose >}}

  3. codeFromFile – 从文件创建带有复制按钮的漂亮代码块。用法:{{< codeFromFile file="static/examples/config-with-mounts.yaml" lang="yaml" >}}

  4. codeFromInline – 从内联代码片段创建带有复制按钮的漂亮代码块。用法:{{< codeFromInline lang="go" >}} func main() {{</ codeFromInline >}}

  5. readFile – 用于内联文件内容。用法:{{% readFile "static/examples/ingress/contour/patch.json" %}}

CI 🔗︎

KIND 项目在 Kubernetes 的自定义 CI“prow”(prow.k8s.io)中/上运行。这对于 KIND 存储库中的 CI 和 Kubernetes 存储库中使用 kind 测试 Kubernetes 的 CI 都是如此。

需要注意的是,我们在 kind 存储库中运行更大、更慢的 Kubernetes 端到端测试,以模拟我们在 Kubernetes 存储库中运行的测试。这是因为 Kubernetes 使用 kind 在 HEAD 进行测试,以获得运行最新 Kubernetes 的最新修复程序。我们确保测试在合并任何代码更改之前继续在 kind 存储库中运行。

我们还对 GitHub Actions 进行了一些有限的实验,目前仅用于测试 kind 中对 podmannerdctl 的支持。

配置 🔗︎

我们存储库的 prow 配置位于 https://git.k8s.io/test-infra/config/jobs/kubernetes-sigs/kind

GitHub Actions 在 kind 存储库中的 .github/workflows 中配置。