【问题标题】:Can not define a Kubernetes StateFul-Set with Recreate strategy无法使用 Recreate 策略定义 Kubernetes StateFul-Set
【发布时间】:2019-09-20 17:21:49
【问题描述】:

我遇到了一些我不太明白的事情。当有我的部署时,我可以定义一个策略。作为 RecreateRollingUpdate。见这篇文章:https://www.weave.works/blog/kubernetes-deployment-strategies

但现在我有一个 StateFul Set,它不接受关键字 strategy,但想要拥有 updateStrategy。当试图传递Recreate 类型时,我收到了这个错误(来自 Helm):

Error: StatefulSet.apps "businessmanager-dev-prom-business-manager-set" is invalid: spec.updateStrategy: Invalid value: apps.StatefulSetUpdateStrategy{Type:"Recreate", RollingUpdate:(*apps.RollingUpdateStatefulSetStrategy)(0xc43d534178)}: must be 'RollingUpdate' or 'OnDelete'
Error: UPGRADE FAILED: StatefulSet.apps "businessmanager-dev-prom-business-manager-set" is invalid: spec.updateStrategy: Invalid value: apps.StatefulSetUpdateStrategy{Type:"Recreate", RollingUpdate:(*apps.RollingUpdateStatefulSetStrategy)(0xc43d534178)}: must be 'RollingUpdate' or 'OnDelete'

这告诉我不允许使用Recreate。为什么不允许在 Stateful Set 中使用Recreate 策略,为什么我必须使用updateStrategy 而不是strategy?这在我看来像是一些已弃用的行为。

【问题讨论】:

    标签: kubernetes


    【解决方案1】:

    对于有状态集,您可以实现蓝/绿更新、滚动更新、OnDelete 策略。

    在 pod 内运行有状态应用程序时使用的有状态集。例如在 RAM 中存储一些东西。 redis 数据库作为有状态集运行。

    Stateful sets 像示例 'redis-0','redis-1' 一样自动管理序列,因此如果 pod 出现任何问题,它将关闭进程并启动新进程并尝试管理相同的状态。

    如果您使用Recreate 策略,它将首先删除 pod,将其终止,然后再次启动新的,用于无状态应用程序。同样的方式也适用于滚动更新。

    【讨论】:

    • 后续更新是创建全新的 pod 并在新 pod 准备好接受请求时删除 pod。
    猜你喜欢
    • 2020-08-11
    • 1970-01-01
    • 2023-03-03
    • 2020-03-03
    • 2019-02-10
    • 2019-01-26
    • 2020-10-15
    • 1970-01-01
    • 2019-11-26
    相关资源
    最近更新 更多