Statefulset - 当pod 0失败并继续下一个时,可以跳过pod 0的创建吗?

时间:2018-03-29 14:51:08

标签: kubernetes

我目前在以下情况下遇到状态设置问题:

  • 我有一个运行持久存储和2个节点的percona SQL集群
  • 现在我确实强制两个豆荚都失败了。
  • 首先我将强制pod-0失败
  • 之后我会强制pod-1失败
  • 现在,如果没有人工干扰和可能的数据库,群集将无法恢复

为什么:

  • statefulset正在尝试首先启用pod-0,但是由于以下消息,这个将不会联机:

    [ERROR] WSREP:从此节点引导群集可能不安全。它不是离开群集的最后一个,可能不包含所有更新。要使用此节点强制群集引导,请手动编辑grastate.dat文件并将safe_to_bootstrap设置为1

我可以做什么,但我真的不喜欢:

  • 我可以将“.spec.podManagementPolicy”更改为“Parallel”,但这可能会在形成群集时导致竞争条件。因此,我想避免这种情况,我基本上喜欢一个接一个地启动节点的想法

我想拥有什么:

  • 可能会激活“.spec.podManagementPolicy”:“OrderedReady”,但有可能以某种方式调整顺序
  • 能够将特定的pod置于“非活动”模式,以便在我再次启用它们之前将其忽略

这样的东西可用吗?有人有其他想法吗?

1 个答案:

答案 0 :(得分:0)

不幸的是,在Kubernetes的标准功能中没有类似的东西。

我在这里只看到两个选项:

  1. 使用InitContainers以某种方式检查重新启动时的当前状态。 这将允许您在主容器启动之前运行任何代码,以便您可以尝试使用自定义脚本来解决问题等。

  2. 修改数据库启动脚本以允许它等待某个环境变量或任何标志文件,并在运行数据库之前使用PostStart hook检查状态。

  3. 但是在这两个选项中,你必须编写自己的启动顺序逻辑。