新钛云服已累计为您分享741篇技术干货
本篇文章,主要介绍 Pulumi 是什么以及它的相关原理,并且使用它搭建一个 Nacos 和 SpringBoot 的环境!
一、Pulumi 诞生
(一)诞生原因
Pulumi 是一个架构即代码的开源产品,使用它即可在任何提供 SDK 或者 API 的云商平台,部署和使用容器、服务器以及基础架构等云资源。
它提供了多种主流的编程语言,让使用者可以通过自己最熟悉的编程语言,编写代码去控制云平台上面的各种云资源。而不是让初学者去学习那些繁琐难记的标签语言,降低了其入门的难度。
1、技术演化:
1)最初的云厂商仅仅只提供IaaS、PaaS这类云服务,并没有把它们组合起来;
IaaS: Infrastructure as a service,基础设施即服务。PaaS: Platform as a service, 平台即服务。SaaS: Software as a service, 软件即服务。
诞生一种方式:架构即代码/基础设施代码化,(Infrastructure As Code),即IaC。
结果:
亚马逊诞生了类似于云服务 CloudFormation 这类产品,这类产品可以使用一些简单的方法创建和管理一系列有关联的AWS的资源。
2)CloudFormation 只支持AWS,ROS只支持阿里云,但是用户可能会出于安全或者业务考虑,鸡蛋不想放在同一个篮子里,就会选择多个云商;
为了支持多个云商资源的创建和管理,诞生了开源产品 Terraform,该产品支持多个云商的SDK,使用标记语言的方式去创建和管理云资源。
缺点:上手难度大,用户需要额外去学习一种特定的标记语言 HCL (HashiCorp Configuration Language),对新入门同学不够友好。
2、Pulumi 登场
由此,诞生了我们的主角(Pulumi):
主要作用:
1)快速组合多类型云资源搭建用户业务;
2)满足用户多云商多区域容灾的业务需求;
3)如果使用多个云商,技术人员不需要熟练掌握两家甚至多家云厂商的技术与服务产品;
4)标记语言需要一定学习成本,技术人员只要会一种主流语言即可。
(二)Pulumi 组件
工作原理:
个人理解:
Pulumi 程序运行后,Language host 会把程序代码转换成 Pulumi 能理解的方式,然后传递给部署引擎。
部署引擎根据资源有无以及资源类型,对资源提供商发起相关操作!
1、组件(Cli端)
1)语言宿主(Language Hosts)
语言宿主负责运行一个 Pulumi 程序,并设置一个可以向部署引擎注册资源的环境。
a、语言执行器
Pulumi 用于启动程序所用语言(如Node或Python)的 Runtime (运行时),此二进制文件随Pulumi CLI一起分发。
名称类似:pulumi-language-<language-name>的二进制文件。
它是语言处理中枢,负责为您的开发语言准备好与之对应的环境。譬如:Python 3.7。
b、Runtime(运行时/语言运行器)
它会负责为您编写的程序做好运行准备,并在过程中监控程序的运行。
2)部署引擎(Deplayment Engine)
部署引擎负责,计算将基础架构的当前状态驱动到程序表示的所需状态所需的一组操作。
当从语言宿主接收到资源注册时,引擎会查询现有状态以确定该资源之前是否已创建。
如果没有,引擎会使用资源提供者来创建它。
如果它已经存在,则引擎与资源提供者一起工作,通过将资源的旧状态与程序表示的资源的新期望状态进行比较来确定发生了什么变化(如果有的话)。
如果有更改,引擎会确定它是否可以就地更新资源,或者是否必须通过创建新版本并删除旧版本来替换它。
该决定取决于资源的哪些属性正在发生变化以及资源本身的类型。
当语言宿主与引擎通信它已完成 Pulumi 程序的执行时,引擎会查找任何它没有看到新资源注册的现有资源并安排这些资源以进行删除。
引擎已经被封装进pulumi cli,无需额外安装与部署。
3)资源提供商(云商)
a、资源插件
云商不同,插件不同。
b、SDK
云商相关 SDK。
2、组件(Service 端)
该组件主要保存 Pulumi 相关的 Project、Stack 等配置。
最新版 Pulumi 默认 Service 是 Pulumi 官方的 SAAS 界面:
1)官方 Service 端
https://app.pulumi.com/