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。