elasticsearch Kubernetes驱逐API可以';不能完全解释Elasticsearch群集运行状况?,elasticsearch,kubernetes,elasticsearch,Kubernetes" /> elasticsearch Kubernetes驱逐API可以';不能完全解释Elasticsearch群集运行状况?,elasticsearch,kubernetes,elasticsearch,Kubernetes" />

elasticsearch Kubernetes驱逐API可以';不能完全解释Elasticsearch群集运行状况?

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吊

我希望以一种不知道集群上运行的应用程序细节的方式执行Kubernetes集群的自动滚动更新。原则上,预算应该促进这一点

这里有一个障碍:有一个Elasticsearch集群运行在这个Kubernetes集群上,我找不到一种方法来正确表达“OK to execute a ES Pod”信号。具体来说,这似乎是一种情况,此Pod可以接收流量”和“此Pod可以被驱逐”信号不能同时用
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
希望这有帮助