12 要素应用缺失的 7 个要素

原文链接:https://www.ibm.com/cloud/blog/7-missing-f...
翻译:Cooper@v2k8s

由于译者水平有限,本文不免存在遗漏或错误之处。如有疑问,请查阅原文。

本文是IBM研究人员基于12要素应用,对云原生应用运行在kubernetes上做了一些要素补充,可以参考使用。

尽管有12要素的应用准则很明确,但还有7个要素对于生产环境同样重要。

12个要素应用 为开发微服务提供了明确定义的指南,并且成为运行、扩展和部署应用程序的常用模式。在IBM Cloud Private平台中,我们遵循相同的12要素应用程序准则来开发容器化应用程序。请参阅迈克尔·埃尔德(Michael Elder)的博客文章“ Kubernetes和12因子应用程序,了解如何将12因子应用于容器编排的Kubernetes模型。

当我们回顾在 Kubernetes 上开发、运行的容器化的微服务的原理时,我们发现虽然有12要素的应用指南是即时可用的,但以下7个要素对于生产环境同样重要:

  • 要素XIII :可观测
  • 要素XIV :可调度
  • 要素XV :可升级
  • 要素XVI :最低特权
  • 要素XVII :可审计
  • 要素XVIII :安全的
  • 要素XIX :可衡量的

让我们讨论每种方法的含义以及为什么必须考虑其他要素。

要素十三:可观测

应用程序应提供有关当前运行状况和指标的可见性

由于多个微服务一起构建应用程序,分布式系统对于管理有一定挑战。本质上,多个活动组件需要协同工作,才能使系统正常运行。如果一项微服务失败,则系统需要对其进行检测并自动修复。Kubernetes提供了强大的故障恢复能力,例如就绪探针存活探针

就绪探针

Kubernetes使用就绪探针来确保应用程序已准备好接受流量。如果就绪探针开始失败,Kubernetes将停止向Pod发送流量,直到就绪探针返回成功状态为止。

例如,您有一个由三个微服务组成的应用程序:前端,业务逻辑和数据库。对于此应用程序,您的前端应该有一个就绪探针,可以在接受流量之前,检查业务逻辑和数据库是否准备就绪。

在下面的动画图像中看到,直到就绪探针返回成功之前,没有请求发送到应用程序实例:

准备探针

您可以使用HTTPCommandTCP探针,并且可以控制探针配置。例如,您可以指定它们运行的频率、成功和失败的阈值是多少,以及等待响应的时间。使用就绪探针时,需要配置一个非常重要的设置,即initialDelaySeconds设置。确保在应用程序准备就绪之前探针不会启动,如果未正确设置,则应用程序将不断重启。请参见以下YAML代码段:

readinessProbe:
# an http probe
httpGet:
path: /readiness
port: 8080
initialDelaySeconds: 20
periodSeconds: 5

存活探针

Kubernetes使用存活探针来检查您的应用程序是否存在。如果您的应用程序仍然存在,那么Kubernetes会将其保留下来。如果您的应用程序已失效,那么Kubernetes会删除该pod并启动一个新的pod来替换它。这证明了对微服务的需求是无状态且可抛弃的(因素X)。请参见以下动画图像,一旦生动性探针失败,Kubernetes将在其中重新启动Pod

存活探针

使用这些探针的一个很大好处是,您可以按任何顺序部署应用程序,而不必担心依赖关系。

自定义指标

但是,我们发现探针不足以完全支撑生产环境。应用程序通常具有需要监视的特定于应用程序的指标。用户设置阈值并针对这些特定于应用程序的指标(例如,每秒事务数)发出警报。

IBM Cloud Private通过由基于角色的访问控制模型启用的完全安全的监视堆栈(由PrometheusGrafana组成)填补了这一空白。

Prometheus从指标端点获取目标。您的应用程序需要使用注释来定义指标终结点。请参阅以下内容:

prometheus.io/scrape: 'true'

然后,Prometheus会自动发现该端点并从该端点抓取指标,如以下动画图像所示:

监控

要素十四:可调度

应用程序应提供有关预期资源限制的指南

假设管理层选择您的团队在Kubernetes上进行了一个项目的实验。您的团队会努力设置环境,最终您会得到一个运行时具有出色响应时间和性能的应用程序。然后,另一个团队跟随您的领导-在同一个环境中创建他们的应用程序并托管运行。当第二个应用程序上线时,原始应用程序开始出现性能下降。当您开始进行故障排除时,首先要查找的是分配给容器的计算资源(CPU和内存)。容器很可能会消耗完计算资源,这引发了一个问题,即如何确保应用程序的计算资源。

Kubernetes具有强大的功能,可让您设置容器的请求限制。请求得到保证。如果容器请求资源,则Kubernetes仅在可以为其分配资源的节点上调度它。另一方面,限制确保容器永远不会超过特定值。

要求和限制

请参阅下面的YAML代码段以设置计算资源:

Resources:
requests:
memory:64Mi”
cpu:150m”
limits:
memory :64Mi”
cpu :200m”

生产环境中管理员的另一项有效功能是为命名空间设置配额。如果设置了配额,则Kubernetes不会配置在该命名空间中未设置请求和限制的容器。在下图中,为命名空间设置了资源配额

配额

要素XV:可升级

应用必须升级前几代的数据格式

生产环境中运行的应用程序通常需要安全性或功能补丁,对于生产应用程序,很重要一点就是升级时不会中断服务。Kubernetes为应用程序提供滚动更新,以在不中断服务的情况下进行升级。通过滚动更新,您可以一次更新一个Pod,而无需关闭整个服务。请参见以下第二版应用程序的动画图像,可以在不停机的情况下进行部署:

可升级1

请参见以下YAML代码段:

`minReadySeconds: 5`
`strategy:`
`# indicate which strategy`
`# we want for rolling update`
`type: RollingUpdate`
`rollingUpdate:`
`maxSurge: 1`
`maxUnavailable: 1`

当启用滚动更新策略时,请注意maxUnavailable 并 注意 maxSurge

maxUnavailable是一个可选字段,用于指定在更新过程中不可用的Pod的最大数量。尽管它是可选的,但您想要设置该值以确保服务可用性。

maxSurge 是另一个可选(但很关键)字段,它告诉Kubernetes在所需数量的Pod上可以创建的Pod的最大数量。

要素十六:最低特权

容器应以最小特权运行

听起来并不悲观,但是您应该将容器中允许的每个许可都视为潜在的攻击,如下图所示。例如,如果您的容器以root用户身份运行,那么有权访问您的容器的任何人都可以向其中注入恶意进程。Kubernetes提供了Pod安全策略(PSP),可用于限制对文件系统,主机端口,Linux功能等的访问。IBM Cloud Private提供了一组开箱即用的PSP,当在命名空间中配置容器时可以将它们关联。

最小特权

查看有关将命名空间与Pod安全策略结合使用的更多详细信息。

要素XVII:可审计

了解所有关键操作的内容,时间,对象和地点

可审计性对于在Kubernetes集群或应用程序上执行的任何操作都是至关重要的。例如,如果您的应用程序处理信用卡交易,则需要启用审核以保留每笔交易的审核记录。IBM Cloud Private利用了与云无关的行业标准格式,即Cloud Auditing Data Federation(CADF)在IBM Cloud Private中的审计日志中查看更多详细信息。

CADF事件捕获以下信息:

  • initiator_id:执行操作的用户的ID
  • target_uri:CADF特定的目标URI(例如:数据/安全性/项目)
  • action:正在执行的动作,通常是:操作:resource_type

要素XVIII:安全的(身份,网络,范围,证书)

保护您的应用程序和资源不受外界攻击

这个因素值得自己写一篇文章。可以说应用程序在生产环境中运行时需要端到端的安全性。IBM Cloud Private解决了生产环境所需的以下安全问题:

  • 身份验证:确认身份
  • 授权:验证经过身份验证的用户可以访问的内容
  • 证书管理: 管理数字证书,包括创建,存储和续订
  • 数据保护:传输中和静止数据的安全措施
  • 网络安全性和隔离性:防止未经授权的用户和进程访问网络
  • Vulnerability Advisor:确定映像中的所有安全漏洞
  • 变异顾问:识别容器中的任何变异

您可以从IBM Cloud Private安全指南中了解更多信息。

具体来说,让我们谈谈证书管理器。IBM Cloud Private Certificate Manager服务基于开源Jetstack项目。证书管理器用于为在IBM Cloud Private上运行的服务颁发和管理证书。它支持自签名证书和公共证书,并与kubectl和基于角色的访问控制完全集成。

第十九要素:可衡量的

配额或退款的应用使用情况应可衡量

最终,IT中心必须处理成本,如下图所示。分配给运行容器的计算资源应该是可衡量的,并且使用群集的组织应该负责。确保遵循因子XIV:可调度。IBM Cloud Private提供了计量功能,该功能收集每个容器分配的计算资源,并在命名空间范围内聚合以进行回扣和退款。

可测的

结论

我希望您发现该主题很有趣,并检查了您已经使用的要素,并计划下次使用其他要素。

(= ̄ω ̄=)··· 暂无内容!

请勿发布不友善或者负能量的内容。与人为善,比聪明更重要!