Shell-Operator 概述
Shell-Operator 是 Kubernetes 的一個工具,用于通過 shell 腳本擴展集群功能。它允許用戶編寫簡單的腳本(Bash、Python 等)來響應 Kubernetes 事件(如資源變更、定時任務),無需編譯復雜的控制器。
核心功能
事件驅動:監聽 Kubernetes 資源(如 Pod、Deployment)的創建、更新或刪除事件,觸發自定義腳本。
定時任務:通過 Cron 表達式定期執行腳本。
簡化開發:無需編寫完整的 Operator,適合快速實現輕量級邏輯。
工作原理
- Hook 機制:用戶將腳本定義為 Hook,配置觸發條件(如資源類型、命名空間、事件類型)。
- 事件處理:Shell-Operator 通過 Kubernetes API 監聽事件,匹配條件后調用對應腳本。
- 上下文傳遞:腳本可通過環境變量獲取事件詳情(如資源名稱、變更內容)。
典型應用場景
- 自動化運維:自動清理失敗 Pod、發送通知。
- 自定義校驗:攔截不符合規范的資源創建請求。
- 集成外部系統:將 Kubernetes 事件同步到外部監控或日志系統。
安裝與部署
通過 Helm 或直接部署 Shell-Operator 的 Pod:
helm repo add shell-operator https://flant.github.io/shell-operator/helm/
helm install shell-operator shell-operator/shell-operator
示例 Hook 配置
以下是一個監聽 Pod 創建事件的 Hook 示例(hooks/pod-hook.sh
):
#!/usr/bin/env bash
# 配置觸發條件
CONFIG=$(cat <<EOF
configVersion: v1
kubernetes:
- name: monitor-podsapiVersion: v1kind: PodexecuteHookOnEvent: ["Added"]
EOF
)
echo "$CONFIG"# 腳本邏輯
function main() {echo "Pod created: ${KUBERNETES_RESOURCE_NAME}"
}
調試與日志
- 日志存儲在 Shell-Operator Pod 的
/var/log/shell-operator
目錄。 - 通過
kubectl logs
查看實時日志:
kubectl logs -f deploy/shell-operator
優勢與限制
優勢:
- 低門檻:熟悉腳本語言即可開發。
- 靈活性:支持任意腳本邏輯。
限制:
- 性能:不適合高頻或復雜事件處理。
- 錯誤處理:需自行實現腳本的健壯性。
參考資源
- 官方文檔:Shell-Operator GitHub
- 進階用法:結合
addon-operator
管理多模塊 Hook。