繁体   English   中英

单个 K8S 部署中的多个应用程序

[英]Multiple apps in single K8S deployment

我正在探索 K8S 的可能性,我想知道是否有任何方法可以在单个部署中为两个或多个应用程序创建部署,因此它是事务性的——当部署后出现问题时,所有应用程序都会回滚。 另外我想提一下,我不是在说带有多个容器的 pod,因为额外的 side car 容器是为了一些横切问题,如监控、身份验证(如 kerberos)和其他,但不建议将不同的应用程序放在单个 pod 中. 考虑到这一点,是否可以进行单一部署来产生 2 种以上的 pod?

是否可以进行单一部署来产生 2 种以上的 Pod?

不会。一个 Deployment 只会创建一种 Pod。 您可以更新 Deployment 的内容,它会逐步将现有 Pod 替换为与更新后的 Pod 规范匹配的新 Pod。

没有什么能阻止您创建多个 Deployment,每个 Deployment 对应一种 Pod,这可能就是您在这里寻找的方法。

...当部署后出现问题时,所有应用程序都会回滚。

Core Kube.netes 本身没有这种能力; 事实上,除了容器未通过健康检查或正在退出之外,它判断出现问题的能力有些有限。

@SYN 的回答中的各种工具中,我至少对 Helm 有一些经验。 从您可能从 DBMS 中获得的意义上来说,它并不完全是“事务性的”,但它确实有能力管理相关资源的集合(“图表”的“发布”)并且它有能力回滚整个如果需要,跨多个部署的发布版本。 请参阅helm rollback命令

正如评论中所指出的,关于此问题的一种方法 go 是使用像 Helm 这样的东西。

Helm 是某种客户端(从 v3 开始。以前还涉及“tiller”,一个在您的 kube.netes 集群中运行的 controller:让我们忘记那个/已弃用)。

Helm 使用“图表”(或多或少:模板,您可以覆盖默认值)。

自定义

另一个类似于 Helm 的解决方案是 Kustomize。 使用纯文本文件(而非模板),同时在将对象应用到 Kube.netes 集群之前覆盖/自定义对象变得简单。

Argo光盘

虽然 Kustomize 和 Helm 都是独立的客户端,但我们还可以提及 ArgoCD 等解决方案。

ArgoCD controller 将在您的 Kube.netes 集群中运行,允许您创建“应用程序”对象。

这些应用程序由 ArgoCD 处理,推动您的工作负载部署(这些应用程序的常见来源包括 Helm Charts、Git 存储库,...)。

ArgoCD 的优点是他们的 controller 可能(取决于您的配置)随着时间的推移负责升级您的应用程序(例如:如果您的源是 git 存储库,分支 XXX,并且有人将更改推送到该分支:argocd 会应用那些漂亮的马上)

运营商

尽管这些解决方案中的大多数几乎都不知道您的应用程序是如何运行的。 假设您升级了由 Helm、Kustomize 或 ArgoCD 驱动的部署,并最终导致一些数据库 pod 卡在 crashloopbackoff 中:尽管如此,您的应用程序 pod 仍会得到更新,但不会自动回滚到以前的工作配置。

这给我们带来了另一种将应用程序运送到 Kube.netes 的方式:运营商。

操作员知道您的工作负载 state,并且可能能够修复常见错误(取决于它的编码方式,......没有魔法)。

操作员是一个应用程序(可以在 Go、Java、Python、Ansible 剧本中,......或者与 Kube.netes 集群 API 通信的库中的任何一个)

一个 Operator 一直连接到您的 Kube.netes 集群 API。您通常会发现一些特定于您的 Operator 的 CustomResourceDefinitions,允许您描述集群中某些组件的部署。 (例如:elasticsearch 运营商介绍了 object 类“ElasticSearch”和一些“Kibana”)

操作员监视它管理的对象的实例(例如:ElasticSearch),最终创建 Deployment/StatefulSets/Services...如果有人删除了由您的操作员创建的 object,它将/应该由该操作员重新创建,及时(里程可能会有所不同,具体取决于我们正在谈论的运营商......)

对于操作员来说,一个完美的示例是 OpenShift 4 (OKD4)。 带有 10 个操作员的 Kube.netes 集群(SDN,DNS,机器配置,入口 controller,kube.netes API 服务器,etcd 数据库,...)。 整个集群是操作员的集合:升级你的集群,每个人都会以一种协调的方式管理相应服务的升级,......一个接一个,......如果有任何失败,你仍然通常剩下足够的副本运行来解决问题,......


根据您要寻找的内容,每个选项都有优点和不便之处。 现在,如果您正在寻找“可以产生 2 种以上 pod 的单一部署”,那么 ArgoCD 或一些本土运营商将符合条件。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM