我有一个 .Net Core 控制台应用程序,需要全天候运行。我正在尝试决定如何托管此应用程序。我倾向于将其托管在 Docker 容器中,因为我将来可能会使用 Kubernetes 来扩展到此应用程序的多个实例。
容器是否专为需要长时间保持活动状态的应用程序而设计,还是更适合短期运行的工作任务?
答案1
您收到的最常见回复是“是”(而且“应该”是),但作为系统管理员,我不得不在 apt 更新后修复损坏的 docker 内容,这种情况发生过太多次。这本身并不是答案,但我可以分享一些经验。
此外,您可能还需要考虑谁负责安装安全更新和反向移植安全补丁。许多容器被创建后就被遗忘了,留下了各种易受攻击的守护进程、库等。如果您在 Ubuntu LTS 上运行,则可以更放心持续的安全更新。
此外,在扩展方面,如果不了解您的情况,通常会在流程的早期就将其视为一项要求。先获得一些用户。您可以将一台服务器扩展到数十个核心,很可能轻松为数百名并发用户提供服务。我看到太多这样的错误:“我正在制作一个应用程序,我已经知道我会有一百万用户”。
答案2
Kubernetes 中的 Stateful Sets 旨在利用容器化的状态应用程序(如 Rocket.Chat 等),顾名思义(https://rocket.chat/docs/installation/helm-chart/),或者其他可能必须具有严格恢复时间目标的生产应用程序(https://portworx.com/kubernetes-data-management-perspective-understanding-rto-rpo/)。所以我的答案是肯定的!显然,使用 Kubernetes 实现高可用性生产级应用程序是最先进的。我正在写我的学士论文,我们在工作中也这样做。