【问题标题】:How to rolling restart pods without changing deployment yaml in kubernetes?如何在不更改 kubernetes 中的部署 yaml 的情况下滚动重启 pod?
【发布时间】:2019-12-24 19:52:09
【问题描述】:

在 kubernetes 中有一个滚动更新(自动没有停机时间)但没有滚动重启,至少我找不到。我们必须更改部署 yaml。有没有办法让滚动“重启”,最好不改变部署yaml?

【问题讨论】:

    标签: kubernetes


    【解决方案1】:

    在 kubernetes 1.15 之前,答案是否定的。但是有一种使用虚拟注释修补部署规范的解决方法:

    kubectl patch deployment web -p \
      "{\"spec\":{\"template\":{\"metadata\":{\"annotations\":{\"date\":\"`date +'%s'`\"}}}}}"
    

    从 kubernetes 1.15 开始,您可以使用:

    kubectl rollout restart deployment your_deployment_name
    

    CLI Improvements

    • 创建了一个新的 kubectl rollout restart 命令来滚动重启部署。
    • kubectl rollout restart 现在适用于 DaemonSets 和 StatefulSets

    【讨论】:

    • kubectl rollout restart 通过更改部署的 pod 规范上的注释来工作,因此它没有任何集群端依赖项;您可以将它用于较旧的 Kubernetes 集群就好了。)
    • 那么在本地安装了 kubectl 1.15 你可以在 1.14 集群上使用它吗?
    • @NielsBasjes 是的,您可以将 kubectl 1.15 与 apiserver 1.14 一起使用。以下是有关 kubernetes 版本倾斜策略的更多详细信息:kubernetes.io/docs/setup/release/version-skew-policy
    • 如果我进行滚动更新,如果新的 Pod 正在运行,则正在运行的 Pod 将被终止。但是我的 pod 需要加载配置,这可能需要几秒钟。在这几秒钟内,我的服务器无法访问。当正在运行的 pod 终止时,我可以设置超时吗?
    • @B.Stucke 您可以在终止前使用“terminationGracePeriodSeconds”进行排水。但我认为您之前需要设置“readinessProbe”来检查配置是否已加载。
    猜你喜欢
    • 1970-01-01
    • 2020-12-24
    • 1970-01-01
    • 1970-01-01
    • 2014-01-25
    • 2018-08-30
    • 2018-10-22
    • 2020-06-02
    • 2012-06-26
    相关资源
    最近更新 更多