如何从现有的 Kubernetes 清单构建 Helm 图表
How to build Helm chart from existing Kubernetes manifest
我是k8s的新手。我有作业,这是我的情况:
有一个面向微服务的应用程序,使用十个容器构建。它有一个 docker-compose
文件,可以轻松设置。现在我的任务是将它部署到 Kubernetes 中。我的想法:使用 kompose
将 docker-compose
文件转换为 k8s 清单,并为每个服务创建 helm chart。
我的问题是:我必须一张一张地修改每个图表,不是吗?有什么方法可以根据现有的 k8s 清单生成 values.yaml
吗?例如,来自:
# deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
annotations:
kompose.cmd: kompose convert
kompose.version: 1.22.0 (955b78124)
creationTimestamp: null
labels:
io.kompose.service: bookstore-account-service
name: bookstore-account-service
...
对此,自动:
# deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
annotations:
kompose.cmd: {{ .Values.cmd }}
kompose.version: {{ .Values.ver }}
creationTimestamp: null
labels:
io.kompose.service: {{ .Values.name }}
name: {{ .Values.name }}
...
# values.yaml
cmd: kompose convert
ver: 1.22.0 (955b78124)
name: bookstore-account-service
p/s:抱歉我的英语不好,这不是我的母语 :D
问题是,您如何决定哪一个是可定制的(进入值文件)。如果你有那个清单,那就更容易了。您可以使用 yaml 解析器,替换您想要自定义的那些字段的值并将这些值放入 values.yaml
文件。
您可以 运行 docker-compose 文件来部署服务,您可以从 K8s YAML 清单中写下包含所需字段的控制图。
在 values.yaml
中,您可以根据您的要求添加必要的,您希望哪一个保持可配置。
您还可以运行 基本 helm 模板的命令并根据需要进行编辑
helm create mychartname
Helm values.yaml
文件是您可以在部署时配置图表的要点。一方面,您不能配置任何未在 .Values
中引用的内容;另一方面,您通常不希望 YAML 文件的每一行都是可配置的。
如果我要解决这个问题,我会从 helm create
a new chart. I'd then switch to the templates
directory, move aside most of the boilerplate there (but leave the generated _helpers.tpl
file), and run kompose convert
开始。这将生成一组 YAML 文件,但没有 Helm 模板。
从这里开始,我将编辑文件,使它们与典型的 Helm 用法相匹配。查看来自 helm create
(或 in the Helm source)的原始文件以获取示例。我希望编辑后的 deployment.yaml
看起来像:
apiVersion: apps/v1
kind: Deployment
metadata:
{{-/* delete the Kompose annotations: and empty creationTimestamp: */}}
labels:
{{-/* get a standard set of labels from _helpers.tpl }}
{{- include "bookstore.labels" . | nindent 4 }}
{{-/* get a standard name from _helpers.tpl }}
name: {{ include "bookstore.fullname" . }}
那么 values.yaml
文件中应该放些什么呢?这些是您需要在部署时配置的东西。如果您需要覆盖容器 command:
或 args:
,这些通常是固定的,但如果您需要提供某种凭据或主机名,则这些可能因部署而异。 (如果您 helm install
编辑了两次图表,那么两次安装之间 有什么不同 ?)helm create
模板使资源限制可配置,因为这些可能会因基础而有很大差异关于实际工作量:
# deployment.yaml (from helm/create.go linked above)
resources:
{{- toYaml .Values.resources | nindent 12 }}
# values.yaml (also from helm/create.go)
resources: {}
您可以在此处使用一组特定的值进行部署:
# values.dev.yaml
resources:
requests:
memory: 256Mi
limits:
memory: 1Gi
# values.prod.yaml
resources:
requests:
memory: 2Gi
limits:
memory: 4Gi
helm install bookstore . -f values.dev.yaml
例如,如果您保留了“生成此文件的 Kompose 版本”注释,则没有理由在环境之间更改它,因此您可以将其保留为固定字符串。
我是k8s的新手。我有作业,这是我的情况:
有一个面向微服务的应用程序,使用十个容器构建。它有一个 docker-compose
文件,可以轻松设置。现在我的任务是将它部署到 Kubernetes 中。我的想法:使用 kompose
将 docker-compose
文件转换为 k8s 清单,并为每个服务创建 helm chart。
我的问题是:我必须一张一张地修改每个图表,不是吗?有什么方法可以根据现有的 k8s 清单生成 values.yaml
吗?例如,来自:
# deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
annotations:
kompose.cmd: kompose convert
kompose.version: 1.22.0 (955b78124)
creationTimestamp: null
labels:
io.kompose.service: bookstore-account-service
name: bookstore-account-service
...
对此,自动:
# deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
annotations:
kompose.cmd: {{ .Values.cmd }}
kompose.version: {{ .Values.ver }}
creationTimestamp: null
labels:
io.kompose.service: {{ .Values.name }}
name: {{ .Values.name }}
...
# values.yaml
cmd: kompose convert
ver: 1.22.0 (955b78124)
name: bookstore-account-service
p/s:抱歉我的英语不好,这不是我的母语 :D
问题是,您如何决定哪一个是可定制的(进入值文件)。如果你有那个清单,那就更容易了。您可以使用 yaml 解析器,替换您想要自定义的那些字段的值并将这些值放入 values.yaml
文件。
您可以 运行 docker-compose 文件来部署服务,您可以从 K8s YAML 清单中写下包含所需字段的控制图。
在 values.yaml
中,您可以根据您的要求添加必要的,您希望哪一个保持可配置。
您还可以运行 基本 helm 模板的命令并根据需要进行编辑
helm create mychartname
Helm values.yaml
文件是您可以在部署时配置图表的要点。一方面,您不能配置任何未在 .Values
中引用的内容;另一方面,您通常不希望 YAML 文件的每一行都是可配置的。
如果我要解决这个问题,我会从 helm create
a new chart. I'd then switch to the templates
directory, move aside most of the boilerplate there (but leave the generated _helpers.tpl
file), and run kompose convert
开始。这将生成一组 YAML 文件,但没有 Helm 模板。
从这里开始,我将编辑文件,使它们与典型的 Helm 用法相匹配。查看来自 helm create
(或 in the Helm source)的原始文件以获取示例。我希望编辑后的 deployment.yaml
看起来像:
apiVersion: apps/v1
kind: Deployment
metadata:
{{-/* delete the Kompose annotations: and empty creationTimestamp: */}}
labels:
{{-/* get a standard set of labels from _helpers.tpl }}
{{- include "bookstore.labels" . | nindent 4 }}
{{-/* get a standard name from _helpers.tpl }}
name: {{ include "bookstore.fullname" . }}
那么 values.yaml
文件中应该放些什么呢?这些是您需要在部署时配置的东西。如果您需要覆盖容器 command:
或 args:
,这些通常是固定的,但如果您需要提供某种凭据或主机名,则这些可能因部署而异。 (如果您 helm install
编辑了两次图表,那么两次安装之间 有什么不同 ?)helm create
模板使资源限制可配置,因为这些可能会因基础而有很大差异关于实际工作量:
# deployment.yaml (from helm/create.go linked above)
resources:
{{- toYaml .Values.resources | nindent 12 }}
# values.yaml (also from helm/create.go)
resources: {}
您可以在此处使用一组特定的值进行部署:
# values.dev.yaml
resources:
requests:
memory: 256Mi
limits:
memory: 1Gi
# values.prod.yaml
resources:
requests:
memory: 2Gi
limits:
memory: 4Gi
helm install bookstore . -f values.dev.yaml
例如,如果您保留了“生成此文件的 Kompose 版本”注释,则没有理由在环境之间更改它,因此您可以将其保留为固定字符串。