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