首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >kubectl kustomize树叶占位符行

kubectl kustomize树叶占位符行
EN

Stack Overflow用户
提问于 2022-08-29 09:16:31
回答 1查看 106关注 0票数 0

我试图使用Kustomize,但结果是占位符行错了。

我有这样的base/deployment.yaml

代码语言:javascript
复制
apiVersion: apps/v1
kind: Deployment
metadata:
  name: app
spec:
  replicas: 1
  selector:
    matchLabels:
      app: app
  template:
    metadata:
      labels:
        app: app
    spec:
      containers:
        - image: IMAGE_PLACEHOLDER
          name: CONTAINER_NAME_PLACEHOLDER

还有base/kustomization.yaml

代码语言:javascript
复制
resources:
  - deployment.yaml

也包括覆盖/开发/库气孔化。

代码语言:javascript
复制
resources:
  - ../../base
commonLabels:
  app: myname
patchesStrategicMerge:
  - change_container_name.yaml

overlays/dev/change_container_name.yaml

代码语言:javascript
复制
apiVersion: apps/v1
kind: Deployment
metadata:
  name: app
spec:
  template:
    spec:
      containers:
        - name: myname
          image: registry.mycompany.ru/project/app:VERSION

作为运行kubectl kustomize ./overlays/dev的结果,我在我的控制台中看到了如下所示:

代码语言:javascript
复制
...
containers:
      - image: registry.mycompany.ru/project/app:VERSION
        name: myname
        image: IMAGE_PLACEHOLDER #--- unwanted line
        name: CONTAINER_NAME_PLACEHOLDER #--- unwanted line
        ports:
        - containerPort: 80

如何解决这个问题?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-08-29 11:58:57

这不是您想要的工作方式:因为containers:是一个列表,Kustomize使用容器名称来标识您想要修改的元素。因为您的修补程序中的容器名称与现有容器名称不匹配,所以您要向部署中添加一个新容器。所以你才会:

代码语言:javascript
复制
      containers:
      - image: registry.mycompany.ru/project/app:VERSION
        name: myname
      - image: IMAGE_PLACEHOLDER
        name: CONTAINER_NAME_PLACEHOLDER

我不知道您在这里的动机是什么,但是如果您真的想修改现有容器的名称,可以使用using修补程序而不是策略合并修补程序。该补丁可能如下所示:

代码语言:javascript
复制
- op: replace
  path: /spec/template/spec/containers/0/name
  value: myname

我会把它用在这样的文件里:

代码语言:javascript
复制
resources:
  - ../../base

commonLabels:
  app: myname

patches:
  - path: change_container_name.yaml
    target:
      kind: Deployment
      name: app

根据您的示例,这将产生以下输出:

代码语言:javascript
复制
apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    app: myname
  name: app
spec:
  replicas: 1
  selector:
    matchLabels:
      app: myname
  template:
    metadata:
      labels:
        app: myname
    spec:
      containers:
      - image: IMAGE_PLACEHOLDER
        name: myname

您可以对图像名执行相同的操作,但也可以使用图像变压器

代码语言:javascript
复制
resources:
  - ../../base
commonLabels:
  app: myname

patches:
  - path: change_container_name.yaml
    target:
      kind: Deployment
      name: app

images:
  - name: IMAGE_PLACEHOLDER
    newName: registry.mycompany.ru/project/app
    newTag: VERSION

这让我们:

代码语言:javascript
复制
apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    app: myname
  name: app
spec:
  replicas: 1
  selector:
    matchLabels:
      app: myname
  template:
    metadata:
      labels:
        app: myname
    spec:
      containers:
      - image: registry.mycompany.ru/project/app:VERSION
        name: myname
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73526585

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档