返回

细说从生成 CRD 到编写自定义控制器的详细步骤

后端

前言

Kubernetes 是一个流行的容器编排系统,它允许您在集群上部署、管理和扩展应用程序。Kubernetes 提供了一个强大的 API,允许您通过自定义资源定义 (CRD) 来扩展其功能。CRD 允许您定义新的资源类型,这些资源类型可以由 Kubernetes 管理。

自定义控制器是 Kubernetes 中的一个组件,它负责监视和管理自定义资源。当自定义资源发生变化时,自定义控制器会采取相应的操作,例如创建、更新或删除资源。

生成 CRD

要生成 CRD,您可以使用 Kubernetes 提供的代码生成工具 controller-gen。该工具可以根据您提供的 OpenAPI 规范生成 CRD 和访问客户端的工具包。

以下是一个使用 controller-gen 生成 CRD 的示例:

controller-gen rbac:role=manager \
  crd:trivialVersions=true \
  paths=./pkg/apis/app/v1 \
  output:crd:artifacts:config=crds \
  output:generate-client:only-verifiers=true \
  output:client:nonNamespacedClient=true

该命令将生成以下文件:

  • crds/app_v1_appresource.yaml: CRD 清单文件
  • pkg/apis/app/v1/: 包含访问客户端的工具包

编写自定义控制器

自定义控制器是一个 Go 程序,它负责监视和管理自定义资源。您可以使用 Kubernetes 提供的控制器脚手架来创建一个自定义控制器。

以下是一个使用控制器脚手架创建自定义控制器的示例:

mkdir my-controller
cd my-controller
controller-gen rbac:role=manager \
  crd:trivialVersions=true \
  output:boilerplate=true \
  output:defaulting=true \
  output:validation=true \
  paths=./pkg/apis/app/v1

该命令将生成以下文件:

  • pkg/apis/app/v1/: 包含访问客户端的工具包
  • pkg/controller/add.go: 添加控制器的代码
  • pkg/controller/controller.go: 控制器的主入口文件
  • config/controller_manager_config.yaml: 控制器管理器配置

部署自定义控制器

要部署自定义控制器,您可以使用 kubectl 命令。

以下是一个使用 kubectl 部署自定义控制器的示例:

kubectl apply -f crds/app_v1_appresource.yaml
kubectl apply -f config/controller_manager_config.yaml

总结

本文介绍了如何使用代码生成工具生成 CRD 和访问客户端的工具包,然后编写自定义控制器。通过阅读本文,您已经掌握了创建自定义资源并编写自定义控制器的技能,这将使您能够扩展 Kubernetes 的功能。