当前位置:首页 >知识 >Pulumi实战 降低了其入门的难度

Pulumi实战 降低了其入门的难度

2024-06-30 18:17:38 [百科] 来源:避面尹邢网

Pulumi实战 | 一款架构即代码的实战开源产品

作者:黄平安 开发 架构 本文简单介绍了 Pulumi 的基本原理以及简单用法。主要是实战为了起抛砖引玉的作用,个人认为 Pulumi 的实战好处和用法还有待探索。希望这篇文章能给读者一定的实战帮助,谢谢!实战

本篇文章,实战主要介绍 Pulumi 是实战什么以及它的相关原理,并且使用它搭建一个 Nacos 和 SpringBoot 的实战环境!

一、实战Pulumi 诞生

(一)诞生原因

Pulumi 是实战一个架构即代码的开源产品,使用它即可在任何提供 SDK 或者 API 的实战云商平台,部署和使用容器、实战服务器以及基础架构等云资源。实战

Pulumi实战 降低了其入门的难度

它提供了多种主流的实战编程语言,让使用者可以通过自己最熟悉的实战编程语言,编写代码去控制云平台上面的各种云资源。而不是让初学者去学习那些繁琐难记的标签语言,降低了其入门的难度。

Pulumi实战 降低了其入门的难度

1、技术演化:

1)最初的云厂商仅仅只提供IaaS、PaaS这类云服务,并没有把它们组合起来;

Pulumi实战 降低了其入门的难度

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/​​

图片

图片

图片

2)其它存储方式充当 Service 端

当然,也可以用其它存储或者本地来保存这些配置!

如下面所示,我使用本地充当 Pulumi Service:

pulumi login file://D:\Lang-Python\Data\Pulumi-Service

图片

二、为什么使用 Pulumi?

Pulumi 特点:多语言,多云商的服务支持。

但是,我个人觉得,这并不是我使用他的主要原因。

因为他的多语言和多云商的两个特点其实并没有让我感觉有多么便利。

多语言:各大云商也基本支持了多种主流编程语言的SDK。

多云商:由于云商支持的资源不同,其实 Pulumi 并不能做到一套代码走天下,在多个云商处复用。

我选它的因素:

它有一个资源状态的管理功能,该功能可以让你在操作资源时,省略了不少工作!

以及它的资源关联性,即一个资源的输出可以充当另一个资源的输入。

这两个特点也是与云商原生 SDK 最大的区别!

Pulumi 中处理资源之间的关联性,是通过其 output 机制实现的。

三、怎么使用Pulumi?

Pulumi 初体验

1、Pulumi 结构

图片

2、安装 Pulumi

Pulumi支持多平台,包括Linux、Windows、MacOS等操作系统。

1)安装Pulumi需要预先安装Chocolatey包管理软件:

administrator方式打开PowerShell命令行:

Set-ExecutionPolicy Bypass -Scope Process -Force; [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.ServicePointManager]::SecurityProtocol -bor 3072; iex ((New-Object System.Net.WebClient).DownloadString('https://community.chocolatey.org/install.ps1'))

参考:https://chocolatey.org/

2)choco安装 Pulumi

choco install pulumi

3、开始使用 Pulumi

1)创建 Pulumi 项目

pulumi new alicloud-python

如果该机器第一次使用 Pulumi 创建项目的时候,会弹出两个选项:

a)输入 Key;

b)浏览器登录 Pulumi 后端服务;

如果,选择“浏览器登录 Pulumi 后端服务”的选项,程序会触发浏览器打开 Pulumi 的 Web 在线登录界面。

我使用 GitHub 账号登录进去,里面是 Pulumi 的 Dashboard 。

该过程中,会同时让你创建 Project 以及 Stack!

2)编写自己的源代码,相关资源类型在其云商 SDK处查看

图片

3)更新操作

pulumi up

该操作会把 stack 里面的资源进行创建或更新操作!

4)销毁操作

pulumi destroy

危险:该操作会销毁 stack 处的所有资源!

四、其它特点

1、即时性

部分云商对 Pulumi 支持度非常高,比如:Azure。

只要 Azure 上传新资源,Pulumi 基本当天就能使用该资源。

2、DevOps\CICD

Pulumi 自带 Automation API 组件,可以抛弃 CLI,使用代码包调用的方式,直接使用 Pulumi。

换言之,即程序中可以直接调用 Pulumi 程序。

3、转换器

目前支持这几种云商转换成 Pulumi 程序。

比如:Terraform 转换成 Pulumi!

​​https://www.pulumi.com/tf2pulumi/​​

五、搭建 Navos 和 SpringBoot 环境:

上面大致,讲解了 Pulumi 的基本原理和使用方式,下面给大家展示一下,通过 Pulumi 搭建一套环境的方案!

1、编写 Shell 脚本

编写脚本包括多个步骤:

图片

如上图所示,搭建一个 Spring Boot 环境,需要许多前提依赖,比如 Java/Maven/Nacos等,相关代码,在后面。

下面是主要的配置文件,主要写明相关组件的安装路径,以及环境变量等参数。

其中的许多安装包,都是事先下载好的,都是组件官网安装包,读者请自行下载。

配置文件:

#!/bin/bash
export LC_ALL=en_US.UTF-8

# 当前目录
BASE_DIR=$(pwd)
# 环境变量保存目录
PROFILE_ENVS="/etc/profile.envs"

export BASE_DIR
export PROFILE_ENVS
#

(责任编辑:时尚)

    推荐文章
    热点阅读