Docker项目的发布使得全操作系统语义的沙盒技术唾手可得,使得用户能够更好地、更完整地打包自己的应用,使得开发者可以轻而易举的获得了一个应用的最小可运行单位,虽然Docker或者容器本身的价值很大,但是如果想要让其产生商业价值或者说对云的价值,因为毕竟容器的数量上去了以后,管理就不是一件容易的事,所以就一定需要一个工具去管理这么多容器。

云原生技术学习之前的本意是由于工作需要,需要学习 Kubernetes 的使用;之前大概知道 Kubernetes 是可以编排管理容器,像 Docker Compose 那样可以去启动管理多容器的应用, 但是** Docker Compose 是在单个服务器或主机上创建多个容器的工具 , 可能真正要跟K8S打擂台的是 Docker Swarm 吧,可以在多个服务器或主机上创建容器集群服务**,很遗憾,最终以 Docker 公司宣布在核心产品中内置了 Kubernetes 服务,宣布了 Kubernetes 的胜出。了解到这一层背景,以及前辈的指引,秉承着知其然知其所以然的态度,偶然间闯进了阿里云原生技术公开课的学习。带着问题有目的的学习,往往会更有学习动力。那么萦绕在脑海的第一个问题就是: 什么是云原生?

1. 什么是云原生?

云原生其实是一套指导进行软件架构设计的思想。按照这样的思想而设计出来的软件:

  • 首先,天然就“生在云上,长在云上”;
  • 其次,能够最大化地发挥云的能力,使得我们开发的软件和“云”能够天然地集成在一起,发挥出“云”的最大价值。

云原生的愿景:在未来,软件从诞生起,就“生在云上,长在云上”,然后大家都需要遵循新的软件开发、发布和运维模式,从而使得软件能够最大化地发挥云的能力。总而言之:云原生定义了一条云时代应用从开发到交付的最佳路径

革命性的容器技术

一种理念的诞生或者一种开发模式的诞生,往往需要一种技术来支撑,否则就是空中楼阁。容器技术恰恰就扮演了支撑的角色,容器使得应用具有了一种“自包含”的定义方式。所以,这样的应用才能以敏捷的、以可扩展可复制的方式发布在云上,发挥出云的能力。这也就是容器技术为什么对云计算产生了重大影响的根本原因。

总而言之,容器技术是云原生技术的基础技术。

2. 云原生的技术范畴

上面谈到了云原生的概念,这个大概念,包含了很多很多的技术范畴。其中大多数技术,大家都有所耳闻。

2.1 云应用定义与开发流程

  • 应用定义与镜像制作
  • 配置 CI/CD
    • ci/cd流程是怎么样的?
  • 消息和 Streaming
  • 数据库

2.2 云应用的编排与管理流程

这也是 Kubernetes 比较关注的一部分。

  • 应用编排与调度

  • 服务发现治理

  • 远程调用

  • API 网关

  • Service Mesh

2.3 监控与可观测性

这部分所强调的是云上应用:

  • 如何进行监控
  • 日志收集
  • Tracing
  • 以及在云上如何实现破坏性测试,也就是混沌工程的概念

2.4 云原生的底层技术

  • 容器运行时
  • 云原生存储技术
  • 云原生网络技术

2.5 云原生工具集

在前面的这些核心技术点之上,还有很多配套的生态或者周边的工具需要使用,比如

  • 流程自动化
  • 配置管理
  • 容器镜像仓库
  • 云原生安全技术
  • 云端密码管理

2.6 Serverless

没有很理解这块内容

3. 云原生思想的理论基础

3.1 不可变基础设施

这一点目前是通过容器镜像来实现的,其含义:应用的基础设施应该是不可变的,是一个自包含、自描述可以完全在不同环境中迁移的东西;

传统应用基础设施(可变)

ssh到服务器,手动调整软件包,服务器调整配置文件,部署。可以看到应用下的基础设施(服务器),会不断被我们调整修改(可变)。

对”云“友好的应用基础设施(不可变)

一旦应用部署完成,那么这套应用基础设施就不会再修改了。如果需要更细,会更改公共镜像,构建新服务,以新服务替代旧服务。而我们之所以能够实现直接替换,就是因为容器提供了自包含的环境(包含应用运行所需的所有依赖)。所以对于应用而言,完全不需要关心容器发生了什么变化,只需要把容器镜像本身修改掉就可以了。因此,对于云友好的基础设施是随时可以替换和更换的,**这就是因为容器具有敏捷和一致性的能力,也就是云时代的应用基础设施。**云时代的基础设施,它是可以被替换的,可以随时被更换的,我们只关心有多少个容器。

3.2 云应用编排理论

4. 基础设施走向云的优点

4.1 基础设施的一致性和可靠性

同样一个镜像,无论是在哪里打开都是一样的。并且其中的操作系统环境对于应用而言都是一致的。而对于应用而言,它就不需要关心容器跑在哪里,这就是基础设施一致性非常重要的一个特征。这样的镜像本身就是自包含的,其包含了应用运行所需要的所有依赖,因此也可以**”漂移“**到云上的任何一个位置。

4.2 简单可预测的部署与运维能力

由于现在有了镜像,应用还是自描述的,通过镜像运行起来的整个容器其实可以像 Kubernetes 的 Operator 技术一样将其做成自运维的,所以整个应用本身都是自包含的行为,使得其能够迁移到云上任何一个位置。这也使得整个流程的自动化变得非常容易。应用本身也可以更好地扩容,从 1 个实例变成 100 个实例,1万个实例,这个过程对于容器化后的应用没有任何特殊的。最后,我们这时也能够通过不可变的基础设施来地快速复制周围的管控系统和支撑组件。因为,这些组件本身也是容器化的,是符合不可变基础设施理论的一套组件。

5. 云原生关键技术点

  1. 如何构建自包含、可定制的应用镜像
  2. 能不能实现应用快速部署与隔离能力
  3. 应用基础设施创建和销毁的自动化管理;
  4. 可复制的管控系统和支撑组件。

这四个云原生关键技术点是落地实现云原生技术的四个主要途径。

参考

阿里云云原生技术公开课