我与云原生的那些故事【与云原生的故事】

举报
gentle_zhou 发表于 2022/05/07 22:28:39 2022/05/07
【摘要】 本文会从我结识云原生过程的角度,来讲一讲我理解的云原生。本文会分为:Docker容器 -> Kubernetes -> 微服务 ->云原生。

初认云原生,还是在我研究生期间一门云计算课上,当时看到cloud native这个名词的时候,在触摸到技术新潮的同时,更多的是惊奇:什么是云原生?啥东西可以原生在云上?

本文会从我结识云原生过程的角度,来讲一讲我理解的云原生。本文会分为:Docker容器 -> Kubernetes -> 微服务 ->云原生。

Docker

带着这份好奇,我接受了教授布置的第一份作业:在本地Docker上开发一个网页项目。在开发初期,我就被Docker惊奇到了,不再需要去搭建那些复杂的环境,我们直接就可以复制导师提供的容器,实现高效创建与部署环境,只需专注于开发业务的目的。Docker这种容器化技术,用于将应用程序自动部署为可在云或本地运行的便携式独立容器。

了解到这,我就对Docker/容器产生了好奇,它和我先前已经接触过的VMWare虚拟机有什么区别呢?我在网上找到了下图,就做了很好的对比:
image.png

从上图可知,虚拟机包括了应用程序,依赖库/二进制文件,管理程序和完整的操作系统。而与之对比的,容器则只需要应用程序和依赖项/二进制文件;作为一个独立进程,与各个容器共享操作系统。

那Docker是用了什么技术吗?首先,它使用了 Linux 内核和内核功能(例如 Cgroups 和 namespaces)来分隔进程,以便各进程可以相互独立运行;这种独立性正是开发容器的目的。它保证可以独立运行多种进程、多个应用,更加充分地发挥基础设施的作用,同时保持各个独立系统的安全性。其次,Docker容器工具可提供基于镜像的部署模式,这使得它能够轻松跨多种环境,与其依赖程序共享应用或服务组;还可在容器环境中自动部署应用。此外,由于这些工具基于 Linux 容器构建,使得 Docker 既易于使用,又可为用户提供高度应用程访问权限、快速部署以及版本控制和分发的能力。总之,Docker容器给我们开发者带来的好处不少:模块化(微服务的方法,采用与面向服务的架构(SOA)类似的使用方法在多个应用间共享进程)、层和镜像版本控制(每个 Docker 镜像文件都包含多个层,这些层组合在一起,构成单个镜像)、镜像版本回滚、快速部署(为每个进程构建容器,可以快速将类似进程应用到新的应用程序中;且无需启动操作系统即可添加或移动容器)。

说了那么多,那Docker有什么限制吗?也是有的,因为Docker本身非常适合用于管理单个容器。但随着我们开发越来越复杂,开始需要越来越多的容器和容器化应用(真正的生产型应用会涉及多个容器),我们会把它们划分成数百个部分,这就很可能会导致管理和编排变得非常困难。最终,我们就需要对容器实施分组,以便跨所有容器提供网络、安全、遥测等服务。于是,Kubernetes 就应运而生了。

Kubernetes

Kubernetes,又称为 k8s(首字母为 k、首字母与尾字母之间有 8 个字符、尾字母为 s,所以简称 k8s)或者简称为 “kube” ,是一种可自动实施 Linux 容器操作的开源平台,它让容器应用进入了大规模工业生产。

就像前面在Docker里提到的,我们需要对容器实施分组,以便跨所有容器提供网络、安全、遥测等服务,而Kubernetes就是可以帮助我们轻松高效地管理运行 Linux 容器的多组主机集群的托管平台,而且这些集群可跨公共云、私有云或混合云部署主机。

利用 Kubernetes,我们可以够达成以下目标:跨多台主机进行容器编排、更加充分地利用硬件最大程度获取运行生产应用所需的资源、有效管控应用部署和更新并实现自动化操作、挂载和增加存储用于运行有状态的应用、快速并按需扩展容器化应用及其资源、对服务进行声明式管理来保证所部署的应用始终按照部署的方式运行、利用自动布局和自动重启和自动复制以及自动扩展功能以对应用实施状况检查和自我修复。

下面则是Kubernetes的架构图:
image.png

上图中介绍到了各个组件:kube-master即控制节点(API Server即资源操作入口,Controller Manager即内部管理控制中心,Scheduler即集群分发调度器)、kube-node即服务节点(Kubelet即节点上的Pod管家,Proxy即负载均衡/路由转发,kubectl即集群管理命令行工具集)。

而随着 Kubernetes 的日趋成熟,基于该 托管平台之上构建适用于不同场景的应用就成为了新的发展方向;这就像我们得到羊毛之后,又编制成了毛衣、围脖、毛裤等等,原材料找到了自己的用途开发成了不同的产品。Kubernetes 也是,毕竟我们并不是就为了部署和管理容器而采用 Kubernetes,开发承载其上的应用才是其价值。

发展到现在,云可以说是成为了我们可以稳定可得的基础设施,但是业务上云成了一个难题。Kubernetes 的出现与其说是容器编排解决方案,倒不如说是为了解决应用上云(即云原生应用)这个难题。其中包括微服务和Serverless 架构(在 Serverless 架构下,开发者只需要关注于上层应用逻辑的开发,而诸如资源申请,环境搭建,负载均衡,扩缩容等等服务器相关的复杂操作都由平台来进行维护),都可以作为云原生应用的架构。

华为云Karmada

Karmada(Kubernetes Armada)则是一个Kubernetes管理系统,能够帮助我们开发者跨多个Kubernetes集群和云运行云原生应用程序,而无需更改我们的应用程序。通过使用Kubernetes原生API并提供高级调度功能,Karmada实现了真正开放的多云Kubernetes。

Karmada旨在为多云和混合云场景中的多集群应用程序管理提供自动化功能,具有集中式多云管理,高可用性,故障恢复和流量调度等关键功能。官方网站:https://karmada.io/

华为云KubeEdge

KubeEdge(Kube+Edg)作为云原生的边缘计算平台,顾名思义就是依托K8s的容器编排能力和调度能力,实现云边协同、计算下沉、海量设备的平滑接入。这个架构主要是分了云、边、端三部分,云上边就是我们的控制面,边就是我们的边缘节点,端就是跑了我们的一些端侧设备。

华为云Volcano

Volcano是基于Kubernetes的批处理系统,源自于华为云AI容器,Volcano方便AI、大数据、基因、渲染等诸多行业通用计算框架接入,提供高性能任务调度引擎,高性能异构芯片管理,高性能任务运行管理等能力。该项目基于华为云容器平台大规模高性能计算应用管理的最佳实践,在原生 K8s 的基础上,补齐了作业 (Job) 调度和设备管理等多方面的短板。

微服务

而微服务作为Cloud Native 的应用架构,在带给我们很多开发和部署上灵活性和技术多样性的同时,也增加了服务调用的开销、分布式系统管理、调试与服务治理方面的难题。如何探索将 Kubernetes 作为微服务架构平台也成为了一个热点话题。

云原生

CNCF(云原生计算基金会)给出了云原生应用的三大特征:

  1. 容器化包装:软件应用的进程应该包装在容器中独立运行。
  2. 动态管理:通过集中式的编排调度系统来动态的管理和调度。
  3. 微服务化:明确服务间的依赖,互相解耦。

下图则是云原生所需要的能力和特征:
image.png

而如果我们想基于Kubernetes创建一个云原生应用,那么基本流程就会如下图所示(分解服务,建立docker镜像,应用程序配置文件,可选-配饰maps,Kubernetes YAML文件,可选-bootstrap脚本):
image.png

最后,回到我们文章开头的两个问题,什么是云原生?啥东西可以原生在云上?
云原生就是包含了微服务,DevOps,持续交付,容器化特征、能力的体系结构。至于什么东西可以原生在云上呢,当然就是我们的软件应用啦。

参考资料

  1. https://www.redhat.com/zh/topics/containers/what-is-docker
  2. https://docs.microsoft.com/zh-cn/dotnet/architecture/microservices/container-docker-introduction/docker-defined
  3. https://blog.csdn.net/huwh_/article/details/71308171
  4. https://jimmysong.io/kubernetes-handbook/cloud-native/from-kubernetes-to-cloud-native.html
  5. https://blog.csdn.net/stone_tomcate/article/details/103989454
  6. https://www.cncf.io/
  7. https://segmentfault.com/a/1190000041030880
  8. https://bbs.huaweicloud.com/blogs/147038
  9. https://bbs.huaweicloud.com/blogs/349802

征文活动

【与云原生的故事】有奖征文火热进行中:https://bbs.huaweicloud.com/blogs/345260

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。