K8s 生态现状和应用交付的“下一站”| 学习笔记

本文涉及的产品
容器服务 Serverless 版 ACK Serverless,952元额度 多规格
容器服务 Serverless 版 ACK Serverless,317元额度 多规格
简介: 快速学习 K8s 生态现状和应用交付的“下一站”。

开发者学堂课程【4天定制混合云应用交付流水线-1024程序员节创造营公益课K8s 生态现状和应用交付的“下一站”】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址:https://developer.aliyun.com/learning/course/893/detail/14267


K8s 生态现状和应用交付的“下一站”

 

目录:

一、Kubemetes 和云原生技术带来的变化

二、问题和具体解决方法

三、发展趋势


一、Kubemetes 和云原生技术带来的变化

1. 云原生的本质

image.png

用云的两个特性:

第一,云可以帮助我们降低成本。

云的资源都是磁化共享的我们可以弹性的按需去使用我们需要的资源。当我们不需要使用它的时候,我们就不需要去花钱,这样可以降低我们的拥有和使用成本。

第二,云可以帮助我们提升效率。

因为现在复杂的应用的运维操作,它都以一种标准的云服务的方式提供出来。这就好比今天去麦当劳点外卖一样,我们不需要自己去做了。那今天我们在使用云服务也是一样的,很多底层的细节我们不需要去关心,也不需要去操作了我们可以花更多的时间专注于业务逻辑本身,从而提高研发和交付效率。

云原生正是这么一套方法论和 best practice 来帮助我们去实现这两个特性而这套方法论它进一步的具化成了具体的开源项目

正是有了这些具体的开源项目把释放云的红利这件事情给真正的落实下来,从而让我们真正能够享受到云的降本和提效两个特性。

2. 云原生促进了混合环境的流行

Kubemetes 如此重要,是因为它提供了统一一致的基础设施层抽象 

通过 Kubemetes,我们就有了一套统一的 API 去使用不同云的,包括计算存储网络在内的基础设施资源。通过Kubemetes,我们搭建一个混合云环境架构,它变得如此容易。而我们可以看到一个趋势就是云原生技术会使得很多环境不断的更加的流行起来。K8s 和云原生技术使搭建混合环境架构变得容易。 

3. 混合环境带来好处

第一,它能够让我们弹性降本,我们可以使用云上的资源来快速扩缩容从而快速的应对流量的高峰,以及在流量高峰过去的时候快速销毁资源,从而来节省成本。

第二,它能够让我们多云容灾,我们可以使用云在更广阔的地域部署不同的实力从而当某个地域出现问题的时候保证服务依然对用户可用。

第三,我们可以借助云的基础设施实现全球部署,这往往是单个公司没法去做到的而云服务厂商却有能力去做到,并且以一种标准化的服务给提供出来。这对于很多出海业务是非常有帮助的。

第四,今天很多中间件还有应用的运维能力等等,都通过标准的云服务提供出来这让开发不需要再去关心底层的细节,从而更加专注于业务逻辑本身,真正提升研发的效率。

总之,正是因为混合环境带来了诸多好处,所以混合环境逐渐成为企业上云的一种新常态。

 

二、问题和具体解决方法

1. 混合环境也带来了新的挑战

不同云基础设施的底层能力是不一样的混合环境的基础设施能力不一致包括:不同的数据库PolarDB vs MySQL,不同的监控平台ARMS vs Prometheus/Loki/Grafana,不同的交付流水线Flow vs Jenkins),还有不同的应用运维操作等等。

这导致用户需要去学习更多的东西,用户的使用难度变大了,学习成本变高了,这反而会导致整个团队交付效率、开发效率变低,并且操作起来也更容易出错。

但是这些问题通过正确的路径,正确的流程方法和架构,都是可以去避免的。

所以业界的下一个焦点必然是如何去设计一套好的系统和项目,去做高效安全的面向混合环境的应用交付,从而让开发者真正享受到云带来的红利,真正的去提升交付和开发的效率。

2. OAM:以应用为中心的标准交付模型

阿里云联合微软云在2019年末共同发布了Open Application Model(OAM),这是以应用为中心的一套标准交付模型的出现正是为了解决之前谈到的问题。

OAM 旨在实现标准统一面向混合云的应用交付流程。

我们可以看到 OAM 以应用为中心去定义服务的组件以及服务需要的运维能力,真正让开发者去关注应用本身,而不需要去关心底层的运维细节。

3. 阿里应用管理平台的演进

2018年,阿里的整个基础设施都进行了全面的 K8s 升级。

2019年初,阿里的主要应用平台EDAS等的核心发布链路开始切换到K8s。

2019年末,阿里联合微软发布统一应用模型 OAM,同时启动EDAS内核升级,PaaS 产品的边界扩展混合环境上。

2020年,阿里全面推进云原生这个 PaaS 产品整体升级OAMKubeVela 为统一架构来支持各类应用交付和运维场景,着手打造一个跨环境跨基础设施的统一应用管理体系。

4. 整个平台架构升级的过程中暴露的问题,沉淀的解法

问题:

第一个问题封装能力的问题。我们通常使用的模板语言如Go template不够灵活,并且大规模难以管理。

第二个问题交付模型设计的问题。应用交付流程是一个面向过程的一个工作流程而 K8s 面向终态的模型不太适用。 

第三个问题平台扩展性问题。平台的功能往往是与业务紧耦合的,缺乏通用的扩展性,致使迭代效率越来越低。我们需要的一个更通用的平台底座。

第四个问题架构合理性问题。经典架构设计往往作为一个 K8s 插件来实现无法做到面向多集群来进行交付。

相应的解法

针对封装能力的问题选型 CUE 语言来做封装抽象CUE 源于 Google Borg 系统是一个用户友好的数据配置语言,非常简单易用,并且能够满足大规模的场景。

针对交付模型的设计问题抽象出一层能够表达工作流的应用交付模型。

针对平台可扩展性的问题把整个平台系统的所有能力都设计成可插拔的并且提供这个IaC的方式来扩展平台能力。

针对架构合理性的问题把架构设计成为一个应用交付平面”,与运行时解耦提供集群和环境概念统一管理包括云服务等所有资源

5. Infrastructure-as-Code (IaC)

IaC 是指运维专家把他的知识通过一些框架,比如 Pulumi 写成代码,然后 commit 到 GitHub 代码仓库里面去,接下来 CICD 又从 Git 仓库把这段代码拉下来,用 Pulumi 去执行起来。而 Pulumi 会去对接和操作相应的云基础设施,把需要的基础设施资源给拉起来。

 

三、发展趋势

1.经典扩展云原生平台的方式

一种是使用模板语言。

模板语言可以把像 deployment pod 等复杂的对象通过封装,然透出简单的字段来给用户使用。而模板语言的问题在于灵活性不够并且当它数量大了的时候,它的结构复杂难懂,且难以大规模维护。

另一种方式是去写 K8s Controller。

通过 Kubemetes 对应的 SDK 来去构建相应的 API 和服务。然后,Kubemetes 需要写大量的代码来去做相应的运维逻辑。最后还要打包并部署到 Kubemetes 上面去。

虽然这种方式很灵活,但是它的难度太大它的专业要求度太高,且代码量大并且由于它的部署的本质,它整个开发响应的速度非常的慢。

2.IaC 是扩展平台的最佳方式

从下面图中我们可以看到,首先对于用户它可以通过编写简单的 q 的配置语言的代码,然后就把它打包成一个Template 并注册到 KubeVela 原生平台上去。

然后当用户部署一个交付计划的时候,相应的 Template 能立刻做出响应。而不需要像写 controller 一样重新打包并且它的整个语言的方式表达能力是比传统的模板语言更强大。

总结下来,IaC 有三个好处第一,灵活可编程第二响应速度快。第三大规模易维护。

3.KubeVela 项目

项目特点:

第一,它提供了上层应用交付抽象,它是基于标准开放应用模型OAM),抽象了基础设施底层细节,只透出用户关心的应用 API

第二,它内置了轻量高效的工作流,整个工作流无需额外启动进程或容器,它运行起来更加清亮高效。

第三,IaC 的方式扩展平台将运维逻辑用 CUE 语言代码化,比模板语言更灵活写 controller 简单一个量级。

第四,面向混合环境的应用交付平面提供了环境和集群等围绕应用的概念抽象统一管控所有应用依赖的资源包括云服务等)。 

KubeVela 项目的主旨

让应用的交付和管理变得简单可靠高效,让用户真正实现高效安全的混合环境应用交付。

4.KubeVela Application(应用部署计划)

内容:

第一部署组件 components

它里面包含了像 Helm chart,Kustomize云资源Cloud Formation 模板,Terraform 模块等等几乎可以包括一切交付品

第二运维能力 treat。

它是指应用部署后的持续运维,比如路由规则,自动扩速容规则、监控规则等等,都可以像乐高一样附着于服务组件上。 

第三,应用的全局策略

比如集群分发策略、健康检查策略SLO 等等,任何一个部署前需要遵守的规则都可以在这里声明。

第四,交付工作流 workflow。

比如蓝绿部署、带流量的渐进式部署、手动审批等等面向过程的管道式持续交付操作。 

作用:

一,简单易用。Properties 字段只需填用户关心的简化过的参数,其他底层细节被彻底抽象封装。

二,组件能力“胶水”。高度可扩展:模块化接入,拼测试衔接,管道式编排。能力“可编程”:高效响应需求变化,没有系统变更负担。

5.KubeVela 的多集群管理技术原理

这个是混合环境背后的技术原理

KubeVela 背后有一个叫做 Cluster Gateway 的项目用户首先把集群连接信息,比如 Kubeconfig 注册上去。

然后Cluster 在下发这个工作负载的时候,它会往 class 的各位发一个 request

Request 内容除了正常的工作负载以外还会包含目标集群的信息,而Gateway会负责找到目标集群的连接信息把工作负载对应的下发下去。

6、KubeVela 实现混合环境的统一应用交付

KubeVela 能力:

多集群灰度发布

多集群副本调度

子集群状态回流

跨集群资源拓扑

跨可用区容灾分布

环境差异化配置

统一可观测性

7、KubeVela 1.2规划

① 发布一站式 DevOps 体验的 Dashboard,默认内置 CICD 能力和常用的应用交付运维能力

② 增强 Vela CLI,提供 vela doctor 等辅助 debug 能力

③ Vela Workflow 支持主流 CI 接入:Jenkins、Github Action、GitLab

④ 改善 Workflow 出错信息,帮助用户快速定位中间环节问题

⑤ 可观测性:新增应用交付相关的 metrics,如发布频率、发布时长、MTTR 等

相关实践学习
通过Ingress进行灰度发布
本场景您将运行一个简单的应用,部署一个新的应用用于新的发布,并通过Ingress能力实现灰度发布。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
相关文章
|
13天前
|
存储 Kubernetes 持续交付
介绍一下Kubernetes的应用场景
【10月更文挑战第18天】介绍一下Kubernetes的应用场景。
54 3
|
2天前
|
JavaScript 持续交付 Docker
解锁新技能:Docker容器化部署在微服务架构中的应用
【10月更文挑战第29天】在数字化转型中,微服务架构因灵活性和可扩展性成为企业首选。Docker容器化技术为微服务的部署和管理带来革命性变化。本文探讨Docker在微服务架构中的应用,包括隔离性、可移植性、扩展性、版本控制等方面,并提供代码示例。
18 1
|
10天前
|
JSON Kubernetes 容灾
ACK One应用分发上线:高效管理多集群应用
ACK One应用分发上线,主要介绍了新能力的使用场景
|
1月前
|
Prometheus Kubernetes 监控
k8s学习--kubernetes服务自动伸缩之水平伸缩(pod副本伸缩)HPA详细解释与案例应用
k8s学习--kubernetes服务自动伸缩之水平伸缩(pod副本伸缩)HPA详细解释与案例应用
k8s学习--kubernetes服务自动伸缩之水平伸缩(pod副本伸缩)HPA详细解释与案例应用
|
29天前
|
应用服务中间件 调度 nginx
Kubernetes的Pod调度:让你的应用像乘坐头等舱!
Kubernetes的Pod调度:让你的应用像乘坐头等舱!
|
1月前
|
存储 Kubernetes 负载均衡
基于Ubuntu-22.04安装K8s-v1.28.2实验(四)使用域名访问网站应用
基于Ubuntu-22.04安装K8s-v1.28.2实验(四)使用域名访问网站应用
20 1
|
1月前
|
Kubernetes 负载均衡 应用服务中间件
k8s学习--ingress详细解释与应用(nginx ingress controller))
k8s学习--ingress详细解释与应用(nginx ingress controller))
109 0
|
1月前
|
缓存 Kubernetes 负载均衡
k8s学习--sessionAffinity会话保持(又称会话粘滞)详细解释与应用
k8s学习--sessionAffinity会话保持(又称会话粘滞)详细解释与应用
116 0
|
1月前
|
存储 Kubernetes 开发工具
k8s学习--ConfigMap详细解释与应用
ConfigMap 是 Kubernetes 中用于管理非机密配置数据的 API 对象,可将应用配置与容器分离,便于动态管理和更新。它支持四种创建方式:命令行参数、多个文件、文件内的键值对以及 YAML 资源清单文件。ConfigMap 可通过环境变量或挂载为卷的方式传递给 Pod,并且当通过卷挂载时支持热更新。这使得配置管理更加灵活和安全,无需重新部署应用即可更新配置。
|
13天前
|
存储 Kubernetes 监控
深度解析Kubernetes在微服务架构中的应用与优化
【10月更文挑战第18天】深度解析Kubernetes在微服务架构中的应用与优化
52 0