【问题标题】:Schedule legacy applications as single instance on Kubernetes在 Kubernetes 上将遗留应用程序安排为单个实例
【发布时间】:2026-01-14 15:20:03
【问题描述】:

许多遗留应用程序都部署为容器。它们中的大多数只需要进行一些更改即可在容器中工作,但其中许多不是为扩展而构建的,例如因为它们维护会话数据或写入卷(并发问题)。

我想知道这些应用程序是否打算在 Kubernetes 上运行,如果是的话,有什么好的方法可以做到这一点。 Pod 不是持久的,因此启动应用程序的理想方法是使用复制控制器并将副本设置为 1。RC 确保正确数量的 Pod 正在运行。该文档还指定如果 Pod 太多,它会杀死 Pod。我想知道是否会出现这种情况(如果没有手动启动 pod)。

我想像 Postgres 这样的数据库(带有外部数据量)就是一个很好的例子。我看过使用复制控制器部署那些教程。

【问题讨论】:

    标签: kubernetes


    【解决方案1】:

    创建一个具有 1 个副本的复制控制器确实是一个好方法,它比启动单个 pod 更可靠,因为您受益于自动修复机制:如果您的应用正在运行的节点上死了,您的 pod 将被终止并在其他地方重新启动。


    在 Kubernetes 等集群管理系统环境中的数据持久性意味着您的数据应该在集群本身之外(单独存储)可用。我个人使用 EC2 EBS,因为我们的应用程序在 AWS 中运行,但 Kubernetes 支持许多其他 volume 类型。如果您的 pod 在 node A 上运行,它使用的卷将安装在本地和您的 pod 容器中。现在,如果您的 pod 被销毁并在 node B 上重新启动,此卷将从 node A 卸载并在您的容器之前安装在 node B 上pod 被重新创建。很整洁。

    看看persistent volumes,这对你来说应该特别有趣。

    【讨论】:

    • 我知道卷是如何工作的,但有些应用程序不是为了与其他实例共享卷而构建的。要问一个更准确的问题:是否有一种机制可以确保始终只有一个实例在运行(而不是更多)(类似于没有 k8s 的设置)。
    • 这就是我在回答的第一部分试图解释的内容。通过相应地配置复制控制器,您只能运行同一应用程序的 1 个副本。在这种情况下,与您的 pod 定义关联的存储(卷)将由单个应用程序使用。
    最近更新 更多