Kubernetes的新Pulumi开源项目

2020-08-15 05:45:29

今天,我们很兴奋地宣布几个新的开源项目,它们促进了Pulumi对Kubernetes的支持。这些项目和功能是在帮助领先的云原生工程团队(如Snowflake、Lemonade和Mercedes-Benz)与Kubernetes一起投入生产的同时开发的,包括新的部署自动化选项、改进的生态系统集成以及使新项目和现有项目比以往更容易采用Pulumi的工具。

一个新的集群内Pulumi Kubernetes操作员为管理任何云或Kubernetes集群上的基础设施提供了Kubernetes原生GitOps体验。

用于将YAML清单转换为Pulumi Python、TypeScript、Go或.NET的kube2Pulumi工具将Pulumi针对基础架构即代码的软件工程能力应用于复杂的Kubernetes应用程序。

支持在Pulumi的CrossGuard策略即代码框架中创作基于Open Policy Agent(OPA)的策略,并在整个组织中实施规则。

一个crd2Pulumi工具,可以为任何Kubernetes CRD创建强类型API,使得在Cloud Native社区中利用API扩展的整个生态系统变得很容易。

Spinnaker的Pulumi插件,使团队能够使用相同的云原生连续交付平台进行应用程序和基础设施部署。

支持使用核心Pulumi Kubernetes库将Helm3和kustomize部署为Pulumi程序的一部分。

无论您是在设计云本地交付平台,希望在云基础设施和Kubernetes中实施策略,还是希望为Kubernetes工作负载带来强大的软件工程实践,这些功能都将继续使Pulumi成为Kubernetes的更好方式!

Pulumi是为现代云全新设计的基础设施即代码平台。这意味着对容器、无服务器和Kubernetes的深度支持,使用您最喜欢的编程语言来定义、测试和管理您的云基础设施。Pulumi支持在许多不同的托管平台中轻松配置Kubernetes群集,包括AWS、Azure、GCP、Digital Ocean、Rancher、Linode和Civo。此外,Pulumi可以使用同样强大的工具管理Kubernetes集群内的资源,从而取代了脆弱且不可伸缩的YAML配置。最棒的是,Pulumi在您的云基础设施、托管云服务和Kubernetes中将这些组合到一个单一的内聚编程模型中。

Kubernetes一直是许多支持Pulumi的云现代化项目的中心,包括提供托管的Kubernetes集群,将它们连接到支持的云基础设施,使平台团队能够在Kubernetes之上配置和管理平台,以及允许团队使用基于代码和软件的部署过程替换不可维护的YAML堆积如山。多亏了Pulumi,数百个现代云工程团队已经能够加速向云和Kubernetes的迁移。

现在让我们来看看与库伯内斯合作的每一个新的普鲁米超级大国!

Pulumi集成到十几个CI/CD和交付系统中,自动交付对AWS、Azure、GCP、Kubernetes等的云基础设施更改。这包括像Jenkins这样的传统CI工具,像Azure DevOps这样的托管CI/CD平台,以及像Spinnaker这样的云原生持续交付平台(更多细节见下文)。与此同时,我们听到了来自Pulumi用户的反馈,他们希望在Kubernetes内部使用GitOps方法实现交付流程的自动化-无论是针对Kubernetes工作负载还是针对任何Pulumi支持的云提供商中的云基础设施。

我们很兴奋地宣布新的Pulumi-Kubernetes-Operator开源项目,它为基础设施交付提供了一个新的Kubernetes原生选项。Pulumi Kubernetes操作符允许您使用Kubernetes集群中的新Stack CustomResource指定要部署的云基础设施。运营商持续驱动您的云资源状态,使其与指定的堆栈保持一致。堆栈资源可以指向任何Git存储库中的任何Pulumi程序,并使用该程序定义所需的基础设施状态。这些堆栈提供了Pulumi的全部灵活性,包括使用CrossGuard策略即代码执行策略的能力,以及声明性Kubernetes资源模型的好处。您可以在普通的Kubernetes YAML中创建这些Stack资源,也可以使用Pulumi来管理Kubernetes资源!

创建一个Stack很简单:提供栈名、项目repo和提交(支持即将到来的分支!),操作员就会开始朝着指定的状态前进。堆栈可以直接使用,也可以作为更高级别抽象的一部分来管理您的基础设施和应用程序。Pulumi控制台通过提供对堆栈的更新、受管理的资源和策略实施的可见性,增强了这些功能。

ApiVersion:Pulumi.com/v1alpha1 Kind:栈元数据:名称:s3-bucket-stack spec:stack:acmecorp/s3-op-project/dev projectRepo:https://github.com/joeduffy/test-s3-op-project Commit:cc5442870f1195216d6bc340c14f8ae7d28cf3e2 config:aws:region:us-East。

许多使用Spinnaker的团队都询问如何通过Spinnaker为应用程序部署提供的强大的连续交付平台,使用Pulumi自动交付他们的云基础设施更改。作为6月份宣布的新Spinnaker插件型号的发布合作伙伴,Pulumi和Spinnaker密切合作,在Spinnaker持续部署平台内为Pulumi提供全面支持。

您可以在Spinnaker Live和Pulumi Docs的Spinnaker指南中查看此演示文稿中的Pulumi Spinnaker集成。

Kubernetes YAML为创作应用于Kubernetes集群的配置提供了一种简单的最小公分母方法。但是,随着Kubernetes基础设施和工作负载的复杂性增加,管理起来很麻烦,而且很难扩展。Pulumi提供了一个引人注目的解决方案来管理这种复杂性-应用您最喜欢的编程语言的软件工程优势-包括Python、TypeScript、.NET和Go!使用这些语言来管理Kubernetes基础设施提供了有用的抽象(可重用的函数和类)、简单的配置(参数和接口)、强类型和工具(IDE,键入时的错误检查)和测试(带来您最喜欢的单元测试框架)。

有了今天发布的kube2puumi,通过将现有的Kubernetes YAML(或JSON)迁移到Python、TypeScript、.NET或Go的Pulumi代码中,可以比以往任何时候都更容易获得所有这些好处。完整的Kubernetes API外围应用可以从Pulumi获得,因此kube2puumi生成的代码支持您今天可能使用的Kubernetes的每一个特性。一次转换一个资源或整个清单目录!转换后,使用简单的puumi up将其部署到您的集群。

从";@puumi/puumi";;import*as Kubernetes从";@Pulumi/Kubernetes";;const fooNamespace=new Kubernetes导入*as puumi。核心。V1版本。命名空间(";fooNamespace";,{元数据:{name:";foo";,},});

使用Pulumi;使用Kubernetes=Pulumi。Kubernetes;类MyStack:stack{public MyStack(){var fooNamespace=new Kubernetes。核心。V1版本。命名空间(";fooNamespace";,new Kubernetes。类型。输入。核心。V1版本。NamespaceArgs{METADATA=new Kubernetes。类型。输入。Meta。V1版本。ObjectMetaArgs{name=";foo";,},});}}。

程序包主要导入(corev1";github.com/pulumi/pulumi-kubernetes/sdk/v2/go/kubernetes/core/v1";metav1";github.com/pulumi/pulumi-kubernetes/sdk/v2/go/kubernetes/meta/v1";";github.com/pulumi/pulumi/sdk/v2/go/pulumi";)Func Main(){puumi.。Run(func(ctx*puumi.。上下文)错误{_,错误:=corev1。NewNamespace(ctx,#34;fooNamespace&34;,&;corev1.。NamespaceArgs{METADATA:&;metav1.。ObjectMetaArgs{名称:puumi。String(";foo";),},})if err!=nil{return err}return nil})}。

最棒的是,你可以在puumi.com/kube2puumi上亲身体验一下,看看把你的Kubernetes YAML带到普鲁米是多么容易!

随着Kubernetes生态系统的发展,整个Cloud Native环境中的项目通过CustomResources在核心Kubernetes资源模型之上构建强大的新扩展。这些自定义资源扩展了Kubernetes API,为从服务网格到存储扩展到可观察性基础设施等等的一切提供一流的支持(包括Pulumi Kubernetes操作符!)。虽然Pulumi为100%的核心Kubernetes API提供了强类型API,但到目前为止,它只通过Kubernetes中的弱类型通用CustomResource API公开了这些扩展。

今天发布的crd2Pulumi工具为TypeScript和Go(Python和.NET即将推出)中的强类型API带来了同样丰富的支持。所有这些分机。用户可以直接从Custom Resource Definition的OpenAPI规范生成强类型编程语言API,并在该规范更新时重新生成它。任何使用CRD的代码都受益于IDE工具、强类型和轻松创建新的自定义抽象。随着自定义资源管理的基础设施的复杂性增加,这些优势变得更加明显。许多CRD鼓励包含细粒度和频繁更新的资源定义的设计模式,而Pulumi的现代基础设施即代码方法极大地简化了对不断增长的新API生态系统的管理。

例如,常用的证书管理器CRD扩展了Kubernetes,使其能够轻松地配置证书颁发机构和请求证书。在使用crd2Pulumi生成API包装器之后,用户可以通过代码与Cert Manager API交互:

从";./Certificate";导入*作为证书。//注册证书CRD。新证书。CertificateDefinition(";Certificate";);//实例化证书资源。新证书。V1beta1。证书(";Example-cert";,{元数据:{Name:";Example-COM";,},规范:{SecretName:";Example-COM-TLS";,期限:";2160h";,续订之前:";360h";,commonName:";example.com";,dnsNames:[";example.com&#。,";www.example.com";,],IssuerRef:{Name:";ca-Issuer";,Kind:";Issuer";,});

软件包Main IMPORT(certw1b1";goexample/Certificate/v1beta1";metav1";github.com/pulumi/pulumi-kubernetes/sdk/v2/go/kubernetes/meta/v1";";github.com/pulumi/pulumi-kubernetes/sdk/v2/go/kubernetes/yaml";";github.com/pulumi/pulumi/sdk/v2/go/pulumi";)Func Main(){Pulumi.。Run(func(ctx*puumi.。上下文)错误{//注册证书CRD。_,错误:=YAML。NewConfigFile(CTX,&34;MY-CERTIFICATE-DEFINITION&34;,&;YAML。ConfigFileArgs{File:";certificate.yaml";,},)if err!=nil{return err}//实例化证书资源。_,err=certw1b1。新证书(ctx,#34;示例-cert&34;,&;certw1b1.。CertificateArgs{METADATA:&;metav1.。ObjectMetaArgs{名称:puumi。字符串(";Example-COM";),},规范:certw1b1。CertificateSpecArgs{SecretName:puumi.。String(";example-com-tls";),持续时间:puumi。String(";2160h";),更新之前:puumi。String(";360h";),CommonName:puumi。String(";example.com";),域名:puumi。StringArray{puumi.。字符串(";example.com";),puumi。String(";www.example.com";),},IssuerRef:certw1b1。CertificateSpecIssuerRefArgs{名称:puumi。字符串(";ca-Issuer";),种类:puumi。String(";颁发者";),})if err!=nil{return err}return nil})}。

Pulumi的CrossGuard Policy-as-code框架使用丰富的编程语言的全部表现力,在您所有的现代云基础设施和/或Kubernetes中执行策略。它被深度集成到部署流程中,以确保在部署基础设施之前发现违反策略的行为,而不是在进行更改后几分钟或几小时。

今天发布的Pulumi policy-as-code中的Open Policy Agent(OPA)支持扩展了对TypeScript和Python的现有支持,以包括OPA的.rego语言和用于声明性策略规范的运行时。作为云原生策略的新兴标准,OPA已经在各种云原生技术中使用,现在还可以用来编写策略,以便在Pulumi的策略模型中跨任何云或Kubernetes运行。

基于OPA的规则可以使用Pulumi的丰富资源模型编写(顶部窗格),并作为部署到任何基础设施的一部分实施(底部窗格)。

作为Pulumi支持组织实施策略的一部分,基于OPA的策略可以在组织中的所有基础设施部署(包括跨不同的云和Kubernetes群集)中实施。

Pulumi的Kubernetes支持长期以来一直包括支持直接在Pulumi程序中定义Kubernetes资源,以及使用Pulumi从现有的YAML或Helm部署Kubernetes资源。随着生态系统中现有的YAML和Helm内容的丰富,云工程团队已经大量使用这些功能来将关键的Kubernetes平台服务和应用逻辑部署到他们的Kubernetes集群中。

在过去的几个月里,我们通过两种关键方式扩展了这种支持。我们添加了对Helm3的支持,使Pulumi程序能够访问新一代的Helm图表。我们添加了对kustomize的支持,因此kubectl支持的相同kustomize也可以与Pulumi一起本机部署。这两项增强功能共同确保了Pulumi用户可以完全访问Kubernetes提供的令人难以置信的内容生态系统。

我们对今天的新功能和深化Pulumi对Kubernetes和Cloud Native生态系统的支持的机会感到难以置信的兴奋。Pulumi Kubernetes运营商开启了令人兴奋的云本地基础设施交付新方法。Kube2Pulumi工具使得从繁琐的YAML迁移到富有表现力的代码比以往任何时候都更容易。强类型CRD为Kubernetes平台扩展的整个Cloud Native生态系统带来了Pulumi的丰富性。而Pulumi策略即代码中的OPA支持将使用OPA进行的云本地策略创作带入了Pulumi现代基础设施即代码世界。

为您的下一个现代云项目开始使用Pulumi和Kubernetes,这是一个前所未有的激动人心的时刻。请查看新功能或Pulumi Kubernetes今天开始使用。

您可以在相应的项目文档中了解有关每项新功能的更多信息: