自动化和部署工具:帮助工程师在无需人工干预情况下即可构建计算环境;
容器注册表:存储应用程序的可执行文件;
不同安全领域的安全和合规框架;
密钥管理解决方案:通过加密确保只有授权的用户才能访问特定的应用程序。
这些工具使工程师可以编写基础设施参数,使系统可以按需搭建新环境,确保了一致性和安全性。
云原生存储:为容器化应用提供虚拟磁盘或持久化存储;
容器运行时:为容器提供隔离、资源和安全;
云网络:分布式系统的节点(机器或进程)通过其连接和通信。
编排和调度:部署和管理容器集群,确保它们具有弹性伸缩能力,相互之间低耦合,并且可扩展。事实上,编排工具(绝大多数情况下就是 Kubernetes)通过管理容器和操作环境构成了集群;
协调和服务发现:使得服务(应用程序组件)之间可以相互定位和通信;
远程进程调用(RPC):使跨节点服务间通信的技术;
服务代理:服务间通信的中介。服务代理的唯一目的就是对服务之间的通信进行更多控制,而不会对通信本身添加任何内容。服务代理对下面将提到的服务网格(Service Mesh)至关重要。
API 网关:一个抽象层,外部应用可通过 API 网关进行通信;
Service Mesh:某种程度上类似于 API 网关,它是应用程序进行通信的专用基础架构层,提供基于策略的内部服务间通信。此外,它还可能包含流量加密、服务发现、应用程序监控等内容。
数据库:使应用程序能以有序的方式收集数据;
流和消息传递:使应用程序能发送和接收消息(事件和流)。它不是网络层,而是让消息成为队列并处理消息的工具;
应用程序定义和镜像构建:用于配置、维护和运行容器镜像(应用程序的可执行文件)的服务;
持续集成和持续交付(CI/CD):使开发者可自动测试代码是否与代码库(应用程序的其余部分)兼容。如果团队足够成熟,甚至可以自动部署代码到生产环境。
日志工具:收集事件日志(有关进程的信息);
监控方案:收集指标(以数字表示的系统参数,例如 RAM 可用性);
追踪工具:追踪比监控更进了一步,它们监控用户请求的传播,与服务网格相关。
混沌工程(Chaos Engineering):在生产环境中测试软件的工具,可识别缺陷并进行修复,减少其对服务交付的影响。
Kubernetes 发行版:采用未经修改的开放源代码(尽管有人对其进行了修改),并根据市场需要增加了其他功能;
托管的 Kubernetes:类似于 Kubernetes 发行版,但是由提供商托管;
Kubernetes 安装程序:自动执行 Kubernetes 的安装和配置过程;
PaaS/容器服务:类似于托管的 Kubernetes,但是包含了一套更广泛的应用部署工具(通常是来自云原生景观图)。
容器是执行流程的一组技术约束。容器内启动的进程会相信它们正在自己的专用计算机上运行,而不是在与其他进程(类似于虚拟机)共享的计算机上运行。简而言之,容器可以使你在任何环境中都能控制自己的代码运行。
镜像是运行容器及其过程所需的一组存档文件。你可以将其视为模板的一种形式,可以在其上创建无限数量的容器。
仓库是存储镜像的空间。
审计和合规
生产环境强化工具的路径:
代码扫描
漏洞扫描
镜像签名
策略制定和执行
网络层安全
安全分发 secret 或密钥的方法。
身份认证或(和)授权的服务或规范。
一些工具专注于密钥生成、存储、管理和轮转。
另一些专注于单点登录和身份管理。
为容器提供云原生存储选项;
标准化容器与存储提供者之间的接口;
通过备份和还原操作提供数据保护。
标准化:无论它们在何处运行,都需要标准操作规则;
安全:访问权限应该要注意设置;
隔离:该应用程序不应影响其他应用程序或受到其他应用程序的影响(例如,位于同一位置的应用程序崩溃)。隔离基本上起到保护作用。
存储:使应用程序轻松快速访问运行所需的数据;
容器运行时:执行应用程序代码;
网络:确保容器化应用程序之间的通信。
服务发现引擎:类似数据库的工具,存储的信息包括:存在什么哪些服务以及如何定位它们;
名称解析工具(如 CoreDNS):接收服务位置请求并返回网络地址信息。
请注意,“Service” 在不同的语境中有不同的含义,可能会造成混淆。“services” 通常指位于容器/Pod 中的服务,是实际应用程序中具有特定功能的应用组件或微服务(例如:iPhone 的面部识别算法)。
而 Kubernetes 的 Service 是一种抽象,可帮助 Pod 相互查找和定位。它是服务(功能上的)作为进程或 Pod 的入口点。在 Kubernetes 中,当你创建了一个 Service (抽象),你就创建了一组 Pod,这些 Pod 一起通过单一 endpoint (入口)提供一个服务(功能)。
聚焦于开发的工具:可帮助将应用程序代码构建到容器和(或)Kubernetes 中;
聚焦于运维的工具:以标准化的方式部署应用。
CI 系统;
CD 系统;
帮助 CD 系统确定代码是否准备好投入生产的工具;和(或)
前三者的合集(Spinnaker 和 Argo 就是如此)。
数据库:存储和检索数据;
数据流和消息传递工具:实现相互分离、精心设计的架构;
应用程序定义和镜像构建工具:包含可改善开发人员和操作员体验的多种技术;
CI/CD 工具:确保代码处于可部署状态,并帮助工程师及早发现错误,从而确保代码质量。
Who:云厂商;
What:他们托管的 Kubernetes 产品;
When:现在;
Where:云厂商的基础架构上;
Why:由你决定。
我如何在各种环境中运行应用程序?
一旦应用程序运行起来,我的团队和用户将如何与它们交互?
我会遇到一些需要掌控控制平面的场景吗?如果有,托管解决方案可能不是一个很好的选择。
我有没有一个小型团队来管理“标准”工作负载,并需要分流尽可能多的操作任务?如果有,托管解决方案可能非常合适你。
便携性对我来说重要吗?
生产就绪情况如何?