一 布景

在IaC的完成中,老牌选手Terraform已经成为业界规范,但关于运用人员还是需求独自去学习HCL语法,关于简略的运算Terraform内置的一些函数能够满足日常编排需求,但关于复杂的核算或逻辑处理往往需求复杂的语法去完成,HCL言语是一个表现力较低的言语,在此布景下,IaC新秀Pulumi异军突起,其运用开发人员了解的开发言语完成,针对开发人员上手更为轻松,因此也是真正意义上的突破运维开发限制,一同关于运用Terraform需求非常复杂逻辑完成的场景,Pulumi或许凭借开发言语的优势,能够在一行代码能轻松搞定,因此有必要深入了解下Pulumi这个IaC东西,后期可在特定场景下选取适宜的方案。

二 pulumi架构与概念

2.1 概念

Pulumi的根底设施作为代码SDK是在任何云上创立和布置运用容器、无服务器功能、保管服务和根底设施的云软件的最简略办法。Pulumi是一个作为代码渠道的现代化根底设施。它运用现有的编程言语–Typescript、JavaScript、Python、Go、.NET、Java和符号言语(如YAML)及其本地生态系统,通过Pulumi SDK与云资源交互。一个可下载的CLI、运转时、库和保管服务一同作业,以供给一种健壮的方法来供给、更新和办理云根底设施。

Pulumi是Apache 2.0许可下的开源软件,支持多种言语和云,易于扩展。该repo包括pulumi CLI、言语SDK和核心pulumi引擎,各个库坐落各自的repo中。

2.2 架构

Pulumi实战部署K8s资源

用通用编程言语编写的Pulumi程序描绘了应该如何组成云根底设施。要在程序中声明新的根底结构,需求分配资源对象,其属性对应于根底结构的所需状况。这些属性还能够在资源之间运用,以处理任何必要的依靠联系,假如需求,还能够导出到仓库之外。 程序驻留在项目中,项目是一个目录,包括程序的源代码和如何运转程序的元数据。编写程序后,从项目目录中向上运转Pulumi CLI指令Pulumi。此指令创立程序的一个独立的、可装备的实例,称为仓库。仓库类似于测验和推出运用程序更新时运用的不同布置环境。例如,您能够有不同的开发、阶段和出产仓库来创立和测验。

2.3 Pulumi作业原理

Pulumi实战部署K8s资源

Pulumi运用希望的状况模型来办理根底设施。Pulumi程序由言语主机执行,以核算仓库根底结构的希望状况。布置引擎将此希望状况与仓库的当时状况进行比较,并确认需求创立、更新或删除哪些资源。引擎运用一组资源供给程序(如AWS、Azure、Kubernetes等)来办理各个资源。当引擎运转时,它会运用关于一切已供给的资源以及任何挂起的操作的信息更新根底结构的状况。

2.3.1 言语Hosts

言语主机负责运转一个Pulumi程序,并设置一个能够向布置引擎注册资源的环境。言语宿主由两个不同部分组成:

  • A language executor,它是一个名为pulumi-language-的二进制文件,Pulumi运用它为编写程序的言语(例如Node或Python)启动运转时。这个二进制与Pulumi CLI一同分布。
  • A language runtime,它负责准备要执行的程序,并观察其执行情况以检测资源注册。当资源被注册(通过JavaScript中的new resource()或Python中的resource(…))时,言语运转时将注册恳求传回布置引擎。言语运转库作为惯例包分发,就像或许依靠于程序的任何其他代码一样。例如,Node运转时包括在npm上可用的@pulumi/pulumi包中,Python运转时包括在PyPI上可用的pulumi包中。

2.3.2 布置引擎

布置引擎其实便是Pulumi 自身,

布置引擎负责核算将根底结构的当时状况驱动到程序所表示的希望状况所需的一组操作。当从言语宿主接收到资源注册时,引擎将查询现有状况以确认该资源是否以前创立过。假如没有,引擎将运用资源供给程序来创立它。假如它已经存在,引擎与资源供给程序一同作业,通过将资源的旧状况与程序所表示的资源的新希望状况进行比较,来确认什么(假如有的话)发生了改变。假如有更改,引擎将确认是否能够就地更新资源,或许是否有必要通过创立新版本并删除旧版原本替换资源。决定取决于资源的哪些属性正在更改以及资源自身的类型。当言语主机向引擎传达它已经完成Pulumi程序的执行时,引擎查找它没有看到新的资源注册的任何现有资源,并调度这些资源以删除。 布置引擎嵌入在pulumi CLI自身中。

2.3.3 资源Providers

资源供给程序由两个不同部分组成:

  • 一个资源插件,它是布置引擎用来办理资源的二进制文件。这些插件存储在插件缓存(坐落~/.pulumi/plugins中)中,能够运用pulumi插件指令集进行办理。
  • 一个SDK,它为供给者能够办理的每种类型的资源供给绑定。 与言语运转库自身一样,SDK也能够作为惯例包运用。例如,npm上有一个用于Node的@pulumi/aws包,PYPI上有一个用于Python的pulumi_aws包。当这些软件包添加到您的项目中时,它们会在暗地运转pulumi plugin install,以便从pulumi.com下载资源插件。

三 实战布置K8s

3.1 预置条件

3.1.1 Pulumi装置

# mac 装置
brew install pulumi/tap/pulumi

# linux 装置
curl -fsSL https://get.pulumi.com | sh

3.1.2 开发言语装置

在此运用golang,需求本地装置go。

3.1.3 K8s 环境

需求具有K8s环境,测验环境需求有kubeconfig。

3.2 创立项目

$ mkdir quickstart && cd quickstart && pulumi new kubernetes-go
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: (quickstart)
project description: (A minimal Kubernetes Pulumi program)
Created project 'quickstart'
stack name: (dev)
Created stack 'dev'

Pulumi实战部署K8s资源

3.3 检查项目内容

Pulumi实战部署K8s资源

3.4 布置

# 装置resouce
$ pulumi plugin install resource kubernetes v3.19.4
# 检查插件
$ pulumi plugin ls
NAME        KIND      VERSION  SIZE   INSTALLED       LAST USED
kubernetes  resource  3.19.4   78 MB  35 seconds ago  35 seconds ago

Pulumi实战部署K8s资源

Pulumi实战部署K8s资源

3.5 修正内容

修正deploy的称号

Pulumi实战部署K8s资源

3.6 运用更新

Pulumi实战部署K8s资源

检查pod进行了新的更新。

Pulumi实战部署K8s资源

3.7 检查渠道资源

检查项目

Pulumi实战部署K8s资源

Pulumi实战部署K8s资源

Pulumi实战部署K8s资源

3.8 毁掉清理

Pulumi实战部署K8s资源

Pulumi实战部署K8s资源

Pulumi实战部署K8s资源

四 总结

在IaC中,类似Dockerfile/Helm chart,及根底IaaS资源,IaC新秀Pulumi异军突起,其运用开发人员了解的开发言语完成,针对开发人员上手更为轻松,Pulumi或许凭借开发言语的优势,能够在一行代码能轻松搞定,因此有必要深入了解下Pulumi这个IaC东西,后期可在特定场景下选取适宜的方案。运用Pulumi能够一站式快速拉起云原生环境,使得开发环境布置本钱愈加低价。

参考链接

  • www.pulumi.com/docs/get-st…

  • github.com/pulumi/exam…

  • www.pulumi.com/registry/

本文正在参与「金石计划 . 分割6万现金大奖」