argocd + kustomize 报错“rpc error: code = Unknown desc = Manifest generation error (cached)”

发布时间 2023-07-08 15:46:48作者: 九尾cat

argocd + kustomize 报错“rpc error: code = Unknown desc = Manifest generation error (cached)”

 报错内容

报错内容为:rpc error: code = Unknown desc = Manifest generation error (cached): `kustomize build .xiaowangTech/4.0/frontend/dingding-pc/manifests/overlays/test` failed exit status 1: # Warning: 'patchesStrategicMerge' is deprecated. Please use 'patches' instead. Run 'kustomize edit fix' to update your Kustomization automatically.Error: no matches for Id Ingress.v1.networking.k8s.io/dingding-pc-ingress.test; failed to find unique target for patch Ingress.v1.networking.k8s.io/dingding-pc-ingress.test

原因分析

配置test环境时ingress配置没有和base里面想匹配,导致报错并且SYNC STATUS状态为Unknown

解决方案

经过对比发现,配置test环境的ingress和base里面的ingress不匹配,即test环境的ingress和base里面的ingress相同,再通过test环境的kustomization.yaml进行替换,最后解决问题

 

 

$cat ding/manifests/base/ingress.yaml
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  annotations:
    description: ding
    kubernetes.io/ingress.class: test-ingress-internet
    kubernetes.io/ingress.rule-mix: "true"
    nginx.ingress.kubernetes.io/cors-allow-headers: DNT,X-CustomHeader,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Authorization
    nginx.ingress.kubernetes.io/cors-allow-methods: PUT, GET, POST, OPTIONS
    nginx.ingress.kubernetes.io/cors-allow-origin: '*'
    nginx.ingress.kubernetes.io/enable-cors: "true"
  name: ding-ingress
  namespace: dev
spec:
  rules:
    - host: ding-dev.weirui.com
      http:
        paths:
          - backend:
              service:
                name: dev-ding-svc
                port:
                  number: 80
            pathType: ImplementationSpecific
...




$cat ding/manifests/overlays/test/ingress.yaml
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: ding-ingress
  namespace: dev
spec:
  rules:
    - host: ding-test.weirui.com
      http:
        paths:
          - backend:
              service:
                name: test-ding-svc
                port:
                  number: 80
            pathType: ImplementationSpecific
...



$cat ding/manifests/overlays/test/kustomization.yaml
# 生成test环境namespace
namespace: test
# 生成test环境的前缀“test-”
namePrefix: test-
# 指向base主目录

# 指向同级生产配置目录的·yaml资源
patchesStrategicMerge:
  - replica.yaml
  - image.yaml
  - volumes.yaml
  - ingress.yaml
  # 指定对应的deployment文件
  # 修改同级目录的port.yaml
#将key,value传递到生成的configmap

configMapGenerator:
  - name: ding-config
    files:
      - default.conf
generatorOptions:
  disableNameSuffixHash: true
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
resources:
  - ../../base