Pulumi才是未来底子设施的赢家

打印 上一主题 下一主题

主题 544|帖子 544|积分 1632



  

一、前言



  • 可实现多云管理的底子设施即代码的工具包括,大家熟知的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;





  • 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个之多;



  • 以AWS Classic为例支持的Resource

4.2、利用发起



  • pulumi 官方提供了两种 stack 用法: 「单体」和「微-stack」 ( 构造项目和堆栈 )

    • 1、单体: one stack rule them all,通过 stack 参数来控制步骤。stack 用来区分环境 dev/pro 等 (推荐)。
    • 2、微-stack: 每一个 stack 是一个步骤,所有 stack 构成一个完备的项目。


4.3、利用示例(TypeScript)

4.3.1、安装 Pulumi



  • 通过运行安装脚本在 Linux 上安装 Pulumi:
  1. 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 项目,其中包含一些基于指定云和语言的基本脚手架。
  1. # 以自托管方式为例 :
  2. # 创建本地目录
  3. mkdir pulumi-typescript && cd pulumi-typescript
  4. # 登录到本地目录
  5. pulumi login file:///Users/daizhe/Desktop/myself/pulumi-typescript
  6. # 检查登录的用户
  7. pulumi whoami -v
  8. User: daizhe
  9. Backend URL: file:///Users/daizhe/Desktop/myself/pulumi-typescript
  10. warning: A new version of Pulumi is available. To upgrade from version '3.10.3' to '3.54.0', run
  11.    $ brew upgrade pulumi
  12. or visit https://pulumi.com/docs/reference/install/ for manual instructions and release notes.
  13. # Pulumi New Kubernetes Provider交互填写名称和项目描述
  14. pulumi new kubernetes-typescript
  15. This command will walk you through creating a new Pulumi project.
  16. Enter a value or leave blank to accept the (default), and press <ENTER>.
  17. Press ^C at any time to quit.
  18. project name: (pulumi-typescript)
  19. project description: (A minimal Kubernetes TypeScript Pulumi program)
  20. Created project 'pulumi-typescript'
  21. stack name: (dev)
  22. Created stack 'dev'
  23. Installing dependencies...
  24. added 165 packages in 16s
  25. npm notice
  26. npm notice New major version of npm available! 8.13.0 -> 9.4.2
  27. npm notice Changelog: https://github.com/npm/cli/releases/tag/v9.4.2
  28. npm notice Run npm install -g npm@9.4.2 to update!
  29. npm notice
  30. Finished installing dependencies
  31. Your new project is ready to go! ✨
  32. To perform an initial deployment, run 'pulumi up'
  33. warning: A new version of Pulumi is available. To upgrade from version '3.10.3' to '3.54.0', run
  34.    $ brew upgrade pulumi
  35. 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部署并导出部署的名称;
  1. import * as k8s from "@pulumi/kubernetes";
  2. import * as kx from "@pulumi/kubernetesx";
  3. const appLabels = { app: "nginx" };
  4. const deployment = new k8s.apps.v1.Deployment("nginx", {
  5.     spec: {
  6.         selector: { matchLabels: appLabels },
  7.         replicas: 1,
  8.         template: {
  9.             metadata: { labels: appLabels },
  10.             spec: { containers: [{ name: "nginx", image: "nginx" }] }
  11.         }
  12.     }
  13. });
  14. export const name = deployment.metadata.name;
复制代码
4.3.5、部署Stack

  1. # Set K8s Config
  2. pulumi config set kubernetes:context arn:aws-cn:eks:cn-northwest-1:xxx:cluster/eks-cluster-pulumi
  3. # 部署 stack, Pulumi 确定创建堆栈所需的资源。首先,显示将要进行的更改的预览
  4. pulumi up
  5. Previewing update (dev):
  6.      Type                           Name            Plan
  7. +   pulumi:pulumi:Stack            quickstart-dev  create
  8. +   └─ kubernetes:apps:Deployment  nginx           create
  9. Resources:
  10.     + 2 to create
  11. Do you want to perform this update? yes
  12. Updating (dev):
  13.      Type                           Name            Status
  14. +   pulumi:pulumi:Stack            quickstart-dev  created
  15. +   └─ kubernetes:apps:Deployment  nginx           created
  16. Outputs:
  17.     name: "nginx-xw231xdt"
  18. Resources:
  19.     + 2 created
  20. Duration: 11s
复制代码


  • 如若利用状态资源托管方式还可以看到如下及时资源变更

4.3.6、销毁Stack



  • 若要销毁资源,请运行以下下令:
  1. pulumi destroy
  2. # 系统将提示你确保确实要删除这些资源。
  3. Previewing destroy (dev):
  4.      Type                           Name            Plan
  5. -   pulumi:pulumi:Stack            quickstart-dev  delete
  6. -   ├─ kubernetes:core:Service     nginx           delete
  7. -   └─ kubernetes:apps:Deployment  nginx           delete
  8. Outputs:
  9.   - ip: "10.105.234.140"
  10. Resources:
  11.     - 3 to delete
  12. Do you want to perform this destroy? yes
  13. Destroying (dev):
  14.      Type                           Name            Status
  15. -   pulumi:pulumi:Stack            quickstart-dev  deleted
  16. -   ├─ kubernetes:core:Service     nginx           deleted
  17. -   └─ kubernetes:apps:Deployment  nginx           deleted
  18. Outputs:
  19.   - ip: "10.105.234.140"
  20. Resources:
  21.     - 3 deleted
  22. Duration: 1s
复制代码


  • 要删除堆栈本身,请运行 pulumi 堆栈 rm 。注意,这将删除堆栈 完全来自Pulumi服务,以及它的所有更新汗青。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

兜兜零元

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表