iT邦幫忙

2025 iThome 鐵人賽

DAY 18
0
自我挑戰組

30 天工程師雜學之旅系列 第 18

k8s雜記-6 為什麼會有 CRD 與 Operator?

  • 分享至 

  • xImage
  •  

在學習 Kubernetes 的過程中,我曾經有一個疑問:「Operator Framework 到底是怎麼運作的?為什麼單純一個 CustomResourceDefinition (CRD) 可以幫助系統管理員完成像 etcd 備份這樣的任務?」

這個問題來自我聽到的其中一個應用:etcd 應用程式往往會搭配一個備份 Operator,讓管理員能透過宣告的方式建立備份,而不需要手動跑指令。但背後的原理是什麼?CRD 與 Operator 是怎麼協同工作的?

這篇文章就以這個實際的疑問為出發點,從案例切入,說明 CRD 與 Operator Framework 如何幫助系統管理員,並用 etcd 備份 作為例子展開。


為什麼會有 CRD 與 Operator?

在原生的 Kubernetes 世界裡,API Server 提供的物件類型有限,例如 Pod、Deployment、Service、ConfigMap 等。但隨著應用越來越複雜,系統管理員往往需要更多「原生」的方式來管理應用程式,例如資料庫叢集、備份排程、快取服務等等。

這時候,CRD (CustomResourceDefinition) 就登場了。它允許我們擴充 Kubernetes API,新增自訂的資源型別。例如:

apiVersion: etcd.database.coreos.com/v1beta2
kind: EtcdBackup
metadata:
  name: daily-backup
spec:
  clusterName: etcd-cluster
  storageType: S3
  s3:
    path: "s3://my-etcd-backups/2025-08-17/"

透過 CRD,我們可以直接在 Kubernetes 裡操作 EtcdBackup 這樣的物件,就像操作 Pod 一樣:

kubectl get etcdbackup

不過,CRD 本身只是定義一個「新的 API 物件」。如果沒有後端邏輯,它什麼事都不會做。這時候就需要 Controller,也就是 Operator 的核心。


Operator Framework:CRD + Controller

所謂的 Operator,就是 CRD 與對應的 Controller 的組合

  • CRD:新增一個 API 型別,例如 EtcdBackup
  • Controller:負責監控這些 CRD,一旦偵測到新的物件,便執行自動化邏輯。

以 Etcd Backup Operator 為例:

  1. 管理員 kubectl apply -f backup.yaml,建立一個新的 EtcdBackup 物件。
  2. Kubernetes API 會存下這個物件。
  3. Etcd Backup Operator(Controller)監聽到有新的 EtcdBackup 建立。
  4. 它自動執行以下步驟:
    • 建立一個 Pod 或 Job,執行 etcdctl snapshot save
    • 將快照上傳到指定的 S3 位置。
    • 更新 CRD 的 Status 欄位,標記成功或失敗。

這整個過程中,系統管理員只需要寫一個 YAML 檔案,不需要自己打 etcdctl 指令、寫備份腳本或處理重試邏輯。


沒有 Operator 與有 Operator 的差別

沒有 Operator

  • 需要手動執行 etcdctl snapshot save
  • 自行管理 S3 憑證與檔案路徑。
  • 處理錯誤重試、清理舊備份。
  • 如果要定期排程,還得自己建立 CronJob 或外部排程器。

有 Operator

  • 把備份需求寫進 YAML,就像描述 Deployment 一樣。
  • Operator 自動處理快照、上傳、錯誤處理。
  • 可以透過 CRD 搭配 CronJob,實現自動化排程。
  • 一切行為都被「資源化」,能被 kubectl get 查詢,並能透過 GitOps 管理。

為什麼這很重要?

Kubernetes 的設計哲學是 宣告式 (Declarative)。透過 CRD + Operator:

  • 系統管理員不再需要一步步操作,而是「宣告需求」。
  • Operator 扮演「自動化 SRE」,幫你執行那些繁瑣的任務。
  • 從 etcd 到資料庫、快取、備份、監控,都能透過 Operator 來管理。

這也是為什麼 Kubernetes 生態系有這麼多 Operator,例如:

  • Prometheus Operator:自動部署與管理 Prometheus。
  • Cert-Manager:自動簽發與更新憑證。
  • Etcd Operator:自動建立叢集、備份、還原。

如果你想探索更多現成的 Operator,可以到 OperatorHub 查詢。


結語

CRD 提供了擴充 API 的能力,Operator 則賦予這些 API 真正的「行為」。透過 Operator Framework,Kubernetes 管理員能把複雜的運維工作,轉化成簡單的 YAML 宣告。

就像我們今天看到的例子——只要一個 EtcdBackup 的物件,Operator 就會自動完成整個備份流程。這不只是省時省力,更重要的是一致性與可追蹤性,讓基礎架構管理更加可靠。


上一篇
k8s雜記-5 Kubernetes NetworkPolicy:為什麼我只需要管「請求的發起方向」?
下一篇
k8s雜記-7 Pod 為什麼需要 PVC?談 Kubernetes 的資源分工與管理
系列文
30 天工程師雜學之旅22
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言