0.1. 开发人员 0.2. 编程人员 0.3. 学生 在学习一门综合性技术时,不应该着急看源代码,理清自己的定位才是最重要的。 0.1. 开发人员 如果是纯粹的开发人员,无论是前端、后端、还是应用和游戏开发,首先应该明白两个道理: kubernetes和容器技术主要解决的是代码编写完成之后的事情,这不单单是发布或者CI/CD,而是从执行完git commit 和 git push 之后开始,都应该进入容器化管理流程,当然包括后续发布、运维、升级、回滚等阶段。 kubernetes体系的核心是为开发者提供编写代码过程中的微服务编程范式。 作为开发人员,最应该关注的是: kubernetes API 对象的细节 容器设计模式 kubernetes API 编程范式 开发者应该习惯把服务想象成容器,把应用想象成Pod,把基于容器和kubernetes的设计思想和架构方式融入到平常的工程实践中,大量实践这些思想和设计模式,编写各类CRD和Controller,并想办法提高编写自定义Controller项目的性能和服务能力。 开发者可以尝试扮演公司或者组织中推广微服务和云原生体系的倡导者,热心帮助团队成员共同学习 Kubernetes 的设计思想和 API,全力帮助 Istio 或者 Knative 这样的Service Mesh 和 PaaS 平台在组织中落地。 0.2. 编程人员 如果是专注服务器端的编程人员,或者运维工程师,更应该关注的是 Kubernetes 项目背后的实现原理。 此外,Kubernetes 项目的各个可扩展性接口,也是需要重点关注和理解的对象,比如CNI和网络插件的工作方式、CSI 和存储插件的设计、Kubernetes Volume 管理的完整流程,以及 CRI 设计和各种 container runtime 的异同。 从这个角度来说,Kubernetes 项目就是当前云计算平台层开源项目的事实标准,熟悉其思想、架构、实现细节甚至核心组件源码,不仅是学习这项技术的必经之路,也是传统后端技术人员向云端转型的最佳途径。 0.3. 学生 作为学生或者刚入行的初学者,建议关注项目和平台背后更深层的基础和底盘部分,了解操作系统和硬件的实际工作方式,甚至根据需要重新实现或绕过某些部分,这是进行系统性能优化的关键。理解“所有系统都是分布式系统”的这句话的意思,了解分布式系统设计思想,这也是 Kubernetes 分布式项目构建的基础。 一旦明确定位,抓到精髓和主线,接下来的学习过程其实就是“无招胜有招”,可以随心所欲地按照实际项目、所关心的领域逐步展开,完全不必拘泥于某种特定套路。
0.1. IaaS(Infrastructure as a server 基础设施即服务) 0.1.1. 概念 0.1.2. 应用 0.1.3. 优点 0.1.4. 缺点 0.2. PaaS(Platform as a Server 平台即服务) 0.2.1. 应用 0.2.2. 优缺点 0.3. SaaS(Software as a Server 软件即服务) 0.4. DaaS(Data as a Server 数据即服务) 0.5. BaaS(Backend as a Service 后端即服务) 0.6. FaaS(Function as a service 函数即服务/无服务器计算) 0.7. NaaS(Network as a service) 0.1. IaaS(Infrastructure as a server 基础设施即服务) 0.1.1. 概念 云端公司把IT环境的基础设施建设好,然后直接对外出租硬件服务器或者虚拟机。消费者可以利用所有计算基础设施,包括处理CPU、内存、存储、网络和其它基本的计算资源,用户能够部署和运行任意软件,包括操作系统和应用程序。++消费者不管理或控制任何云计算基础设施,但能控制操作系统的选择、存储空间、部署的应用,也有可能获得有限制的网络组件(例如路由器、防火墙、负载均衡器等)的控制++。 0.1.2. 应用 云端公司一般都会有一个自助网站,用户可以向云端公司签订租赁协议以获取一个账号,登录之后可以管理自己的计算设备:开关机、安装操作系统、安装应用软件等。 0.1.3. 优点 IaaS型租用方式对用户来说优点很明显,就是非常灵活,也是自由度最大的一种类型。用户可以决定安装什么操作系统,以及是否需要安装或者安装什么类型的数据库,安装什么软件等等。就像自己买了台电脑,如何使用是你全权做主。 0.1.4. 缺点 不过缺陷也很明显,除了管理维护量大之外,还有一个缺陷就是:计算资源严重浪费。操作系统、数据库以及中间件本身就要消耗大量的计算资源,而这些消耗对于租户而已是必须的但是又是无用的,因为用户只是想要运行软件。 0.2. PaaS(Platform as a Server 平台即服务) 即把运行用户所需的软件的平台作为服务出租。 0.2.1. 应用 云端公司要做事情就是运行软件所需要的下7层部署完毕,然后再PaaS上划分小块(容器)对外出租,租户只需要安装和使用软件就可以了。 平台软件层包括操作系统、数据库、中间件和运行库,但是并不是每一个软件都需要这4部分的支持,需要什么是由软件决定的。 PaaS又分为2种,半平台PaaS和全平台PaaS。 半平台PaaS:只安装操作系统,其他的租户自己去解决。这样会比较麻烦,因为你需要有较强的技术实力,而且需要耗费部分资源去安装软件运行需要的、的中间件、运行库、数据库。 全平台PaaS:安装应用软件依赖的全部平台软件,也就是4部分全部准备完毕。不过大家也知道,世界上的应用软件如此庞大,支撑他们的语言、数据库、中间件、运行库可能都不一样,PaaS云端公司不可能全部都去安装,所以他们支持的软件是有限的。 0.2.2. 优缺点 相对于IaaS来说,PaaS租户的灵活性降低了,只能在云端提供的有限平台范围内做软件,但是有优点也很明显,能够最大化利用租用的资源和不需要租户有高深的IT技术。 0.3. SaaS(Software as a Server 软件即服务) 把软件租出去,用户连安装都不需要了。 对比PaaS略微有一点不同,应用软件是云端公司来安装、运维的,租户使用软件,需要++管理的是这些软件产生的数据信息++。 一般来说SaaS适用的软件都有如下的特点: 复杂:软件庞大、安装复杂、使用复杂、运维复杂,单独购买架构昂贵,例如ERP、CRM、BI等。 模块化:按功能模块划分,需要什么功能就组什么模块。 多租户:多个企业用户同时操作,使用同一个软件而不是互相干扰。当然,数据是逻辑隔离的,不同用户的数据检索字段之一必然是用户身份信息。 多币种多语言多时区的支持 0.4. DaaS(Data as a Server 数据即服务) 云端公司负责建立全部的IT环境,++收集用户需要的基础数据并且做数据分析,最后对分析结构或者算法提供编程接口,让数据成为服务++。 DaaS是大数据时代的象征,能做DaaS服务的云端公司需要从数据积累、数据分析和数据交付三方面积累自身的核心竞争力。 0.5. BaaS(Backend as a Service 后端即服务) 服务商为移动应用开发者提供整合云后端的边界服务。为应用开发提供后台的云服务,包括提供存储、托管环境,也包括提供推送等通行后端技术能力。BaaS作为应用开发的新模型,进一步实现专业分工,有助于应用的成本下降和市场的进一步繁荣。 BaaS是在PaaS和SaaS之间,为了满足移动互联网快速发展的需要,将后端的能力以服务形式提供,是在PaaS平台开发能力的基础上,用SaaS的思路,将后端能力服务化,让开发者在此基础上开发自己的Software解决方案。 0.6. FaaS(Function as a service 函数即服务/无服务器计算) 服务商提供一个平台,允许客户开发、运行和管理应用程序功能,而无需构建和维护通常与开发和启动应用程序相关的基础架构的复杂性。 按照此模型构建应用程序是实现“无服务器”体系结构的一种方式,通常在构建微服务应用程序时使用。 0.7. NaaS(Network as a service) 网络即服务(NaaS),指客户可以通过互联网访问第三方网络传输服务; 其中有三个服务是尤为常见的:虚拟专用网、按需带宽和传输优化。 网络即服务与物理网络之间是有区别的。 网络即服务的根源在云计算,那么,第一个实用NaaS选择就是虚拟覆盖网络。虚拟覆盖网络是隧道和虚拟交换机的组合,它在物理网络设备“之上”创建了一个网络。