运行 Kubernetes 中的应用程序对应用程序开发人员来说意味着什么?

What does it mean for the application developer to run an application in Kubernetes?

通常,以 J2EE 为例,应用程序开发人员在设计应用程序时不会优先考虑与基础架构相关的问题。很难与传统的非可编程基础设施接口。传统的方法是构建一个 .war 文件,然后可以在 JBoss 等应用程序服务器中 运行。 Spring等传统框架(SpringCloud的新风味除外)都是以此为前提的。 现在,如果像 Kubernetes 提供的容错、弹性部署 运行time 可用,似乎以相同的方式编写业务应用程序会忽略调度等功能,这些功能由 Kubernetes 提供运行时间。 一个具体的问题:应用程序通常会从 运行 时间(即 Kubernetes、Mesos 等)API 讨论(并从中受益)吗?如果是这样,你能举一个很好的例子吗? 我找到的大部分资源都更侧重于 Ops 方面,而不是 Dev。

不,Kubernetes 的意义在于您的应用不必是 'aware'。 (Mesos 有更多的 "apps need to know about us" 理念。)

在 Kubernetes 中,每个 pod 只是启动并监听一个端口。该应用程序不会注册它的存在,甚至不会告诉它是什么版本。当它需要与另一个服务对话时,它使用 DNS(甚至是固定服务 IP)为该下游服务寻找 LB。

Typically application developers don't prioritize infrastructure-related concerns when designing an application

一般来说,只有两件事需要担心:

1) 使您的服务无状态,因此您将状态推到边缘(数据库 and/or 客户端)。这允许 Kubernetes 'scale' 您的应用程序 运行 个副本。有状态服务几乎不可能扩展。

2) 将您的应用拆分为多个 "microservices",这样您就可以在不缩放 "customer login" 函数的情况下缩放 "product view" 函数。

3) 可选:前往 12factor 个应用程序。