K8s之CRD

本文介绍了Kubernetes中的CustomResourceDefinition(CRD)概念,包括其作为扩展机制的作用,如何定义和使用CRD,以及在腾讯云TKE和Istio中的应用实例。CRD允许用户定义新的资源类型,用于外部数据存储和Kubernetes资源抽象。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、CRD概述

Kubernetes中将一切都视为资源,资源是Kubernetes API中的一个Endpoint,存储了某种类型的API对象,例如Pod、Deployment、Configmap、Volume等都是一种资源,不过这些都属于内置资源,是Kubernetes默认提供的资源类型,在Kubernetes V1.7之后提供了一种自定义资源,代表某种自定义的配置或者独立运行的服务,这种自定义资源类型就是CRD(CustomerResourceDefinition)。

Kubernetes之CRD是一种强大的扩展机制,允许用户自定义新的资源类型,就是为了满足Kubernetes自身不具备的一些功能,可以通过CRD保证新的资源快速的注册和使用,可以把CRD理解成两部分,Customer Resource和Customer ControllerCustomer Resource可以让用户简单的存储和获取结构化数据,将这种对象动态的注册到Kubernetes集群中而Customer Controller可以把上面自定义的资源更新成用户想要的状态。

例如,腾讯云TKE使用CRD:logcollectors.ccs.cloud.tencent.com以添加日志收集服务,而Istio也大量使用到了CRD。

二、CRD的使用场景

1. 提供、管理外部数据存储,因为Customer Resource就是一种存在Etcd中的数据结构,你可以将外部数据存储到Etcd中而不使用单独的数据库,用Kubernetes的声明式API去管理他的生命周期。

2. 对Kubernetes的基础资源进行更高层次的抽象,例如:一些自定义控制器,你既可以管理自定义的资源状态,也可以改变Kubernetes原有资源,如Ingress-controller。

三、如何定义CRD

1、创建CRD步骤

  1. 定义CRD的规范,包括资源名称、API版本、字段等。
  2. 使用kubectl或其他Kubernetes API工具创建自定义资源。

 

2、定义CRD

a、定义CRD规范

创建一个名为“my-crd-definition.yaml”的文件,并添加以下内容:

apiVersion: apiextensions.k8s.io/v1beta1  
kind: CustomResourceDefinition  
metadata:  
  name: my-crds.my-group.example.com  
spec:  
  group: my-group.example.etcdctl.io  
  version: v1alpha1  
  scope: Cluster  
  names:  
    plural: my-crds  
    singular: my-crd  
    kind: MyCrd  
    shortNames:  
    - mycrd

在这个规范中,我们定义了一个名为“my-crds”的自定义资源,其API版本为“v1alpha1”,并且定义了该资源的字段和属性。


b、创建CRD

使用kubectl或其他Kubernetes API工具来创建自定义资源。例如,使用以下命令来创建上述定义的CRD:

kubectl apply -f my-crd-definition.yaml

一旦创建成功,就可以像操作其他Kubernetes资源一样来操作这个自定义资源了。例如,使用以下命令来列出所有的“my-crds”资源:

kubectl get my-crds

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值