推荐使用:estafette-gke-preemptible-杀手
项目简介
estafette-gke-preemptible-killer
是一个轻量级的 Kubernetes 应用,它旨在解决 Google Kubernetes Engine (GKE) 中预置实例(preemptible VM)的生命周期管理问题。这款工具在预置节点池中循环检查并提前终止节点,以避免由于预置实例的24小时寿命限制而可能引发的大规模中断。
项目技术分析
estafette-gke-preemptible-killer
工作原理如下:
- 在设定的时间间隔内,应用会获取所有预置实例列表,并判断是否应当删除。
- 如果节点上没有时间到结束的注解,则随机分配一个在12至24小时范围内的时间值,并将其存储为节点注解。
- 当这个时间点到达时,节点被标记为不可调度,随后进行疏散并从 GCloud 中删除。
应用场景
- 针对 GKE 集群中预置实例的自动管理,防止大规模服务中断。
- 优化资源利用,减少因预置实例突然终止导致的应用波动。
已知限制
- 目前不支持选择特定的节点池,而是处理集群中的所有预置实例。
- 这个工具可能会增加小规模中断的频率,但并不能完全避免大规模中断,因为 GCP 对预置实例的管理方式可能导致大范围影响。
- 建议配合 Pod Disruption Budget 和足够的副本数量来提高安全性。
使用方法
通过环境变量或命令行标志配置以下设置:
BLACKLIST_HOURS
: 设置不允许删除的UTC时间段。DRAIN_TIMEOUT
: 设置节点疏散的最大等待时间。FILTERS
: 设置基于标签的过滤条件。INTERVAL
: 设置检查节点的间隔时间。KUBECONFIG
: 提供 kubeconfig 文件路径(如果在集群外部运行)。METRICS_LISTEN_ADDRESS
: 监听 Prometheus 指标请求的地址。METRICS_PATH
: 指定 Prometheus 指标请求的路径。WHITELIST_HOURS
: 设置优先允许删除的UTC时间段。
部署与开发
可以使用 Helm 或 Kustomize 进行安装:
- 使用Helm安装或升级:
helm repo add estafette https://helm.estafette.io
helm upgrade --install estafette-gke-preemptible-killer --namespace estafette estafette/estafette-gke-preemptible-killer
- 使用Kustomize部署: 创建
kustomization.yaml
文件,然后执行kubectl apply -k .
来应用更改。
对于开发人员,可以使用 Go 语言进行本地测试和调试,包括构建、测试和tidy模组。
项目特点
- 自动化管理预置实例,降低大规模服务中断的风险。
- 灵活的配置选项,可以根据实际需求调整删除策略。
- 支持 Prometheus 指标暴露,便于监控和集成。
- 可直接通过 Helm 或 Kustomize 快速部署。
通过 estafette-gke-preemptible-killer
,你可以更高效地管理 GKE 中的预置实例,提升集群的稳定性和可用性。立即尝试,在你的 GKE 集群中部署这一强大工具吧!