Kustomize - "не удалось найти уникальную цель для патча ..." - PullRequest
0 голосов
/ 19 апреля 2020

Я только начинаю использовать kustomize. У меня есть следующие файлы yaml для kustomize:

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

, где deploy.yaml и service.yaml - это сгенерированные файлы с jib, и они хорошо работают. А содержимое файла kustomization.yaml следующее:

apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization

resources:  
- service.yaml
- deployment.yaml  

И в другом каталоге

ls -l ./kustomize/qa
133 Apr 18 21:33 kustomization.yaml
95 Apr 18 21:37 update-replicas.yaml

, где

apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization

resources:
- ../base

patchesStrategicMerge:
- update-replicas.yaml

и

apiVersion: apps/v1
kind: Deployment
metadata:
  name: my-app
spec:
  replicas: 2

После запуска "kustomize build ./kustomize/base" я запускаю

~/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

У меня есть файлы, связанные с поиском, и я не вижу опечаток в имени приложения.

А вот и файл deploy.yaml.

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 напрямую.

Как решить эту проблему?

1 Ответ

0 голосов
/ 24 апреля 2020

Я смог воспроизвести ваш сценарий и не получил никакой ошибки.

Я опубликую пошаговый пример, чтобы вы могли дважды проверить свой.

  • I ' В качестве примера будем использовать простой nginx сервер, вот структура файлов:
$ tree Kustomize/
Kustomize/
├── base
│   ├── deployment.yaml
│   ├── kustomization.yaml
│   └── service.yaml
└── qa
    ├── kustomization.yaml
    └── update-replicas.yaml
2 directories, 5 files
  • Базовый Yamls:
$ cat Kustomize/base/kustomization.yaml 
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization

resources:
- deployment.yaml
- service.yaml
$ 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
$ 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:
$ cat Kustomize/qa/kustomization.yaml 
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization

resources:
- ../base

patchesStrategicMerge:
- update-replicas.yaml
$ cat Kustomize/qa/update-replicas.yaml 
apiVersion: apps/v1
kind: Deployment
metadata:
  name: my-app
spec:
  replicas: 2
  • Теперь я построю base и приму:
$ 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

Все было развернуто в соответствии с назначением: пакет, развертывание, обслуживание и репликация, с 1 репликой. - Теперь давайте развернем обновление qa:

$ 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.

Предложения :

  • Я заметил, что вы добавили к вопросу развертывание после развертывания (through kubectl get deploy <name> -o yaml), но, возможно, проблема в исходном файле, и при применении она несколько изменилась.
  • Попробуйте воспроизвести его с примерами файлов, которые я предоставил, чтобы увидеть, получаете ли вы тот же вывод.

Дайте мне знать ваши результаты!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...