k8s的API资源对象CustomResourceDefinition(CRD)

API资源对象CustomResourceDefinition(CRD)**

在Kubernetes中,像Pod、Service和Deployment这样的资源是由内置的资源类型如Pod、Service和Deployment表示的。而CustomResourceDefinition(CRD)允许你定义和创建自己的资源类型,以满足您的应用程序或基础设施需求。

一旦定义了CRD,可以通过Kubernetes API服务器创建和管理自定义资源的实例,就像处理任何其他本机资源一样。这意味着您可以使用熟悉的Kubernetes工具如kubectl或Kubernetes控制器与管理您的自定义资源进行交互。

CRD提供了一种扩展Kubernetes平台以适应特定要求的方式,并能够构建自定义的运算符或控制器来自动化管理自定义资源。运算符可以监视自定义资源的更改并相应地采取操作,例如提供额外的资源、扩展或执行自定义操作。

CRD已成为扩展Kubernetes的流行机制,在Kubernetes生态系统中的各种项目和框架中广泛使用,如Prometheus、Istio和Knative。

示例:

复制代码
cat > crd-example.yaml << EOF
apiVersion: apiextensions.k8s.io/v1
kind: CustomResourceDefinition
metadata:
  name: myresources.example.com
spec:
  group: example.com
  versions:
    - name: v1
      served: true
      storage: true
      schema:
        openAPIV3Schema:
          description: Define CronTab YAML Spec
          type: object
          properties:
            spec:
              type: object
              properties:
                name:
                  type: string
                age:
                  type: integer
  scope: Namespaced
  names:
    plural: myresources
    singular: myresource
    kind: MyResource
    shortNames:
      - mr
EOF

说明:

和我们定义普通的资源对象比较类似,这里可以随意定义一个自定义的资源对象,但是在创建资源的时候,肯定不是任由我们随意去编写 YAML 文件的,当我们把上面的 CRD 文件提交给 Kubernetes 之后,Kubernetes 会对我们提交的声明文件进行校验,从定义可以看出 CRD 是基于 OpenAPI v3 schem 进行规范的。

  • apiVersion:指定所使用的 CRD API 的版本,此示例使用了 apiextensions.k8s.io/v1 版本。
  • kind:定义资源类型为 CustomResourceDefinition。
  • metadata:定义元数据,其中 name 字段指定了 CRD 的名称为 myresources.example.com
  • spec:定义了 CRD 的规范。
  • group:指定 CRD 所属的 API 组,此示例中为 example.com
  • versions:定义 CRD 的版本列表。
  • name:指定版本的名称,此示例中为 v1。
  • served:指定此版本是否由 API 服务器提供服务,设为 true 表示提供服务。
  • storage:指定此版本是否持久化存储数据,设为 true 表示持久化存储。
  • openAPIV3Schema: 指定自定义资源的 OpenAPI v3 架构定义
  • type:定义类型
  • properties:定义对象属性
  • name/age:自定义具体属性的名字
  • scope:指定资源的作用域,此示例中为 Namespaced,表示资源在命名空间级别进行管理。
  • names:定义了资源的名称相关信息。
  • plural:指定资源的复数形式名称,此示例中为 myresources。
  • singular:指定资源的单数形式名称,此示例中为 myresource。
  • kind:指定资源的类型名称,此示例中为 MyResource。
  • shortNames:指定资源的缩略名称列表,此示例中只包含一个缩略名称 mr。

应用

复制代码
kubectl apply -f crd-example.yaml

查看crd

复制代码
kubectl get crd

一旦创建完自定义的CRD,那么就会生成一个自定义的API

复制代码
/apis/example.com/v1/namespaces/*/myresources/...

创建自定义资源实例,基于前面CRD定义的资源

复制代码
cat > myresource-instance.yaml <<EOF
apiVersion: example.com/v1
kind: MyResource   ##和上面CRD里相对应
metadata:
  name: myresource-instance
spec: ##以下两个key必须在CRD中有过定义
  name: example
  age: 25
EOF

应用

复制代码
kubectl apply -f myresource-instance.yaml

查看MyResource

复制代码
kubectl get MyResource  #或者用短名称
kubectl get mr

以上定义的CRD,仅仅是写入到了etcd中,并没有其它用处,要想让它有进一步作用,还得去定义Controller

而Controller更多的是开发范畴的事情,咱们暂时先不涉及。

相关推荐
姚不倒3 小时前
负载均衡的概念、策略以及两个核心组件 Nginx 和 Kube-proxy 的对比。
运维·nginx·云原生·kubernetes
地瓜伯伯3 小时前
Nginx终极配置指南:负载均衡、限流、反向代理、IP白名单、SSL、云原生、DNS解析、缓存加速全都有
spring boot·nginx·spring·spring cloud·微服务·云原生·负载均衡
颜颜yan_8 小时前
在openEuler上搞个云原生AI模型商店:像点外卖一样部署模型
人工智能·云原生
阿里云云原生9 小时前
线下活动速递丨AI 原生应用开源开发者沙龙·杭州站
云原生
阿里云云原生10 小时前
MCP 网关实战:基于 Higress + Nacos 的零代码工具扩展方案
云原生·mcp
阿里云云原生10 小时前
UModel 查询:驯服“可观测性混乱”,阿里云的图模型建模利器!
云原生
水滴与鱼11 小时前
DOCKER制作ROS运行的镜像文件
运维·docker·容器
洒家肉山大魔王12 小时前
Kubernetes中Pod 处于 CrashLoopBackOff 状态(生产环境)
linux·容器·kubernetes·pod·pod循环重启
weixin_3077791314 小时前
采用Amazon SES解决电商邮件延迟:以最小化运维实现最大效率的方案选择
运维·云原生·架构·云计算·aws
Lynnxiaowen14 小时前
今天我们学习kubernetes内容Ingress资源对象
学习·容器·kubernetes