elasticsearch Kubernetes驱逐API可以';不能完全解释Elasticsearch群集运行状况?
我希望以一种不知道集群上运行的应用程序细节的方式执行Kubernetes集群的自动滚动更新。原则上,预算应该促进这一点 这里有一个障碍:有一个Elasticsearch集群运行在这个Kubernetes集群上,我找不到一种方法来正确表达“OK to execute a ES Pod”信号。具体来说,这似乎是一种情况,此Pod可以接收流量”和“此Pod可以被驱逐”信号不能同时用elasticsearch Kubernetes驱逐API可以';不能完全解释Elasticsearch群集运行状况?,elasticsearch,kubernetes,elasticsearch,Kubernetes,我希望以一种不知道集群上运行的应用程序细节的方式执行Kubernetes集群的自动滚动更新。原则上,预算应该促进这一点 这里有一个障碍:有一个Elasticsearch集群运行在这个Kubernetes集群上,我找不到一种方法来正确表达“OK to execute a ES Pod”信号。具体来说,这似乎是一种情况,此Pod可以接收流量”和“此Pod可以被驱逐”信号不能同时用readinessProbe 此ES群集的索引具有副本数:1,并且有一个PDB具有maxUnavailable:1。ES吊
readinessProbe
此ES群集的索引具有副本数:1
,并且有一个PDB具有maxUnavailable:1
。ES吊舱每个都指定一个准备就绪探测器,该探测器请求/\u集群/健康?等待\u状态=黄色
实际上,如果我们驱逐一个ES吊舱,替换吊舱将加入ES集群,启动并返回就绪状态,而ES集群作为一个整体仍然是黄色的,并且正在复制碎片(因此驱逐任何其他ES吊舱仍然是不安全的)
有人成功地解决了这个问题吗?我是否误解了探测器/PDB的语义
我们已经考虑了一些选项:
- 在就绪探测中使用
wait_for_status=green
意味着当ES群集运行状况为黄色时,所有ES吊舱都将变得未就绪
- 将ES索引“
副本数量
增加到2
只会略微降低滚动更新损坏ES群集的概率(假设这些碎片复制速度较慢)
- 同样,在
readinessProbe
上设置大的initialDelaySeconds
。这可能会使碎片复制的完成时间不足
- 使用
preStop
hook()和长宽限期也是如此
- 将PDB的
maxUnavailable
降低到0
意味着滚动更新必须由能够删除PDB、评估ES群集状态等的人员运行
- 一个假设的,嗯,
ReceiveablesProbe
,它选中了wait\u for\u status=green
,可以工作,但不存在这样的API
首先,无论如何,你都可以节省大量的时间和麻烦,并使用舵图:
但是万一你不能,或者万一它能帮助别人,我想你要找的是/\u cluster/health?local=true
,例如:
readinessProbe:
httpGet:
path: /_cluster/health?local=true
port: 9200
希望这有帮助