Pulumi才是未来基础设施的赢家

⭐️关注我 ,一起探索更多知识!⭐️

文章目录

    • 一、前言
    • 二、什么是Pulumi
    • 三、Pulumi Vs Terraform
      • 3.1、两者渊源
      • 3.2、两者区别
    • 四、快速入门Pulumi
      • 4.1、Pulumi支持的Provider
      • 4.2、使用建议
      • 4.3、使用示例(TypeScript)
        • 4.3.1、安装 Pulumi
        • 4.3.2、项目管理方式
        • 4.3.3、创建新项目(Kubernetes Provider)
        • 4.3.4、查看新项目
        • 4.3.5、部署Stack
        • 4.3.6、销毁Stack

image.png

一、前言

  • 可实现多云管理的基础设施即代码的工具包括,大家熟知的Terraform和后起之秀Pulumi等,Terraform虽说更为流行,更加广泛但使用其管理基础设施时有一很大痛点 ”配置语法简单导致的配置繁琐“,需额外的学习HasiCorp和DSL-HC模版语言,作为后起之秀Pulumi解决了这个问题;Pulumi 可以用熟悉的编程语言来编写声明式配置,而不需要额外学习厂商特定的模板语言来写配置;

二、什么是Pulumi

  • Pulumi是一个基础架构即代码的自动化工具,它是构建在Terraform工具基础上的,解决使用Terraform时额外模版语言配置,可以使用Python/TypeScript/Go/C#等众多常见的开发语言编写好声明式的资源配置,就能实现一键创建/修改/销毁各类云资源;
  • Pulumi是个可扩展的工具,通过 Provider 来支持新的基础架构,Pulumi提供了客户端,能够让您轻松定义、预览和部署云基础结构。您可以使用Pulumi来创建、修改、删除ECS、VPC、RDS、SLB等多种资源;
  • Pulumi基于Terraform构建,因此具备和Terraform一样多的云资源支持;

三、Pulumi Vs Terraform

3.1、两者渊源

  • Pulumi和Terraform 有很多相似之处,都满足通过编写代码的形式实现在多种云平台上管理基础设施,包括 Google Cloud、AWS、Microsoft Azure、阿里云、TencentCloud、UCloud等;
  • 同时二者在Github上都提供了开源的社区版本,Pulumi 的诞生也是站在Terraform巨人的肩膀上的,直接使用了大部分 Terraform 的 Provider,将其封装变成了 Pulumi 的 Provider;

3.2、两者区别

  • 根据 Pulumi 官方介绍,Pulumi和Terraform两者在语言支持、状态管理 Provider支持、开源协议存在着主要区别;
    • 语言支持
      • Pulumi 语言支持 :Python、TypeScript、JavaScript、Go、C#、F#、VB…
      • Terraform正式支持的语言包括HCL,Json声明式语言
    • 可视化管理
      • Terraform在状态可视化管理体验很差,没有提供响应的功能,使用者只能另谋解决方案,而对于Pulumi 因为其使用各开发语言实现,使用Pulumi Cli检查状态文件能够方便地在代码里面对各种数据操作 ,另外提供了可视化Pulimi Service SAAS;

image.png

  • Provider 支持
    • Pulumi通过转换工具支持Terraform 所有的Provider。同时Pulumi 深度支持K8s等云原生技术,支持了Terraform无法表达的高级部署场景。 这包括Prometheus-based canaries、 automatic Envoy sidecar injection等。Pulumi深耕于云原生,励志成为下一代DevOps工具的领头羊。
    • 开源协议
      • Terraform 使用较弱的 Copyleft Mozilla Public License 2.0。 相反,Pulumi 开源项目使用宽松且商业友好的 Apache License 2.0。其开源内容包括核心 Pulumi 存储库、所有开源 Pulumi 资源提供程序(例如 Azure Native 提供程序)、转换实用程序(如 tf2pulumi)以及其他有用的项目。

四、快速入门Pulumi

  • 更多资源参考 Pulumi : https://www.pulumi.com/

4.1、Pulumi支持的Provider

  • 目前支持的Packages已达到128个之多;

image.png

  • 以AWS Classic为例支持的Resource

image.png

4.2、使用建议

  • pulumi 官方提供了两种 stack 用法: 「单体」和「微-stack」 ( 组织项目和堆栈 )
    • 1、单体: one stack rule them all,通过 stack 参数来控制步骤。stack 用来区分环境 dev/pro 等 (推荐)。
    • 2、微-stack: 每一个 stack 是一个步骤,所有 stack 组成一个完整的项目。

image.png

4.3、使用示例(TypeScript)

4.3.1、安装 Pulumi
  • 通过运行安装脚本在 Linux 上安装 Pulumi:
curl -fsSL https://get.pulumi.com | sh
4.3.2、项目管理方式
  • 项目管理方式分为两类 :状态和后端
    • 服务:使用在线应用程序的托管云体验
      • Pulumi 默认使用托管在 app.pulumi.com 的服务后端,因为它为大多数用户提供了可用性、安全性和安全性的最佳组合。重要功能包括:
        • 强大的状态管理,具有事务检查点,可实现容错和恢复
        • 并发状态锁定,以防止损坏团队环境中的基础结构状态
        • 用于审核和回滚目的的完整部署历史记录
        • 传输中和静态的加密状态
        • 机密的托管加密和密钥管理
        • 通过对云提供商的客户端身份验证,安全访问云资源元数据
        • 团队策略,包括策略即代码和基于角色的访问控制 (RBAC)
    • 自我管理:手动管理的对象存储,包括 AWS S3、Azure Blob 存储、Google Cloud Storage、任何与 AWS S3 兼容的服务器(如 Minio 或 Ceph)或您的本地文件系统
      • Pulumi 还允许使用自我管理的后端自行管理状态。状态以简单的 JSON 文件的形式存储在 AWS S3、Azure Blob Store、Google Cloud Storage、备用 AWS S3 API 兼容服务器(如 Minio 或 Ceph)或本地文件系统中。这些自我管理的后端都是开源的,可以在任何环境中免费使用。使用自我管理的后端会牺牲一定程度的可靠性,以进一步控制元数据的存储位置。例如,您需要手动配置安全访问、加密和历史记录,并设计自己的并发控制和恢复功能;
4.3.3、创建新项目(Kubernetes Provider)
  • 创建您的第一个 Pulumi 程序, pulumi new 命令创建一个新的 Pulumi 项目,其中包含一些基于指定云和语言的基本脚手架。
# 以自托管方式为例 :# 创建本地目录
mkdir pulumi-typescript && cd pulumi-typescript # 登录到本地目录
pulumi login file:///Users/daizhe/Desktop/myself/pulumi-typescript# 检查登录的用户
pulumi whoami -v
User: daizhe
Backend URL: file:///Users/daizhe/Desktop/myself/pulumi-typescript
warning: A new version of Pulumi is available. To upgrade from version '3.10.3' to '3.54.0', run$ brew upgrade pulumi
or visit https://pulumi.com/docs/reference/install/ for manual instructions and release notes.# Pulumi New Kubernetes Provider交互填写名称和项目描述
pulumi new kubernetes-typescript
This command will walk you through creating a new Pulumi project.
Enter a value or leave blank to accept the (default), and press <ENTER>.
Press ^C at any time to quit.
project name: (pulumi-typescript)
project description: (A minimal Kubernetes TypeScript Pulumi program)
Created project 'pulumi-typescript'
stack name: (dev)
Created stack 'dev'
Installing dependencies...
added 165 packages in 16s
npm notice
npm notice New major version of npm available! 8.13.0 -> 9.4.2
npm notice Changelog: https://github.com/npm/cli/releases/tag/v9.4.2
npm notice Run npm install -g npm@9.4.2 to update!
npm notice
Finished installing dependencies
Your new project is ready to go! ✨
To perform an initial deployment, run 'pulumi up'
warning: A new version of Pulumi is available. To upgrade from version '3.10.3' to '3.54.0', run$ brew upgrade pulumi
or visit https://pulumi.com/docs/reference/install/ for manual instructions and release notes.
4.3.4、查看新项目
  • Pulumi New Stack 生成的一些项目文件:
    • Pulumi.yaml 定义项目。
    • Pulumi.dev.yaml 包含我们初始化的堆栈的配置值。
    • index.ts 是定义堆栈资源的 Pulumi 程序。
  • Pulumi 程序创建一个 Nginx Pod部署并导出部署的名称;
import * as k8s from "@pulumi/kubernetes";
import * as kx from "@pulumi/kubernetesx";const appLabels = { app: "nginx" };
const deployment = new k8s.apps.v1.Deployment("nginx", {spec: {selector: { matchLabels: appLabels },replicas: 1,template: {metadata: { labels: appLabels },spec: { containers: [{ name: "nginx", image: "nginx" }] }}}
});
export const name = deployment.metadata.name;
4.3.5、部署Stack
# Set K8s Config
pulumi config set kubernetes:context arn:aws-cn:eks:cn-northwest-1:xxx:cluster/eks-cluster-pulumi# 部署 stack, Pulumi 确定创建堆栈所需的资源。首先,显示将要进行的更改的预览
pulumi up
Previewing update (dev):Type                           Name            Plan+   pulumi:pulumi:Stack            quickstart-dev  create+   └─ kubernetes:apps:Deployment  nginx           createResources:+ 2 to createDo you want to perform this update? yes
Updating (dev):Type                           Name            Status+   pulumi:pulumi:Stack            quickstart-dev  created+   └─ kubernetes:apps:Deployment  nginx           createdOutputs:name: "nginx-xw231xdt"Resources:+ 2 createdDuration: 11s
  • 如若使用状态资源托管方式还可以看到如下实时资源变动

image.png

4.3.6、销毁Stack
  • 若要销毁资源,请运行以下命令:
pulumi destroy# 系统将提示你确保确实要删除这些资源。
Previewing destroy (dev):Type                           Name            Plan-   pulumi:pulumi:Stack            quickstart-dev  delete-   ├─ kubernetes:core:Service     nginx           delete-   └─ kubernetes:apps:Deployment  nginx           deleteOutputs:- ip: "10.105.234.140"Resources:- 3 to deleteDo you want to perform this destroy? yes
Destroying (dev):Type                           Name            Status-   pulumi:pulumi:Stack            quickstart-dev  deleted-   ├─ kubernetes:core:Service     nginx           deleted-   └─ kubernetes:apps:Deployment  nginx           deletedOutputs:- ip: "10.105.234.140"Resources:- 3 deletedDuration: 1s
  • 要删除堆栈本身,请运行 pulumi 堆栈 rm 。注意,这将删除堆栈 完全来自Pulumi服务,以及它的所有更新历史。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/193758.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

开发知识点-uniapp微信小程序-开发指南

uniapp uni.chooseLocationgetCurrentPages美团外卖微信小程序开发uniapp-美团外卖微信小程序开发P1 成果展示P2外卖小程序后端&#xff0c;学习给小程序写http接口P3 主界面配置P4 首页组件拆分P13 外卖列表布局筛选组件商家 布局测试数据创建样式 请求商家外卖数据封装请求并…

如何在el-tree懒加载并且包含下级的情况下进行数据回显-02

上一篇文章如何在el-tree懒加载并且包含下级的情况下进行数据回显-01对于el-tree懒加载&#xff0c;包含下级的情况下&#xff0c;对于回显提出两种方案&#xff0c;第一种方案有一些难题无法解决&#xff0c;我们重点来说说第二种方案。 第二种方案是使用这个变量对其是否全选…

JAVA for 循环训练 Pattern

import java.util.Scanner;public class Pattern {public static void main(String[] args) {int[] arr {0, 1, 1, 0, 1, 0, 0, 1, 1, 0, 0, 1, 0, 1, 1, 0};Scanner in new Scanner(System.in);System.out.print("请输入n:");int n in.nextInt();in.close();for …

从多表连接视图对比人大金仓和Oracle

KING BASE 信息时代&#xff0c;数据是驱动业务决策和创新的核心资源。然而&#xff0c;随着数据量的不断增加&#xff0c;有效地处理和整合数据的过程变得愈发复杂。这时&#xff0c;多表连接视图悄然走进数据库世界&#xff0c;不仅能够将多个表中的数据整合在一起&#xff0…

memset和bzero性能分析

首先&#xff0c;我们需要了解bzero和memset的功能。bzero是一个非标准函数&#xff0c;用于将一块内存区域的内容设置为0。它的原型如下&#xff1a;void *bzero(void *s, size_t n);其中&#xff0c;s是要设置的内存区域的起始地址&#xff0c;n是要设置的字节数。memset是一…

C++虚函数(定义,作用,原理,案例)

一.定义&#xff1a; C的虚函数是在父类(基类)中声明的的函数&#xff0c;它可在子类(派生类)中重写。二.作用 虚函数的目的是实现多态性&#xff0c;即在程序运行时根据对象的实际类型确定调用哪个函数。三.使用方法&#xff1a; 在基类中声明虚函数时&#xff0c;需要在函…

分组表,分桶表

1&#xff0c;启动Hive服务 &#xff08;1&#xff09;启动HiveServer2服务 nohup hive --service metastore &&#xff08;2&#xff09;启动Metastore服务 nohup hive --service hiveserver2 &&#xff08;3&#xff09;查看进程信息 lsof -i:100002&#xff0c;…

037、目标检测-SSD实现

之——简单实现 目录 之——简单实现 杂谈 正文 1.类别预测层 2.边界框预测 3.多尺度输出联结做预测&#xff08;提高预测效率&#xff09; 4.多尺度实现 5.基本网络块 6.完整模型 杂谈 原理查看&#xff1a;037、目标检测-算法速览-CSDN博客 正文 1.类别预测层 类别…

JavaScript实现飞机发射子弹详解(内含源码)

JavaScript实现飞机发射子弹 前言实现过程源码展示源码讲解HTML结构CSS结构js结构 前言 文本主要讲解如何利用JavaScript实现飞机发射子弹&#xff0c;实现过程以及源码讲解。实现效果图如下&#xff1a; 实现过程 首先&#xff0c;找到飞机和子弹的UI图&#xff0c;gif图最…

五个必知的速率限制策略,以最大化流量流动

速率限制是一种策略&#xff0c;我们在工作中常常使用&#xff0c;它定义了系统在设定的时间框架内可以处理的最大请求数量。 速率限制定义了系统在指定时间段内可以处理的最大请求数量。 Image.png 速率限制是一种策略&#xff0c;我们在工作中常常使用&#xff0c;它定义了…

html综合笔记:设计实验室主页

&#xff11; 主页来源及效果 Overview - Lab Website Template docs (gitbook.io) greenelab/lab-website-template: An easy-to-use, flexible website template for labs (github.com) 2 创建网页 3 主要的一些file 3.1 index.md 主页面 3.1.1 intro 3.1.2 highlight …

斯坦福机器学习 Lecture2 (假设函数、参数、样本等等术语)

假设函数定义 假设函数&#xff0c;猜一个 x->y 的类型&#xff0c;比如 y ax b&#xff0c;随后监督学习的任务就是找到误差最低的 a 和 b 参数 有时候我们可以定义 x0 1&#xff0c;来让假设函数的整个表达式一致统一 如上图是机器学习中的一些术语 额外的符号&#xf…