开源工具守护 Kubernetes CRD
2023-09-18 16:48:28
前言
Kubernetes 自定义资源定义 (CRD) 为您提供了强大的工具,可以根据您的特定需求扩展 Kubernetes 集群。通过创建自定义资源,您可以创建自己的 API 对象,这些对象可以由 Kubernetes 管理和编排。本文将指导您完成使用 CRD 扩展 Kubernetes 集群的整个过程,从编写 YAML 定义到管理和验证自定义资源。
编写 CRD
编写 CRD 时,您需要创建一个 YAML 文件来定义自定义资源的模式和行为。该文件应包括以下部分:
- apiVersion: 指定 CRD 的 API 版本。
- kind: 指定自定义资源的类型。
- metadata: 包含关于自定义资源元数据的信息。
- spec: 定义自定义资源的实际规范。
以下是编写简单 CRD 的示例 YAML 文件:
apiVersion: apiextensions.k8s.io/v1
kind: CustomResourceDefinition
metadata:
name: mycustomresource.example.com
spec:
group: example.com
versions:
- name: v1
served: true
storage: true
schema:
openAPIV3Schema:
type: object
properties:
spec:
type: object
properties:
replicas:
type: integer
minimum: 1
maximum: 10
部署 CRD
要部署 CRD,请使用 kubectl
命令:
kubectl apply -f mycustomresource.yaml
创建自定义资源
部署 CRD 后,您就可以创建自定义资源。为此,请使用 kubectl create
命令,如下所示:
kubectl create -f mycustomresource-instance.yaml
管理自定义资源
一旦创建了自定义资源,就可以使用 kubectl
命令来管理它们。以下是一些常见操作:
- 获取自定义资源:
kubectl get mycustomresource my-instance
- 更新自定义资源:
kubectl apply -f mycustomresource-updated.yaml
- 删除自定义资源:
kubectl delete mycustomresource my-instance
自定义操作
CRD 还允许您定义自定义操作。这些操作可以用来执行对自定义资源的特定操作。例如,您可以定义一个操作来启动或停止自定义资源。要定义自定义操作,请在 CRD 的 YAML 文件中添加 action
部分,如下所示:
...
actions:
- name: start
verbs:
- create
- update
- name: stop
verbs:
- update
...
OpenAPI 模式
OpenAPI 模式为 CRD 提供了标准化的方式来定义其模式。这使得在不同的工具和语言之间共享和理解 CRD 变得更容易。在 CRD 的 YAML 文件中,您可以使用 openAPIV3Schema
字段来指定 OpenAPI 模式。
控制器
控制器负责管理和验证自定义资源。它们确保自定义资源符合其 CRD 中定义的模式,并执行自定义操作。您可以通过编写自己的控制器或使用现有控制器(例如 Kubernetes 的内置控制器)来管理自定义资源。
实践示例
为了演示如何使用 CRD 扩展 Kubernetes 集群,让我们创建一个示例应用程序。该应用程序将使用自定义资源来管理具有可扩展副本数的部署。
- 编写 CRD
首先,让我们编写一个 CRD,如下所示:
apiVersion: apiextensions.k8s.io/v1
kind: CustomResourceDefinition
metadata:
name: scalabledeployments.example.com
spec:
group: example.com
versions:
- name: v1
served: true
storage: true
schema:
openAPIV3Schema:
type: object
properties:
spec:
type: object
properties:
replicas:
type: integer
minimum: 1
maximum: 10
- 部署 CRD
使用以下命令部署 CRD:
kubectl apply -f scalabledeployment.yaml
- 创建自定义资源
现在,我们可以创建一个自定义资源来管理我们的部署:
apiVersion: example.com/v1
kind: ScalableDeployment
metadata:
name: my-scalable-deployment
spec:
replicas: 3
- 创建部署
自定义资源创建后,Kubernetes 将创建一个部署,具有指定的副本数:
kubectl get deployments
NAME READY UP-TO-DATE AVAILABLE AGE
my-scalable-deployment 3/3 3 3 14m
- 更新自定义资源
我们可以通过更新自定义资源来调整部署的副本数:
apiVersion: example.com/v1
kind: ScalableDeployment
metadata:
name: my-scalable-deployment
spec:
replicas: 5
- 验证自定义资源
Kubernetes 将验证自定义资源是否符合其 CRD 中定义的模式。如果自定义资源不符合模式,则 Kubernetes 将返回错误消息。
结论
通过使用 CRD,您可以扩展 Kubernetes 集群,使其适应您的特定需求。本文提供了有关如何编写、部署和管理 CRD 的全面指南。通过遵循提供的步骤和示例,您可以掌握 CRD 的各个方面,并增强您的 Kubernetes 技能。