微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Kubernetes:盲目使用 RollingUpdate 安全吗?

如何解决Kubernetes:盲目使用 RollingUpdate 安全吗?

亲爱的

我对 Kubernetes 非常陌生,我目前正在处理我的服务(traefik、prometheus 等)的更新过程。我想避免可能导致错误或崩溃的强制性实时更新。我习惯于控制哪些需要更新,哪些不需要。

到目前为止,我了解到 Kubernetes 为字段 spec.updateStrategy.type 提供了 2 个可能的值:

我很惊讶没有找到与 apt Debian 工具相同的步骤:当我使用 apt update; apt upgrade 时,我会得到一个将更新的列表,然后我选择我想要更新的内容

当我来到 Kubernetes 时,我想象更新可以保持这种两步走的精神,比如:

  1. 执行命令将当前部署在集群上的 docker 镜像与 repos 进行比较。此命令将打印每个图像的新现有版本。
  2. 执行另一个命令来选择要更新的内容

没有 stable,unstable,testing 频道,如带有 docker 的 Linux 存储库,那么我无法区分测试更新和可信赖更新。我担心 RollingUpdate 会毫无区别地部署每个新映像。

这引出了我的主要问题:盲目信任 RollingUpdate 是否完全安全?

解决方法

信任 RollingUpdate StatefulSet update strategy 是安全的。但是,需要注意的是,这不是“自动更新”。

StatefulSet(以及 Deployment)有一个模板 Pod 规范,它有一个 image:。这往往会命名要运行的映像的相当具体的版本。通常,Kubernetes 会检查节点上是否已经存在具有该名称和标签的映像,如果是,则尝试在不更新的情况下运行它(参见 Updating images,其中讨论了 imagePullPolicy: 字段) .

例如,如果您的 StatefulSet 显示 image: prom/prometheus:2.26.0,则您的 Pod 将完全使用该版本的 Prometheus,而不会使用其他版本。如果你只说 image: prom/prometheus 不带标签(或带 ...:latest),那么每个节点将拉取 Pod 启动时碰巧是最新的任何版本,你可以很容易地结束-同步版本。

使用更新策略的地方就是您更改 image: prom/prometheus:2.27.0 时。 Pod 规范中的图像无法修改,因此需要删除并重新创建现有的 Pod。如果您有 updateStrategy: { type: RollingUpdate }(默认值),那么 StatefulSet 控制器将为您执行此操作,特别是按顺序删除和重新创建 pod。如果您将其设置为 OnDelete,那么您需要手动删除 Pod。

由于您作为管理员控制 image:,因此您可以准确选择正在使用的版本;不存在会自动更新的“稳定更新通道”。相应地,您可以在预生产环境中部署更新的 StatefulSet YAML 配置以进行测试,然后再将其推广到生产环境。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。