Kustomize:设置文件或URI中的属性值

问题描述 投票:1回答:2

我想拥有一个Kustomize清单,其中某些属性的值来自某个文件或URI的全部内容。

我该怎么做?

kubernetes kustomize
2个回答
1
投票

您可以包含远程kustomization.yml文件,但不能包含单个值。如果您确实愿意,可以构建自己的转换器插件,但这并不是真正的Kustomize精神。


1
投票

通常with kustomize您将要使用的是overlay and patches(一个或多个文件),它们已合并到您的基本文件中。修补程序会覆盖属性。使用这两个功能,您可以预定义一些可能的清单组合,并在将它们应用于集群之前就将它们组合在一起。

您可以添加或编辑/设置某些特定属性with patches或使用kustomize子命令,例如:

kustomize edit set image your-registry.com:$image_tag

# just to identify version in metadata sections for service/deployment/pods - not just via image tag
kustomize edit add annotation appVersion:$image_tag
kustomize build . | kubectl -n ${your_ns} apply -f -

但是,如果要有一个清单文件并一遍又一遍地(在运行中)操纵相同的属性,则应考虑使用helm的模板机制。如果kustomize不允许您编辑要更改的单个特定属性,这也是一个选项。

您只需要一个values.yaml文件(包含键/值对)和一个template.yaml文件。您可以在values.yaml中预先设置一些属性-根据需要,您可以按CLI覆盖它们。该工具将为您生成带有这些值的k8s清单。

模板文件:

---
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: {{ .Values.appSettings.appName }}
  namespace: {{ .Values.appSettings.namespace }}
  labels:
    name: {{ .Values.appSettings.appName }}
spec:
  replicas: 1
  template:
    metadata:
      labels:
        name: {{ .Values.appSettings.appName }}
    spec:
      containers:
        - name: {{ .Values.appSettings.appName }}
          image: "{{ .Values.appSettings.image }}"
          ports:
            - containerPort: 8080
[...]

---
apiVersion: v1
kind: Service
metadata:
  name: {{ .Values.appSettings.appName }}-svc
  namespace: {{ .Values.appSettings.namespace }}
  labels:
    name: {{ .Values.appSettings.appName }}
spec:
  ports:
    - port: 8080
      targetPort: 8080
  selector:
    name: {{ .Values.appSettings.appName }}

值文件:

appSettings:  
  appName: your-fancy-app
  appDomain: please_override_via_cli
  namespace: please_override_via_cli

CLI:

helm template
  --set appSettings.image=your-registry.com/service:$(cat versionTag.txt)
  --set appSettings.namespace=your-ns
  --set appSettings.appDomain=your-domain.com
  ./ -f ./values.yaml | kubectl apply -f -
© www.soinside.com 2019 - 2024. All rights reserved.