首页 > 其他分享 >CRD

CRD

时间:2023-02-26 14:12:21浏览次数:28  
标签:自定义 canary tech CRD com 资源

CRD(Custom Resource Definition,自定义资源描述)。

在Kubernetes中使用的Deployment、DamenSet、StatefulSet、Service、Ingress、ConfigMap等都是资源,而对这些资源的创建、更新、删除操作会被称为事件。Kubernetes的Controller Manager负责事件监听,并触发相应的动作来满足期望(Spec),这种方式也就是声明式,即用户只需要关心应用程序的最终状态。当使用中发现现有的资源不能满足需求的时候,Kubernetes提供了自定义资源(Custom Resource)和Operator为应用程序提供基于Kuberntes的扩展。

apiVersion: apiextensions.k8s.io/v1beta1
kind: CustomResourceDefinition
metadata:
    # metadata.name的内容由"复数名.分组名"构成,canaries是复数名,canarycontroller.
    # tech.com是分组名
    name: canaries.canarycontroller.tech.com
    annotations:
        "api-approved.kubernetes.io": "https://github.com/kubernetes/kubernetes/
            pull/78458"
spec:
    # 分组名,在REST API中也会用到,格式是/apis/分组名/CRD版本
    group: canarycontroller.tech.com
    # list of versions supported by this CustomResourceDefinition
    versions:
        - name: v1alpha1
            # 是否有效的开关
            served: true
            # 只有一个版本能被标注为storage
            storage: true
    # 范围是属于命名空间的
    scope: Namespaced
    names:
        # 复数名
        plural: canaries
        # 单数名
        singular: canary
        # 类型名
        kind: Canary
        # 简称
        shortNames:
        - can
    subresources:
        status: {}

从这个CRD文件可以看到,CRD主要包括apiVersion、kind、metadata和spec。其中最关键的是apiVersion和kind,apiVersion表示资源所属组织和版本,一般由APIGourp和Version组成。下面是这个CRD文件的介绍。

·这是一个自定义的canary(金丝雀)资源对象,它的复数是canaries,简称是can。

·这个资源对象有subresource属性,使用的是和Kubernetes其他内置资源一样的status字段,用来记录金丝雀发版过程的状态。

·这个资源对象的资源分组是canaries.canarycontroller.tech.com,版本号是v1alpha1。

可以看到,自定义的CRD在资源分组、版本号和命名等方面和其他Kubernetes内置资源对象一样,使用如下指令将这个CRD应用到集群中。

kubectl create -f crd-canary.yaml

这只是第一步创建对象,下面是这个资源对象的一个实体YAML。

apiVersion: canarycontroller.tech.com/v1alpha1
kind: Canary
metadata:
    creationTimestamp: 2020-06-20T06:25:01Z
    generation: 86
    labels:
        app: go-hello
        bfStopReplicas: "4"
        tech.com/clusterId: prod
    name: go-hello-canary
    namespace: tech-prod
    resourceVersion: "430698608"
    selfLink: /apis/canarycontroller.tech.com/v1alpha1/namespaces/tech-prod/
        canaries/go-hello-canary
    uid: c5bb13a2-b2be-11ea-8fef-e4434b7c7170
spec:
    info:
        currentBatch: "2"
        newDeploymentYaml: 完整的deployment
        oldDeploymentYaml: 完整的deployment
        pauseType: First
        totalBatches: "2"
        type: CanaryDeploy
status:
    info:
        availableReplicas: "4"
        batch2Status: Finished

这个自定义的canary资源和Kubernetes内置资源对象一样,有自己的spec字段、status字段,并且可以自定义字段。这个YAML文件描述了go-hello应用的金丝雀发布策略,应用有4个实例,希望发布过程中可以分两批发布,第一批发布完成会暂停,由用户决定什么时候发布第二批。

CRD有了,实体的金丝雀YAML文件有了,并且期望的状态也描述了,那么状态收敛这个工作由谁去做呢?控制器。

标签:自定义,canary,tech,CRD,com,资源
From: https://www.cnblogs.com/muzinan110/p/17156587.html

相关文章

  • 初探富文本之CRDT协同算法
    初探富文本之CRDT协同算法CRDT的英文全称是Conflict-freeReplicatedDataType,最初是由协同文本编辑和移动计算而发展的,现在还被用作在线聊天系统、音频分发平台等等。当......
  • k8s强制删除crd(CustomResourceDefinition)
     kubectlpatchcrd/replicas.longhorn.io-p'{"metadata":{"finalizers":[]}}'--type=merge注意:红色部分为待删除的crd名称 ......
  • 使用CRD扩展Kubernetes API
    本文是如何创建 CRD 来扩展KubernetesAPI的教程。CRD 是用来扩展Kubernetes最常用的方式,在ServiceMesh和 Operator 中也被大量使用。因此读者如果想在Kubern......
  • create a kubernetes CRD
    installpackage  pip3installjinja2pip3installyq FunctionforJinja2Render  justpastethefollowcodetoyourterminaljinji2_render(){yf=$1......