0
点赞
收藏
分享

微信扫一扫

Pulumi实战部署K8s资源

一 背景

在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资源_架构_02

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资源_自动化运维_03

3.3 查看项目内容

Pulumi实战部署K8s资源_架构_04

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资源_自动化运维_05

Pulumi实战部署K8s资源_基础设施_06

3.5 修改内容

修改deploy的名称

Pulumi实战部署K8s资源_堆栈_07

3.6 应用更新

Pulumi实战部署K8s资源_堆栈_08

查看pod进行了新的更新。

Pulumi实战部署K8s资源_架构_09

3.7 查看平台资源

查看项目

Pulumi实战部署K8s资源_架构_10

Pulumi实战部署K8s资源_基础设施_11

Pulumi实战部署K8s资源_自动化运维_12

3.8 销毁清理

Pulumi实战部署K8s资源_基础设施_13

Pulumi实战部署K8s资源_堆栈_14

Pulumi实战部署K8s资源_自动化运维_15

四 总结

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

举报

相关推荐

0 条评论