云原生基础设施有哪些
1.一切皆为资源
云原生延续K8s一切皆资源的设计理念,将所有关于应用运维的对象抽象成几类运维资源,并对于不同的运维资源抽象不同的状态机、进行不同的生命周期编排和数据关系查询等。与此同时,资源也伴随着生命周期的管理,比如资源的 Add、Update、Delete 三种事件管理,以及事件执行前、执行后的状态管理,同时我们可以在不同阶段插入钩子,并进行自定义资源和编排动作,资源时间与状态如下图所示。
在云原生中,资源由几种基本要素组成,会根据不同情况有所调整,主要有以下两个部分:
● 基础部分∶ 元数据、规则、状态、日志、事件。
● 扩展部分∶状态机、生命周期、健康检查、依赖关系。

2.一切皆可编排
在云原生基础设施中,可以将所有可执行的代码抽象成不同类型的执行动作,同时将执行动作编排成为流水线,以便简化各类需要执行一定操作的功能,如环境升级、应用生命周期编排、发布流程等。一般,我们可以基于Kubernetes 的 Operator 进行编排处理,并逐步构建上层应用的流水线,云原生编排流水线如下图所示:

Operator的执行动作可以分为两部分∶Action和Trigger。Action 几乎包括当下常用的轻量化代码执行方式,而 Trigger 主要针对Kubernetes 资源定制了触发方式,并根据相关的执行动作进行编排,形成流水线。在这个过程中,可以增加一些能力,比如超时、重试次数、依赖任务、执行条件等判断,以及依赖关系配置等。
3.依赖解耦,能力下沉
交付的稳定性是以容器作为不可变基础设施,让应用程序和运行环境解耦。不可变基础设施指的是任何基础设施的实例一旦创建之后便成为只读状态,不可对其进行任何更改。如果改变了某些实例,就需要创建对应的新实例。从而减少配置工作、避免配置漂移、易于解决部署环境间的差异、简化了CI/CD的流程及版本管理。
在基于云原生的实践中,避免将静态环境信息与应用逻辑耦合,可以通过微服务组件、Service Mesh 等减少相关的依赖,提升应用架构的可伸缩性,云原生基础设施促进了资源能力下沉,节省工作量的同时,提升了安全性,开发人员只需关心业务逻辑代码的编写,基础设施加系统的高可用由云来承担,从而使开发人员的价值最大化。云原生能力下沉如下图所示:

5.观察追踪,自动运维
可观测性由日志、指标和追踪来构建,在云原生中,可观测性十分重要,我们需要通过可观测性分析在面向终态的执行中出现了什么异常,以便在特殊情况下快速介入,云原生可观测性如下图所示:

浙公网安备 33010602011771号