CRD(CustomResourceDefinition)允许用户定义自定义资源类型,日志服务利用CRD定义了自己的资源类型,您可以通过创建CR(CustomResource)实例来管理采集配置。本文主要介绍日志服务的两类CRD(AliyunPipelineConfig和AliyunLogConfig)的区别和优势。
背景信息
CRD全称为“CustomResourceDefinition”,是Kubernetes(k8s)的一种API对象,允许用户定义自定义资源类型。通过CRD,用户可以扩展Kubernetes原生的API,以满足特定的应用场景需求。CR即“CustomResource”,是基于CRD定义的资源类型创建的具体的实例。
日志服务定义了自己的CRD,并支持通过CR来管理Logtail采集配置。您需要连接Kubernetes集群,并额外使用Kubernetes鉴权。然后向kube-apiserver提交YAML配置文件来创建资源,从而创建相应的Logtail采集配置。
通过CR创建的配置,在控制台上对其修改不会同步到CR中。因此,如需修改由CR创建的配置内容,只能修改CR实例,禁止直接在控制台操作,避免配置不一致。
CRD类型
使用AliyunPipelineConfig,需要日志组件版本最低为0.5.1。
为了便于通过云原生方式管理Logtail采集配置,日志服务定义了两类CRD,它们的能力与区别见下表:
类型 | AliyunPipelineConfig(推荐使用) | AliyunLogConfig |
ApiGroup | telemetry.alibabacloud.com/v1alpha1 | log.alibabacloud.com/v1alpha1 |
CRD资源名 | ClusterAliyunPipelineConfig | AliyunLogConfig |
作用域 | 集群 | 命名空间 |
采集配置格式 | 基本等价于日志服务API中的LogtailPipelineConfig | 基本等价于日志服务API中的LogtailConfig |
跨地域能力 | 支持 | 支持 |
跨账号能力 | 支持 | 支持 |
Webhook校验参数 | 支持 | 不支持 |
配置冲突检测 | 支持 | 日志组件0.5以上版本支持 |
配置难度 | 较低 | 较高 |
配置可观测性 | Status包含错误详情、更新时间、上次应用成功配置、上次应用成功时间等信息 | Status包含错误码与错误信息 |
CRD 删除后 404 报错排查
创建或更新采集配置时,如果报错no matches for kind "ClusterAliyunPipelineConfig"或the server could not find the requested resource,可能是ClusterAliyunPipelineConfig CRD 被误删。
排查步骤
确认 CRD 是否存在:
kubectl get crd | grep ClusterAliyunPipelineConfig如果无输出,说明 CRD 已被删除。
重新部署 LoongCollector 以恢复 CRD:
helm upgrade loongcollector loongcollector/loongcollector -n kube-system --reuse-values或直接应用 CRD YAML:
kubectl apply -f crd.yaml验证 CRD 已恢复:
kubectl get crd | grep ClusterAliyunPipelineConfig验证采集配置可正常创建:
kubectl apply -f your-pipeline-config.yaml
CRD 由 Helm chart 的crds目录管理,重启loongcollector-operator不会重建 CRD,需通过helm upgrade或kubectl apply恢复。删除 CRD 会同时删除所有已存在的ClusterAliyunPipelineConfig资源。