CRD(CustomResourceDefinition)允許使用者定義自訂資源類型,Log Service利用CRD定義了自己的資源類型,您可以通過建立CR(CustomResource)執行個體來管理採集配置。本文主要介紹Log Service的兩類CRD(AliyunPipelineConfig和AliyunLogConfig)的區別和優勢。
背景資訊
CRD全稱為“CustomResourceDefinition”,是Kubernetes(k8s)的一種API對象,允許使用者定義自訂資源類型。通過CRD,使用者可以擴充Kubernetes原生的API,以滿足特定的應用情境需求。CR即“CustomResource”,是基於CRD定義的資源類型建立的具體的執行個體。
Log Service定義了自己的CRD,並支援通過CR來管理Logtail採集配置。您需要串連Kubernetes叢集,並額外使用Kubernetes鑒權。然後向kube-apiserver提交YAML設定檔來建立資源,從而建立相應的Logtail採集配置。
通過CR建立的配置,在控制台上對其修改不會同步到CR中。因此,如需修改由CR建立的配置內容,只能修改CR執行個體,禁止直接在控制台操作,避免配置不一致。
CRD類型
使用AliyunPipelineConfig,需要日誌組件版本最低為0.5.1。
為了便於通過雲原生方式管理Logtail採集配置,Log Service定義了兩類CRD,它們的能力與區別見下表:
類型 | AliyunPipelineConfig(推薦使用) | AliyunLogConfig |
ApiGroup | telemetry.alibabacloud.com/v1alpha1 | log.alibabacloud.com/v1alpha1 |
CRD資源名 | ClusterAliyunPipelineConfig | AliyunLogConfig |
範圍 | 叢集 | 命名空間 |
採集配置格式 | 基本等價於Log ServiceAPI中的LogtailPipelineConfig | 基本等價於Log ServiceAPI中的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資源。