标签: kustomize

无法使用 kustomize 修补服务名称

我正在尝试使用 kustomize 重命名我的服务。

我收到以下错误:

Error: couldn't find target core_v1_Service|~X|~P|SERVICE_NAME|~S for json patch
Run Code Online (Sandbox Code Playgroud)

这是我的基本服务文件:

apiVersion: v1
kind: Service
metadata:
  labels:
    version: IMAGE_TAG
  name: SERVICE_NAME
  namespace: my-namespace
spec:
  ports:
    - name: http-service
      port: 8080
      protocol: TCP
      targetPort: http-service
  selector:
    app.kubernetes.io/name:
      valueFrom:
        fieldRef:
          apiVersion: v1
          fieldPath: metadata.name
  sessionAffinity: None
  type: ClusterIP

Run Code Online (Sandbox Code Playgroud)

这是我的 kustomization.yaml 文件,我在其中定义了 patchJson6902:

patchesJson6902:
#- target:
#    group: apps
#    version: v1
#    kind: Deployment
#    name: DEPLOYMENT_NAME
#  path: patch_deployment.yaml
- target:
    group: core
    version: v1
    kind: Service
    name: SERVICE_NAME …
Run Code Online (Sandbox Code Playgroud)

google-kubernetes-engine kubectl kustomize

5
推荐指数
1
解决办法
1万
查看次数

列出 kustomization 或 yaml 清单列表中的所有容器映像?

当使用限制允许的注册表的准入控制器操作 k8s 集群时,最好检查清单以验证它们仅引用此类映像。

是否有一种完善且正确的方法来处理 Kubernetes 清单流(例如 Kustomize 输出)并列出它引用的所有容器映像?包括所有嵌入的Deployments、StatefulSets、 s、CRD等?JobPodTemplate

我开始写自己的文章,然后意识到这一定是一个已解决的问题。kustomizeimages:变压器来重写图像,但它似乎无法列出变压器检查的候选者。肯定有什么东西吧?

例如,如果我有kustomization.yaml

apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
resources:
  - "https://github.com/prometheus-operator/kube-prometheus"
Run Code Online (Sandbox Code Playgroud)

我希望能够运行一些getimages过滤器,以便

kustomize build | getimages
Run Code Online (Sandbox Code Playgroud)

返回与这个 hacky shell 管道示例相同的列表:

$ kustomize build|grep 'image:' | awk '$2 != "" { print $2}' | sort -u
grafana/grafana:8.4.6
jimmidyson/configmap-reload:v0.5.0
k8s.gcr.io/kube-state-metrics/kube-state-metrics:v2.4.2
k8s.gcr.io/prometheus-adapter/prometheus-adapter:v0.9.1
quay.io/brancz/kube-rbac-proxy:v0.12.0
quay.io/prometheus/alertmanager:v0.24.0
quay.io/prometheus/blackbox-exporter:v0.20.0
quay.io/prometheus/node-exporter:v1.3.1
quay.io/prometheus-operator/prometheus-operator:v0.55.1
quay.io/prometheus/prometheus:v2.34.0
Run Code Online (Sandbox Code Playgroud)

...但是以一种稳健且正确的方式,与所说的 hacky shell 命令不同。

我期望像kubeval或那样的工具kustomize …

kubernetes kustomize

5
推荐指数
0
解决办法
919
查看次数

为新类型扩展 kustomize 图像转换器

有没有办法扩展 kustomize 图像转换器以将更多键识别为图像说明符?就像nameReference变压器namePrefixnameSuffix变压器所做的那样。

Kustomizeimages:转换器对于 k8s 清单中的图像替换和注册表重命名非常有用。

它只支持嵌入的类型PodTemplate,也许还有一些硬编码的类型。不使用的 CRDPodTemplate不会被处理,尽管它们常见。示例包括kube-prometheus PrometheusAlertManager资源以及opentelemetry-operator OpenTelemetryCollector资源。

因此,您必须维护一堆混乱的战略合并或 json 补丁,以使用受信任的注册表等为此类图像添加前缀。


这是目前问题的一个例子。假设我必须部署以mytrusted.registry变压器images:列表为前缀的所有内容。为了简洁起见,我将使用一个虚拟图像来替换所有匹配的图像MATCHED,因此我不必将它们全部列出:

apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
resources:
  - "https://github.com/prometheus-operator/kube-prometheus"
images:
  - name: "(.*)"
    newName: "MATCHED"
    newTag: "fake"
Run Code Online (Sandbox Code Playgroud)

您可能期望结果中唯一的图像是“MATCHED:fake”,但实际上:

$ kustomize build  | grep 'image: .*' | sort | uniq -c
     12         image: MATCHED:fake
      1   image: quay.io/prometheus/alertmanager:v0.24.0
      1   image: …
Run Code Online (Sandbox Code Playgroud)

kubernetes kustomize

5
推荐指数
1
解决办法
2890
查看次数

kustomize:将 imagePullSecrets 添加到所有部署

我有一组在一个环境中工作的 kubernetes 配置文件。我希望部署到另一个环境中,在那里我需要向所有Deployment配置添加一个 imagePullSecrets 条目。

我可以:

regcred-1.yaml:

apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: deployment-1
spec:
  template:
    spec:
      imagePullSecrets:
      - name: regcred
Run Code Online (Sandbox Code Playgroud)

kustomization.yaml:

bases:
  - ../base

patchesStrategicMerge:
  - regcred-1.yaml
Run Code Online (Sandbox Code Playgroud)

这只会修补deployment-1

有没有办法将补丁应用到所有部署?

kubernetes kustomize

4
推荐指数
3
解决办法
3077
查看次数

Kubernetes Kustomize:替换补丁文件中的变量

鉴于以下 kustomize 补丁:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: flux
spec:
  template:
    spec:
      containers:
        - name: some-name
          args:
            - --some-key=some-value
            ...
            - --git-url=https://user:${PASSWORD}@domain.de
Run Code Online (Sandbox Code Playgroud)

我想使用kubectl apply -k并以某种方式传递一个值${PASSWORD},我可以从我的构建脚本中设置该值。

我工作的唯一解决方案迄今被替换${PASSWORD}sed,但我宁愿一个kustomize解决方案。

kubernetes kustomize

4
推荐指数
1
解决办法
9611
查看次数

集群上活动内容与 kustomize 上活动内容之间的差异

kustomize的文档提供了一个很好的单行代码来比较两种不同的覆盖...

diff \
  <(kustomize build $OVERLAYS/staging) \
  <(kustomize build $OVERLAYS/production)
Run Code Online (Sandbox Code Playgroud)

有没有办法做同样的事情,但针对特定 kubernetes 命名空间中运行的内容以及磁盘上定义的覆盖层?

更具体地说,知道kubectl apply -k .不实际做会做什么?using--dry-run只是说吐出对象列表而不是真正的差异。

diff yaml kubernetes kustomize

4
推荐指数
1
解决办法
4847
查看次数

需要有关 helm 图表与基于清单的部署的建议

在我目前的工作中,我们正在运行多个 k8s 集群,并允许多个团队在集群中运行服务。

每个 service/git 存储库都会有 kustomize 文件,其中包含所有补丁的列表。在 CD 阶段,我们将此 kustomize 转换为给定环境/区域的 k8s 清单(服务、配置映射、部署),并运行 kubectl apply 命令在我们的 kubernetes 中运行。

现在,我们开始研究 Helm 图表,而不是将 Kustomize 转换为 k8s 清单,计划是为通用 Helm 图表生成 value.yaml 文件并使用 git sha 部署 Helm 版本。因此,关于这种方法的任何想法或建议,从 k8s 清单迁移到基于 helm 图表版本的部署是否有任何优势。当团队计划进行蓝/绿或金丝雀部署时,Helm Chart 有什么优势吗?

目标是:

  1. 有神器
  2. 回滚计划
  3. 用于验证 yaml 并检查服务是否启动的测试用例。

任何线索将不胜感激。

build manifest kubernetes kubernetes-helm kustomize

4
推荐指数
1
解决办法
7788
查看次数

如何安装特定的 kustomize 版本

我尝试在 Mac 中安装 kustomize v3.2.1,但在执行这些步骤时出现以下错误。

wget "https://github.com/kubernetes-sigs/kustomize/archive/refs/tags/kustomize/v3.2.1.tar.gz" 解压源代码

tar xzf xxxxx.tar.gz cd xxxxxx make install

输出:

go install /cmd/kustomize
make: go: No such file or directory
make: *** [install] Error 1
Run Code Online (Sandbox Code Playgroud)

如何安装这个版本而不出现任何问题?谢谢!

macos homebrew kustomize

4
推荐指数
1
解决办法
9819
查看次数

自定义如何在每个数组中定位替换

根据示例https://kubectl.docs.kubernetes.io/references/kustomize/kustomization/replacements/

可以像这样针对特定的数组项spec.template.spec.containers.[name=hello].env.[name=SECRET_TOKEN].value

但是我们如何定位每个数组项呢?

尝试-如下,但它仅替换最后一次出现的情况。

fieldPaths:
     - spec.http.-.route.0.destination.host
Run Code Online (Sandbox Code Playgroud)

这是我的 kustomization.yaml

apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
namespace: ef
images:
- name: gateway-image
resources:
- configmap.yaml
- virtual-services.yaml
replacements:
- source:
    kind: ConfigMap
    fieldPath: data.HOST
  targets:
  - select:
      kind: VirtualService
    fieldPaths:
     - spec.http.-.route.0.destination.host
    options:
      create: true

Run Code Online (Sandbox Code Playgroud)

这是我的目标 yaml service-entries.yaml - 我预计 HOST 在这两个地方都会被替换。

apiVersion: networking.istio.io/v1beta1
kind: VirtualService
metadata:
  name: v-rules-1
spec:
  hosts:
    - EXTERNAL-HOST
  gateways:
    - istio-system/default-gateway
    - mesh
  http: # note these are ordered - first rule matching wins …
Run Code Online (Sandbox Code Playgroud)

kustomize

4
推荐指数
1
解决办法
9951
查看次数

如何使用 Kustomize 创建带有 .env 的 configMap

我有一个 NextJS 应用程序,需要安装 .env 文件。我通常通过提供 configMap 来做到这一点:

kind: ConfigMap
apiVersion: v1
metadata:
  name: frontend-configmap
  namespace: default
data:
  .env: |-
    NEXT_PUBLIC_API_URL=http://my.domain.com
    API_URL=http://my.domain.com
Run Code Online (Sandbox Code Playgroud)

但如何使用 Kustomize 做到这一点呢?

我尝试使用envs,但如何获取里面的值?

configMapGenerator:
  - name: frontend-configmap
    envs:
      - .env

Run Code Online (Sandbox Code Playgroud)

先感谢您

environment-variables kubernetes kustomize

4
推荐指数
1
解决办法
1万
查看次数