-
Notifications
You must be signed in to change notification settings - Fork 518
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
11 changed files
with
63 additions
and
40 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,30 +1,34 @@ | ||
# 10.3.5 OAM | ||
|
||
前面介绍的 Helm、Kustomize、CRD + Operator 在各自领域很好的承载一个“组件”的概念,但它们都没有解决一个完整的、面向业务场景的“应用”问题。 | ||
前面介绍的 Helm、Kustomize、CRD + Operator 在各自领域很好的承载一个“组件”的概念。但对于一个完整的“应用”,即面向具体业务场景的定义、部署和运行需求,仍旧缺乏系统化的解决方案。 | ||
|
||
OAM 的全称为开放应用模型(Open Application Model),由阿里巴巴联合微软共同推出。 | ||
OAM 的全称为开放应用模型(Open Application Model),由阿里巴巴联合微软共同推出,提供了一种大家都可以遵循的、标准化的方式来定义更高层级的应用层抽象,并且把“关注点分离”(Separation of Concerns)作为这个应用模型的核心思想。 | ||
|
||
- Open,开放与云服务供应商无关。定义的开放标准应该是一套更高级别的抽象,可以跨越本地集群、异构平台、云服务提供商,不会被锁定到任何一个厂商的底座。 | ||
- Application,应用为先。一个应用的交付与部署应该是自包含的,其中的各类操作行为应该作为应用定义的一部分,这些内容与实际的基础设施无关。 | ||
- Model,标准的开放模型。模块化整个应用交付流程,根据个人的需要将这些模块自由组装,达成自己想要的结果。 | ||
OAM 有两个部分:OAM 规范、OAM 规范的 Kubernetes 实现。 | ||
|
||
详细的说,OAM 规范是基于自定义资源讲原先 All-in-One 的复杂配置做了一定层次的解耦,它强调一个现代应用是多个“组件”(Component)的集合,而非一个简单的工作负载或者 K8s Operator。更进一步的,OAM 把这个应用所需的“运维策略”(Trait)也认为是一个应用的一部分,在 OAM 中,一个应用程序包含三个核心理念: | ||
- 第一个核心理念是组成应用程序的组件(Component),它可能包含微服务集合、数据库和云负载均衡器; | ||
- 第二个核心理念是描述应用程序运维特征(Trait)的集合,例如,弹性伸缩和 Ingress 等功能。它们对应用程序的运行至关重要,但在不同环境中其实现方式各不相同; | ||
- 最后,为了将这些描述转化为具体的应用程序,运维人员使用应用配置(Application Configuration)来组合组件和相应的特征,以构建应部署的应用程序的具体实例。 | ||
|
||
在 OAM 体系中大致分了三个角色,分别为: | ||
不同角色分工协作,整体上简化单个角色关注的内容,使得不同角色可以更聚焦更专业的做好本角色的工作。 | ||
|
||
基础设施运维人员 | ||
负责开发、安装和维护各种 Kubernetes 级别的功能。具体工作包括但不限于维护大规模的 K8s 集群、实现控制器/Operator,以及开发各种 K8s 插件。在公司内部,我们通常被称为“平台团队(Platform Builder) | ||
业务研发人员 | ||
以代码形式传递业务价值。大多数业务研发都对基础设施或 K8s 不甚了解,他们与 PaaS 和 CI 流水线交互以管理其应用程序。业务研发人员的生产效率对公司而言价值巨大。 | ||
应用运维人员 | ||
为业务研发人员提供有关集群容量、稳定性和性能的专业知识,帮助业务研发人员大规模配置、部署和运行应用程序(例如,更新、扩展、恢复)。请注意,尽管应用运维人员对 K8s 的 API 和功能具有一定了解,但他们并不直接在 K8s 上工作。在大多数情况下,他们利用 PaaS 系统为业务研发人员提供基础 K8s 功能。在这种情况下,许多应用运维人员实际上也是 PaaS 工程人员。 | ||
:::center | ||
![](../assets/OAM-app.png)<br/> | ||
图 4-0 OAM | ||
::: | ||
|
||
OAM 在社区的众多用户呼声下诞生。KubeVela 在“关注点分离”的核心思想之上,把平台的用户分成两种角色: | ||
- **平台构建者**:准备应用部署环境,维护稳定可靠的基础设施功能(如 MySQL Operator),并将基础设施能力作为“KubeVela 模块定义“注册到集群中。 | ||
- **最终用户**:即业务应用的开发者,他们选择部署环境、挑选能力模块、填写业务参数组装成 KubeVela 应用。使用平台的过程中,无需关心基础设施细节。 | ||
|
||
OAM 使用自定义资源将原先 All-in-One 的复杂配置做了一定层次的解耦,开发工程师管理 Component、运维工程师将 Component 组合并绑定 Trait 变成 AppConfig;平台工程师提供 OAM 的解释能力,将上述自定义资源映射到实际的基础设施;不同角色分工协作,整体上简化单个角色关注的内容,使得不同角色可以更聚焦更专业的做好本角色的工作。 | ||
整个工作流程如下图。 | ||
|
||
:::center | ||
![](../assets/OAM-how-it-works.png)<br/> | ||
![](../assets/kubevela.jpg)<br/> | ||
图 4-0 OAM | ||
::: | ||
|
||
- 组件(Component): | ||
- 运维特征(运维特征):运维特征是可以随时绑定给待部署组件的模块化、可拔插的运维能力,比如:副本数调整、数据持久化、设置网关策略、自动设置 DNS 解析等。用户可以从社区获取成熟的能力,也可以自行定义。 | ||
相比于传统的 “PaaS” 项目,KubeVela 这种基于 OAM 和 Kubernetes 构建的云原生应用平台,本质是“应用为中心的” Kubernetes,保证端到端接入整个云原生生态能力。同时,还为最终用户降低心智负担,带来媲美 PaaS 应用管理与交付体验。 | ||
|
||
[^1]: https://zh.wikipedia.org/wiki/%E4%BF%A1%E6%81%AF%E7%83%9F%E5%9B%B1 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,24 @@ | ||
# 10.1 “以应用为中心”的设计 | ||
|
||
究其原因,其实在于 Kubernetes 中的核心概念与体系,如:Pod、sidecar、Service、资源管理、调度算法和 CRD 等等,主要是面向平台团队而非最终用户设计(如:应用开发人员)。 | ||
|
||
为了解决这个问题,很多公司落地 Kubernetes 的时候采用了 “PaaS” 化的思路,即在 Kubernetes 之上,开发一个类 PaaS 平台。 | ||
|
||
但这个设计,跟 Kubernetes “以应用为中心”的设计不一致,Kubernetes 一旦退化成“类IaaS 基础设施”,它的声明式 API、容器设计模式、控制器模式根本无法发挥原本的实力,也很难接入更广泛的生态。 | ||
|
||
这个问题在 PaaS 系统上的体现就是不具备扩展性。假设我们要满足以下诉求: | ||
|
||
- 能不能帮我运行一个定时任务 | ||
- 能不能帮我运运行一个 MySQL Operator | ||
- 能不能根据自定义 metrics 定义水平扩容策略 | ||
- 能不能基于 Istio 来帮我做渐进式灰度发布 | ||
- 能不能... | ||
|
||
这里的关键点在于,上述能力在 Kubernetes 生态中都是非常常见的的能力,有的甚至是 Kubernetes 内置就可以支持。但是到了 PaaS 这里,要支持上述任何一个能力,都必须对 PaaS 进行一轮开发。而且由于先前的一些假设和设计,甚至很可能需要大规模的重构。 | ||
|
||
具体来说,以“应用为中心”的基础设施: | ||
|
||
只有让研发通过他自己的视角来定义应用,而不是定义 Kubernetes API 对象,才能从根本上解决 Kubernetes 使用者“错位”带来的各种问题。 | ||
|
||
|
||
符合以“应用为中心”的软件,从研发而不是基础设施的视角自描绘 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,11 +1,8 @@ | ||
# 10.7 小结 | ||
# 10.4 小结 | ||
|
||
本章,通过介绍 GitOps 理念,并扩展讨论如何在 Pod 内构建镜像、如何使用 Pod 组织 CI 流水线、如何通过 Argo CD 实施持续交付。相信,你已理解如何构建基于 Kubernetes 为底座的 CI/CD 系统。 | ||
|
||
至于产生落地中,你或许想要 Argo CD 换成 Flux CD、Tekton 换成 Jenkins X,还有那些代码质量检测、渐进式交付的集成等等,这对你而言,肯定也不再是什么困难的事情。 | ||
|
||
参考文档: | ||
- https://www.gitops.tech/ | ||
- 《利用 Tekton + ArgoCD 打造云原生 GitSecOps》 https://majinghe.github.io/devsecops/gitops/ | ||
- 《Enhance your Docker image build pipeline with Kaniko》https://medium.com/01001101/enhance-your-docker-image-build-pipeline-with-kaniko-567afb6cf97c | ||
- 《Creating CI Pipelines with Tekton》https://www.arthurkoziel.com/creating-ci-pipelines-with-tekton-part-1/ | ||
一个应用要在世界上任何一个地方运行起来,唯一要做的,就是声明“我是什么”、“我要什么”。在那个时候,所有基础设施的概念,包括 Kubernetes、Istio、Knative 统统消失不见。 | ||
|
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters