Power Up Helm Charts:使用Kustomize管理Kubernetes部署

运维团队需要自动化应用程序的部署Helm是部署到Kubernetes的行业标准解决方案.像许多软件供应商一样,我们提供Artifactory安装舵图和其他JFrog DevOps平台产品,为大多数团队需要的标准/hth华体会最新官方网站推荐配置而设计。这些模板为客户提供了一组有限的配置选项。
如果您需要自定义您的Artifactory,x光,或以您自己的方式进行其他部署,您可能会将图表分叉以创建您自己的自定义版本。但一旦你这样做了,每次JFrog更新它的头盔图表,你的自定义版本就会变得不同步和过时。为了使您的版本保持最新,您需要为每次更新重新集成。
如何自定义Helm图表而不分叉?这正是谷歌所创造的Kustomize对。在这篇文章中,也在即将到来的会议-我们将向您展示如何使用Kustomize覆盖来执行自定义部署,同时始终使用来自供应商的最新Helm chart版本。
模板vs覆盖
一个模板是具有占位符的表单,自动化流程将解析占位符以将其替换为值。它是为执行特定功能而设计的,它标记了必须提供具体信息的地方。如果你玩过“疯狂填空”游戏,你就会对这个“填空”过程很熟悉。

作为开发人员,您将认识到模板和值就像宏及其变量,或子例程及其参数。
一个覆盖是替换字符串的集合。原始文件中的文本块被完全替换为新的文本块。

有什么不同?
- 模板需要仔细准备,以便在关键位置要求特定的信息。当您使用模板时,您只能更改模板提供的那些元素。
- 覆盖不需要以任何方式准备原始文件。你可以完全替换任何部件。
HelloWorld舵图
由于Artifactory的Helm图表相当高级,让我们使用一个非常简单的示例。在这里,模板允许公司名称的参数。
$ cat模板/pod。yaml apiVersion: v1 kind: Pod metadata: name: helloworld spec: restartPolicy: Never containers: - name: hello image: alpine env: command: ["/bin/sh","-c"] args: ["/bin/echo hello !我的公司名称是{{.Values.companyName}}”)
模板参数的值在文件中values.yaml.
$ cat值。公司名称:ABC公司
让我们来安装一下,看看它是如何工作的。
安装helloworld。NAME: helloworld LAST DEPLOYED: Mon May 18 16:53:14 2020 NAMESPACE: default STATUS: DEPLOYED REVISION: 1 TEST SUITE: None $ kubectl logs -f helloworld Hello!我的公司名字是ABC公司
整洁!这工作得很好,我们将其交付给客户。但有一个客户有一个独特的需求,将员工名和部门名添加到输出中,如下所示:
我叫约翰。我在会计部门工作。我们公司的名字是ABC公司。
好的,很简单,他们可以分叉Helm图表,并更改Helm模板如下:
args: ["/bin/echo.Values.employeeName}}。我为{{工作.Values.employeeDepartment}}。我们的公司名称是{{.Values.companyName}}”)
然后他们会添加新的值values.yaml文件。
$ cat值。员工名:Gary员工部门:营销公司名称:ABC公司
但是,正如我们所注意到的,他们的分叉现在与原来的不同步。这就是Kustomize来拯救的地方。
与Kustomize重叠
Kustomize可以让你在yaml文件中覆盖你自己的“kustomizations”。在我们的例子中,客户可以根据自己的需要“定制”,而不需要创建私有的、不可维护的图表分支。
首先,客户将创建一个kustomization.yaml文件。
patchesJson6902:—target: version: v1 kind: Pod name: helloworld patch: |- - op: replace path: /spec/containers/0/args value: ["/bin/echo My name is {{. values . employeename}}。我为{{. values工作。employeeDepartment}}。我们的公司名称是{{.Values.companyName}}"2022世界杯阿根廷预选赛赛程
现在我们可以直接定制应用我们的覆盖。
$ mkdir templates_new $ kustomize构建-o templates_new $ cat templates_new/~g_v1_pod_helloworld。yaml apiVersion: v1 kind: Pod元数据:名称:helloworld spec:容器:—args:—/bin/echo我的名字是{{. values . employeename}}。我为{{. values工作。employeeDepartment}}。我们的公司名称是{{.Values.companyName}}命令:—/bin/sh—-c image: alpine name: hello restartPolicy: Never
我们将首先用我们的新模板替换原来的模板,然后用Helm安装并验证。
$ mv templates_old $ mv templates_new/ templates $ Helm delete helloworld release“helloworld”uninstalled $ Helm install helloworld。NAME: helloworld LAST DEPLOYED: Tue May 19 14:27:18 2020 NAMESPACE: default STATUS: DEPLOYED修订版:1 TEST SUITE: None $ kubectl logs -f helloworld我的名字是Gary。我在市场部工作。我们公司的名字是ABC公司
太棒了!这符合我们客户的要求。
模板第一,覆盖下一步
在前面的示例中,我们使用Kustomize修改Helm模板以接受新值,然后使用该版本舵安装部署应用程序。
但在某些情况下,这种顺序并不理想。相反,您可能希望首先在本地呈现图表模板,然后当你部署应用程序时应用你的Kustomize覆盖。
当您需要将同一个应用程序部署到多个环境,但需要考虑标签、安全性或计量等横切问题时,这种方法可能最有效。例如,对于每个环境,您可能有不同的需求组合:
| 环境 | 标签 | 安全 | 计量 |
| dev | 是的 | 没有 | 没有 |
| 测验 | 是的 | 没有 | 是的 |
| 生产 | 是的 | 是的 | 是的 |
同样,您可能需要为这些环境中的每一个调整端口或访问。在这些场景中,为每个环境对相同渲染的Helm图表应用不同的Kustomize覆盖可能更灵活。
为此目的,kubectl命令行实用程序提供应用- k选项.该工具将Kustomize应用于图表使用kustomization.yaml目录中的文件。
首先,让我们在本地渲染Helm图表执掌模板命令。这将输出一个包含所有解析值的YAML文件,我们将其捕获到一个本地文件。
mkdir templates_new> templates_new /吊舱。Yaml $ $ cat templates_new/pod。yaml——#来源:helloworld/templates/~g_v1_pod_helloworld。yaml apiVersion: v1 kind: Pod metadata: name: helloworld spec: containers: - args: - /bin/echo我叫Gary。我在市场部工作。我们的公司名称是ABC公司命令:- /bin/sh - -c env: null image: alpine name: hello restartPolicy: Never
创建一个新的定制文件,向我们的pod添加标签,如下所示:
$ cat templates_new/kustomization。- templates_new/pod.yaml . commonLa2022世界杯阿根廷预选赛赛程bels: app: helloworld resources
现在让我们使用Kubectl应用-k用新标签安装图表:
$ helm delete helloworld $ kubectl apply -k templates_new/。pod/helloworld created $ kubectl get pods NAME READY STATUS重启AGE helloworld 0/1 Completed 0 10s $ kubectl describe pod helloworld名称:helloworld命名空间:default优先级:0节点:docker-desktop/192.168.65.3开始时间:Mon, 22 Jun 2020 16:22:11 -0700标签:app=helloworld注解:状态:Succeeded ... ...
成功!现在,我们能够采取任何供应商的Helm图表,并添加我们自己的'kustomizations在上面,同时继续采取上游图表的更新。
的深入了解
JFrog的头盔图表非常先进,我们经常不得不维护多个版本以供内部使用。使用Kustomize帮助我们避免手动编辑图表,并更全面地自动化我们的CI/CD流程。
想了解更多吗?请观看我们的网络研讨会的录音,了解如何用Kustomize & Helm增强Artifactory.我们渴望分享我们所学到的,并帮助您更好地管理部署!