什么是jsonnet

jsonnet是用于app或开发工具的数据模板语言,主要用于json的扩展,具有下面功能:

  • 生成配置数据
  • 无副作用
  • 组织化,简化,统一化
  • 管理无序的配置

jsonnet可以通过面向对象消除重复。或者,使用函数。与现有/自定义应用程序集成。生成 JSON、YAML、INI 和其他格式。

安装jsonnet

Jsonnet 有两种实现(C++ 和 Go)

在 Debian/Ubuntu 之上,可以直接使用 apt 源来安装

bash
1
apt install jsonnet -y

安装 go 实现的,可以用下面命令,前提是安装了go

bash
1
go get github.com/google/go-jsonnet/cmd/jsonnet

什么是jsonnet-bundler

jsonnet-bundler 是 Jsonnet 的包管理器,用于个简化 jsonnet 项目中依赖关系管理的工具。使用 Jsonnet Bundler 可以带来下面便利之处:

  • 使用 jsonnetfile.json 作为依赖关系管理
  • 自动安装和更新依赖项。
  • 版本选择,使用 jsonnetfile.json 可以确保项目使用正确版本的依赖。
  • 可重复构建, 使用 jsonnetfile.json 管理的项目可以在不同环境中构建并确保结果的一致性。
  • 更方便的与 GitOps 结合, Jsonnet Bundler 提供 与 GitOps 的集成。

jsonnet-bundler 安装

Jsonnet Bundler 有两种安装模式,实际上就是 Go 程序通用的安装方式:

  • Jsonnet Bundler 二进制文件 (预构建)
  • go install 安装

在 jsonnet bundler release 页面下载对应版本

使用 go install 安装

bash
1
go install -a github.com/jsonnet-bundler/jsonnet-bundler/cmd/jb@latest

注意

  • jsonnet bundler 要求 Go 版本最少是 Go 1.13 或更高版本。 [1]
  • 使用 go install 安装的,需要将 $(go env GOPATH)/bin 加入到 $PATH

jsonnetfile.json

https://jsonnet.movatech.today/blog/structure-of-the-jsonnetfile.json-file/

https://jsonnet.org/learning/tutorial.html

https://jsonnet-libs.github.io/jsonnet-training-course/

https://medium.com/@pmspraveen8/k8s-libsonnet-generating-manifests-33a5e5aff277

Reference

[1] jsonnet

[2] JSONPath Syntax

[3] k8s学习-kubectl命令行 jsonpath的使用