许吉友 - 运维

Pulumi 入门

Pulumi 是一个库,用于替代 Yaml 方式管理软件,比如 Kubernetes 需要很多 Yaml 文件,管理维护这些 Yaml 很难,并且 Yaml 没有很强的语义,为解决这一痛点,可以考虑一下 Pulumi。

这里我们只关注 Kubernetes 。

官方文档:https://www.pulumi.com/docs/get-started/kubernetes/

首先安装(macOS)

$ brew install pulumi

目前,Pulumi 只支持 4 种语言 - TypeScript、JavaScript、Python、C#

这里我推荐使用 TypeScript,因为 TS 原生支持 Json ,写起来方便,并且是强类型,语法提示不会出错,方便编写重构。

在使用 Pulumi 前,还要在本地配置好 kubectl 和 kubernetes 的配置文件(默认是 ~/.kube/config)。

创建项目:

$ mkdir quickstart && cd quickstart
$ pulumi new kubernetes-typescript

创建完成后,可以使用 WebStorm 打开 quickstart 文件夹来查看代码。主要看 index.ts:

import * as k8s from "@pulumi/kubernetes";

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;

看看创建 Deployment 部分,其实和写 Yaml 文件差不多的,但是 TS 有很强大的语义,可以随便关联。

看完代码后,在本地使用以下命令部署 Deployment:

$ pulumi up

待命令执行完毕后,可以看到 Deployment 已经部署好了:

$ kubectl get Deployment 
NAME             READY   UP-TO-DATE   AVAILABLE   AGE
nginx-axwjuyog   1/1     1            1           22h