首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Kustomize -“找不到补丁的唯一目标...”

Kustomize -“找不到补丁的唯一目标...”
EN

Stack Overflow用户
提问于 2020-04-19 14:49:29
回答 2查看 7.4K关注 0票数 3

我刚开始使用kustomize。我有以下用于kustomize的yaml文件:

代码语言:javascript
复制
ls -l ./kustomize/base/
816 Apr 18 21:25 deployment.yaml
110 Apr 18 21:31 kustomization.yaml
310 Apr 18 21:25 service.yaml

其中deployment.yaml和service.yaml是使用jib生成的文件,并且运行良好。kustomization.yaml的内容如下:

代码语言:javascript
复制
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization

resources:  
- service.yaml
- deployment.yaml  

并在另一个目录中

代码语言:javascript
复制
ls -l ./kustomize/qa
133 Apr 18 21:33 kustomization.yaml
95 Apr 18 21:37 update-replicas.yaml

哪里

代码语言:javascript
复制
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization

resources:
- ../base

patchesStrategicMerge:
- update-replicas.yaml

代码语言:javascript
复制
apiVersion: apps/v1
kind: Deployment
metadata:
  name: my-app
spec:
  replicas: 2

在运行"kustomize build ./kustomize/base“之后,我运行

代码语言:javascript
复制
~/kustomize build ./kustomize/qa
Error: no matches for OriginalId ~G_~V_Deployment|~X|my-app; no matches for CurrentId ~G_~V_Deployment|~X|my-app; failed to find unique target for patch ~G_~V_Deployment|my-app

我查看了相关文件,但没有看到应用程序名称上有任何拼写错误。

这是deployment.yaml文件。

代码语言:javascript
复制
apiVersion: apps/v1
kind: Deployment
metadata:
  creationTimestamp: null
  labels:
    app: my-app
  name: my-app
spec:
  replicas: 1
  selector:
    matchLabels:
      app: my-app
  strategy: {}
  template:
    metadata:
      creationTimestamp: null
      labels:
        app: my-app
    spec:
      containers:
        - image: docker.io/[my Docker ID]/my-app
        name: my-app
        resources: {}
        readinessProbe:
          httpGet:
            port: 8080
            path: /actuator/health/readiness
        livenessProbe:
          httpGet:
            port: 8080
            path: /actuator/health/liveness
        lifecycle:
          preStop:
            exec:
              command: ["sh", "-c", "sleep 10"]
status: {}

同样,上面的文件是用经过一些修改的jib生成的。它直接在Kubernetes上运行。

如何解决这个问题?

EN

回答 2

Stack Overflow用户

发布于 2021-08-05 06:29:09

我得到了同样的问题,并解决了。此问题与安装的Kustomize版本有关。检查!kustomize version。从Kustomize v3.0.x
及更高版本开始,我们还需要在补丁中提到名称空间。在补丁yaml文件中添加名称空间后,问题得到解决。

在您示例中,在update-replicas.yaml补丁文件的metadata下添加名称空间。

有关自定义版本相关问题的更多详细信息(如"...failed to find find target For patch..."):https://github.com/kubernetes-sigs/kustomize/issues/1351

票数 12
EN

Stack Overflow用户

发布于 2020-04-24 22:54:55

我能够重现你的场景,并且没有得到任何错误。

我会张贴一步一步的例子,这样你可以仔细检查你的。

  • 我将使用一个简单的nginx服务器作为例子,这是文件结构:

代码语言:javascript
复制
$ tree Kustomize/
Kustomize/
├── base
│   ├── deployment.yaml
│   ├── kustomization.yaml
│   └── service.yaml
└── qa
    ├── kustomization.yaml
    └── update-replicas.yaml
2 directories, 5 files

  • 基础Yamls:

代码语言:javascript
复制
$ cat Kustomize/base/kustomization.yaml 
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization

resources:
- deployment.yaml
- service.yaml
代码语言:javascript
复制
$ cat Kustomize/base/deployment.yaml 
apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    app: my-app
  name: my-app
spec:
  replicas: 1
  selector:
    matchLabels:
      app: my-app
  template:
    metadata:
      labels:
        app: my-app
    spec:
      containers:
      - name: my-app
        image: nginx
        ports:
        - containerPort: 80
代码语言:javascript
复制
$ cat Kustomize/base/service.yaml 
kind: Service
apiVersion: v1
metadata:
  name: nginx-svc
spec:
  selector:
    app: my-app
  type: NodePort
  ports:
  - protocol: TCP
    port: 80
    targetPort: 80

  • Qa Yamls:

代码语言:javascript
复制
$ cat Kustomize/qa/kustomization.yaml 
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization

resources:
- ../base

patchesStrategicMerge:
- update-replicas.yaml
代码语言:javascript
复制
$ cat Kustomize/qa/update-replicas.yaml 
apiVersion: apps/v1
kind: Deployment
metadata:
  name: my-app
spec:
  replicas: 2

  • 现在我将构建base并应用:

代码语言:javascript
复制
$ kustomize build ./Kustomize/base | kubectl apply -f -
service/nginx-svc created
deployment.apps/my-app created

$ kubectl get all
NAME                          READY   STATUS    RESTARTS   AGE
pod/my-app-64778f875b-7gsg4   1/1     Running   0          52s

NAME                 TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)        AGE
service/nginx-svc    NodePort    10.96.114.118   <none>        80:31880/TCP   52s

NAME                     READY   UP-TO-DATE   AVAILABLE   AGE
deployment.apps/my-app   1/1     1            1           52s

NAME                                DESIRED   CURRENT   READY   AGE
replicaset.apps/my-app-64778f875b   1         1         1       52s

所有东西都按预期部署,pod,部署,服务和副本集,只有一个副本。-现在让我们部署qa更新:

代码语言:javascript
复制
$ kustomize build ./Kustomize/qa/ | kubectl apply -f -
service/nginx-svc unchanged
deployment.apps/my-app configured

$ kubectl get all
NAME                          READY   STATUS    RESTARTS   AGE
pod/my-app-64778f875b-7gsg4   1/1     Running   0          3m26s
pod/my-app-64778f875b-zlvfm   1/1     Running   0          27s

NAME                 TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)        AGE
service/nginx-svc    NodePort    10.96.114.118   <none>        80:31880/TCP   3m26s

NAME                     READY   UP-TO-DATE   AVAILABLE   AGE
deployment.apps/my-app   2/2     2            2           3m26s

NAME                                DESIRED   CURRENT   READY   AGE
replicaset.apps/my-app-64778f875b   2         2         2       3m26s

  • 这是预期行为,副本数量已扩展到2。

Suggestions:

  • 我注意到你在问题中添加了部署后部署(through kubectl get deploy <name> -o yaml)的问题,但可能问题出在原始文件中,并且在应用时,它更改了somewhat.
  • Try,以便用我提供的示例文件重现该文件,以查看您是否获得相同的输出。

让我知道你的结果!

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61300596

复制
相关文章

相似问题

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