开篇——初识云原生
作为云原生专栏的开篇,本节不会介绍具体的技术,而是先浅谈下我自己对于云原生的一些体感。
从云计算说起
云的本质就是对计算资源的抽象,对使用者屏蔽底层硬件的细节。 传统的云计算如典型的 OpenStack 等,是建立在虚拟化的技术之上的,其中的关键就是 Hypervisor,即在一台真实的物理机上,可以运行多个虚拟机操作系统,多个虚拟机共享物理机的硬件资源。
但是这种方案在大规模的服务集群下就会存在一些问题,例如:
- 资源利用率低:每个虚拟操作系统都需要消耗宿主机的资源,如 CPU、内存、网络带宽等,使得每台宿主机上可以搭建的虚拟机是有限的,无法实现规模化。
- 维护和问题排查困难:一旦虚拟机上的应用出现问题,涉及到的排查路径可能是虚拟机应用->虚拟机操作系统->物理机应用->物理机操作系统->物理机硬件资源,导致问题排查的效率较低。
- …
什么是云原生
为了解决传统云计算领域的问题,容器化技术逐渐大放异彩,并推动云原生的快速发展。
简单来说,云原生指的是在包括公有云、私有云、混合云等动态环境中构建和运行规模化应用的能力。
这里面涉及几个关键点:
- 云原生鼓励混合云部署: 这也是目前很多互联网大厂所采用的方式,即同时选择几家公有云,并且在企业内部也搭建私有云,将不同的业务部署在不同的云环境上,以达到冗余和容灾的目的。
- 云原生强调动态环境: 利用云原生的弹性调度能力,应用可以实现资源的动态扩缩容和环境的快速切换。
- 云原生可以实现规模化: 基于云原生的容器化、弹性调度、服务治理等等技术手段,可以实现服务的大规模快速部署,解决了传统云计算的问题。
可以看出,云原生并不是某一项具体的技术,而是一种思想,是技术、业务和企业管理方法的集合。其中涉及到多种设计思想和技术手段,包括但不限于:
- 应用容器化封装:基于操作系统的 cgroup、namespace 等技术,对应用进行容器化封装,解决了传统基于虚拟化云计算中的资源利用率、应用隔离等问题。
- 服务网格:最近大火的 Service Mesh 技术和其中的佼佼者 Istio,使得微服务治理、可观测性等等问题得到了很好的解决。
- 声明式 API:Kubernetes 致力于推动云原生的标准化,对各种技术都制定了标准化的 API,接口与实现分离。
- …
基于上述的设计思想和技术手段,云原生的意义在于:
- 提升系统的可用性、可管理性、可观察性。
- 使工程师能以最小成本进行频繁和可预测的系统变更。
- 提升速度和效率,助力业务成长,缩短 I2M(Idea to Market)。
核心项目概览
在 CNCF 官网,我们可以看到云原生技术栈的 Landscape,几乎大多数主流的框架和中间件都和云原生有或多或少的关联。
我们不可能每个项目都去学习,下面我简单梳理一下其中最核心的技术:
- Core Control Plane 核心控制平面:这一层最核心的就是 Kubernetes,它可以实现集群管理、容器编排、资源调度、服务发现等功能,是整个云原生体系的基石。 再结合 gRPC 作为轻量级网络通信,和 etcd 作为持久化存储,核心控制层就搭建完成了。
- Runtime Management 运行时管理:有了核心控制层,下一步我们需要做的就是在此基础上运行服务。运行时管理最重要的就是三个要素:计算、存储和网络。 Kubernetes 基于声明式 API,对每一项都进行了标准化的 API 抽象,分别对应了 containerd、CSI 和 CNI。
- Service Discovery 服务发现:服务运行之后,就涉及到服务治理相关的工作,包括服务发现、负载均衡、路由策略、动态权重、鉴权等等,这些功能都可以基于 Istio 的 ServiceMesh 技术轻松实现。
- Image Registry 镜像管理:镜像就是对服务所需资源的描述。 通过 Harbor 镜像仓库,我们可以实现服务镜像的可复用、可重现、可管理、可追溯。
- CI/CD:云原生技术整合了 Jenkins、Helm、Tekton,可以快速搭建项目持续部署、持续集成和生命周期管理平台。